首页 > 其他 > 详细

Halcon 边缘提取

时间:2019-11-23 12:38:10      阅读:438      评论:0      收藏:0      [点我收藏+]

  fast_threshold (Image, Region, 0, 120, 7)

    boundary (Region, RegionBorder, ‘inner‘)

   dilation_circle (RegionClipped, RegionDilation, 2.5)

   reduce_domain (Image, RegionDilation, ImageReduced)

一副图片的前期处理:

1、 Blob应用(逼近感兴趣区域)

2、 Boundary

3、 膨胀

4、 形成Image

 

edges_sub_pix(Image : Edges : FilterAlphaLowHigh : )

提取图像精确边缘 (精确边缘就是亚像素边缘)

(这个函数就是将含有边缘的图像变成亚像素轮廓XLD)

 

Image:  输入图像

Edges:  输出边缘轮廓

Filter: 边缘提取算法的名称 (canny,lanser1 )

Alpha:  高斯平滑系数

Low:    低阈值

High:   高阈值    

 

edges_sub_pix (ImageReduced, Edges, ‘canny‘, 2, 20, 60)

(20,60,这两个越小,边缘越多,越细腻,越大,边缘越少)

介绍一下Canny算子: 
使用累计直方图计算两个阀值。凡是大于高阀值的一定是边缘; 凡是小于低阀值的一定不是边缘;如果检测结果大于低阀值但又小于高阀值,那就要看这个像素的邻接像素中有没有超过高阀值的边缘像素:如果有的话那么它就是边缘了,否则他就不是边缘;

 

 

segment_contours_xld(Contours : ContoursSplit : ModeSmoothContMaxLineDist1MaxLineDist2 : )

 

将一个XLD轮廓分割为直线段、圆(圆弧)、椭圆弧。

 

Contours:       需要进行分割的轮廓。

ContoursSplit: 分割后的轮廓tuple。

Mode: 分割轮廓的方式,可以选择‘lines‘(使用直线段分割),

     ‘lines_circles‘(使用直线段和圆(弧)分割),

     ‘lines_ellipses‘(使用直线段和椭圆弧分割)。

SmoothCont:   轮廓平滑的参数,可以抑制在折线逼近过程中过短的线段,能更加鲁棒的逼近圆和椭圆。

MaxLineDist1: 第一次用Ramer算法(即用直线段递进逼近轮廓)时的MaxLineDist,在逼近完成之后,再    用圆弧或椭圆弧对相邻分割线段进行拟合,如果拟合圆弧到轮廓的距离小于逼近线段到轮廓的距离,就用圆    弧替代逼近线段,这个过程一致迭代直到所有的线段拟合完毕。

MaxLineDist2: 第二次逼近轮廓时的MaxLineDist,只有当MaxLineDist2

 

这种两步逼近算法效率较高,因为在第一次逼近过程中,递进逼近的直线段较少,因此较大直径的圆弧能够被高效的分割出来。在第二次逼近过程中,能够被小直径圆弧逼近的轮廓被找到,同时大直径圆弧的末端被重新定义。

 

 

segment_contours_xld (Edges, ContoursSplit, ‘lines_circles‘, 5, 4, 3)

Remark:

分割得到的轮廓是直线段、圆(圆弧)或者椭圆弧可以通过分割后轮廓的全局属性‘cont_approx’参数的值来确定(参考get_contour_global_attrib_xld)。

如果‘cont_approx‘=-1,这一部分轮廓最适合被拟合为直线段。

如果‘cont_approx‘=0,这一部分轮廓最适合被拟合为椭圆弧。

如果‘cont_approx‘=1,这一部分轮廓最适合被拟合为圆弧。

 

Count_obj (ContoursSplit,Number)

计算ContoursSplit连通域的个数

 

Select_obj (ContoursSplit,i)

选择ContoursSplit连通域中第i个连通域

 

 

get_contour_global_attrib_xld(Contour : : Name : Attrib)

用于得到一段XLD轮廓的全局特征

 

参数列表:

Contour(in):单个轮廓

Name :   特征名称,如

regr_norm_row\regr_norm_col\regr_mean_dist\regr_dev_dist\cont_approx

