Halcon 实例分析 circles

代码如下(也可打开HDevelop中浏览示例程序中的circles.hdev):

只列出了部分重要代码,算子的深度翻译和解析可以参考我的专栏内的halcon算子,有详细讲解

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

由于图片基本没有什么干扰,只是黑白,属于很理想的图片,所有可以直接快速阈值就可以了,不需要太多的预处理,使用fast_threshold直接选出0-120灰度值的部分,7这个参数在我的halcon算子中有详细说明,可以理解为就是一个加速算子,使用的一般范围是2 ≤ MinSize ≤ 200,在大部分工控机上使用,只要不是存在大量的循环,时间上基本忽略,所以在这里设置7和设置100是一样的;

    

boundary (Region, RegionBorder, 'inner')
快速阈值操作后,可以得出上图红色部分,因为我们最终的目标是要得到中间的那几段圆弧,进而你合成圆;所以下一步肯定是提取边缘,使用boundary操作得到边界,但是从boundary的定义我们可以得知,boundary只是把一个区域缩小到它的边界,放大图片之后我们可以看出,boundary只是像素级的,为了得到更高的精度,需要提取xld轮廓;

 

clip_region_rel (RegionBorder, RegionClipped, 5, 5, 5, 5)

从上图中可以看到,在使用boundary后,得到了很多干扰边界,首先需要去除干扰边界,只留下中间的边界,也就是去除四边,clip_region_rel就是去除边界的功能,后面的四个参数控制四条边多向内裁剪5个像素(详细算子解释可以参考我的专栏内的halcon算子),最终得出如下图所示的边界:

 

dilation_circle (RegionClipped, RegionDilation, 2.5)

膨胀的目的是为了提取XLD,XLD必须在有灰度值落差的地方提取,一个像素没办法做到,所以需要先膨胀区域,再用膨胀完的区域剪切原图,得到原图的边界,原图边界有灰度落差,可以提取XLD轮廓;

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

利用edges_sub_pix算子提取XLD轮廓,边缘幅度比高阈值大的那些点立即作为安全边缘点被接受,也就是大于60的,边缘幅度比低阈值小的那些点被立即剔除,也就是低于20的;边缘幅度在高阈值和低阈值之间的那些点按如下原则处理:只有在这些点能按某一路径和安全边缘点相连时,他们才作为边缘点被接受。组成这一路径的所有点的边缘幅度都比低阈值要大。我们也能把这个过程理解为,首先边缘幅度大于高阈值的所有边缘点,然后在边缘幅度大于低阈值的情况下尽可能延长边缘。(详细算子解释可以参考我的专栏内的halcon算子

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

因为得到的XLD轮廓,真正能拟合圆的只有圆弧段,直线段是不能拟合的,至少三点才能拟合成一个圆,所以,使用segment_contours_xld可以把线段切分成折线段和圆弧段,参数'lines_circles',定义了把提取的轮廓分成圆弧和折线,(后面的543可以参考我的专栏内的halcon算子

get_contour_global_attrib_xld (ObjectSelected, 'cont_approx', Attrib)

   通过上面的分割,我们只要在线段和圆弧中选择出圆弧就可以,通过XLD轮廓的属性值可以判断是否为轮廓

    if (Attrib > 0)

判断是圆弧

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

拟合圆(详细算子解释可以参考我的专栏内的halcon算子

        gen_circle_contour_xld (ContCircle, Row, Column, Radius, 0, rad(360), 'positive', 1.0)

通过拟合圆算子得出圆弧的行列坐标,半径角度等信息,再使用gen生成输出圆弧即可(详细算子解释可以参考我的专栏内的halcon算子

   

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无锡伶俐科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值