Attrib(out):特征值

 

可能前置项:

lines_gauss, lines_facet, edges_sub_pix

 

get_contour_global_attrib_xld (ObjectSelected, ‘cont_approx‘, Attrib)

如果Attrib =-1,这一部分轮廓最适合被拟合为直线段。

如果Attrib =0,这一部分轮廓最适合被拟合为椭圆弧。

如果Attrib =1,这一部分轮廓最适合被拟合为圆弧。

 

If (Attrib > 0) 

fit_circle_contour_xld(Contours : : AlgorithmMaxNumPointsMaxClosureDistClippingEndPointsIterationsClippingFactor : RowColumnRadiusStartPhiEndPhiPointOrder)

对亚像素拟合圆的函数

Contoursin):          输入轮廓

Algorithmin):        拟合圆的算法

MaxNumPointsin):    用于计算的最大轮廓点个数

MaxClosureDistin): 一个轮廓的末尾点最大间距被认为是闭合

ClippingEndPointsin):在逼近过程中被忽略的开始及末尾点个数

Iterationsin):      迭代的最大次数用于鲁棒加权拟合

ClippingFactorin): 消除异常值的裁剪因子

Rowout):            圆心行坐标

Colout):           圆心列坐标

Radiusout):       圆半径

StartPhiout):    开始点的角度(rad

EndPhiout):      末尾点的角度(rad

PointOrderout):  边界点的顺序

 

fit_circle_contour_xld (ObjectSelected, ‘ahuber‘, -1, 2, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)

 

函数作用:

对一些线段的XLD做近似计算直线计算

参数Algorithm的可选项解释如下:

algebraic:这种方法减少了轮廓点与结果圆之间的代数距离

ahuber:类似于algebraic,轮廓点被加权以减小异常值的影响基于方法Huber

atukey:类似于algebraic,轮廓点被加权以减小异常值的影响基于方法Tukey

geometric:该法减少了轮廓点与结果圆之间的几何距离,该法被统计是最优的,但占用很多计算时间。如果轮廓点被噪声干扰严重,可以考虑使用该方法。

geohuber:类似于geometric,轮廓点被加权以减小异常值的影响基于方法Huber

geotukey:类似于geometric,轮廓点被加权以减小异常值的影响基于方法Tukey

 

ClippingFactor控制被弱化的异常值个数,值越小,越多异常值被检测到。

最小拟合一条线的必要轮廓点个数是2,因此,一条轮廓线点个数至少是2+2*ClippingEndPoints

 

可替代项:

fit_ellipse_contour_xld

fit_line_contour_xld

fit_rectangle2_contour_xld

 

可能后置项:

gen_circle_contour_xld

disp_circle,

get_points_

 

edges_sub_pix(Image : Edges : FilterAlphaLowHigh : )

提取图像精确边缘 (精确边缘就是亚像素边缘) (zero—cross)

segment_contours_xld(Contours : ContoursSplit : ModeSmoothContMaxLineDist1MaxLineDist2 : )

将一个XLD轮廓分割为直线段、圆(圆弧)、椭圆弧。

get_contour_global_attrib_xld(Contour : : Name : Attrib)

用于得到一段XLD轮廓的全局特征

fit_circle_contour_xld(Contours : : AlgorithmMaxNumPointsMaxClosureDistClippingEndPointsIterationsClippingFactor : RowColumnRadiusStartPhiEndPhiPointOrder)

对亚像素拟合圆的函数

第一步:提取轮廓

第二部:分割轮廓

第三部:选取轮廓,得到特征

第四部:根据特征,选择函数进行拟合

 

1、亚像素精度阈值分割

threshold_sub_pix(Image : Border : Threshold : )

 

2、亚像素轮廓查找

edges_sub_pix(Image : Edges : Filter, Alpha, Low, High : )

zero_crossing_sub_pix(Image : ZeroCrossings : : )

 

转载自:http://blog.sina.com.cn/s/blog_c01c55220102ypsx.html

 

Halcon 边缘提取

原文:https://www.cnblogs.com/Amiry/p/11916841.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!