打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Halcon中轮廓分割segment
    在用Halcon进行图像处理的过程中,经常需要对提取出的轮廓进行分割,将轮廓分为直线段、圆(或圆弧)、椭圆弧不同的段,轮廓分割最常用的算子是segment_contours_xld

segment_contours_xld——Segment XLD contours into line segments andcircular or elliptic arcs(将一个XLD轮廓分割为直线段、圆(圆弧)、椭圆弧。)
signature(语法):
参数说明:
Contours 需要进行分割的轮廓。
ContoursSplit 分割后的轮廓tuple。
Mode 分割轮廓的方式,可以选择'lines'(使用直线段分割), 'lines_circles'(使用直线段和圆(弧)分割),'lines_ellipses'(使用直线段和椭圆弧分割)。
SmoothCont 轮廓平滑的参数,可以抑制在折线逼近过程中过短的线段,能更加鲁棒的逼近圆和椭圆。
MaxLineDist1第一次用Ramer算法(即用直线段递进逼近轮廓)时的MaxLineDist,在逼近完成之后,再用圆弧或椭圆弧对相邻分割线段进行拟合,如果拟合圆弧到轮廓的距离小于逼近线段到轮廓的距离,就用圆弧替代逼近线段,这个过程一致迭代直到所有的线段拟合完毕。
MaxLineDist2 第二次逼近轮廓时的MaxLineDist,只有当MaxLineDist2
这种两步逼近算法效率较高,因为在第一次逼近过程中,递进逼近的直线段较少,因此较大直径的圆弧能够被高效的分割出来。在第二次逼近过程中,能够被小直径圆弧逼近的轮廓被找到,同时大直径圆弧的末端被重新定义。

Remark:
分割得到的轮廓是直线段、圆(圆弧)或者椭圆弧可以通过分割后轮廓的全局属性'cont_approx’参数的值来确定(参考get_contour_global_attrib_xld)。
如果'cont_approx'=-1,这一部分轮廓最适合被拟合为直线段。
如果'cont_approx'=0,这一部分轮廓最适合被拟合为椭圆弧。
如果'cont_approx'=1,这一部分轮廓最适合被拟合为圆弧。

轮廓分割的例子:

read_image (Image, 'pumpe')

edges_sub_pix (Image, Edges, 'canny', 1.5, 15,40)

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

count_obj (ContoursSplit, Number)

gen_empty_obj (Lines)

gen_empty_obj (Circles)

for I :=1 to Number by 1

  select_obj (ContoursSplit,Contour, I)

  get_contour_global_attrib_xld(Contour, 'cont_approx', Type)

  if (Type = -1)

     concat_obj (Lines, Contour, Lines)

  else

     concat_obj (Circles, Contour,Circles)

  endif

endfor

fit_line_contour_xld (Lines, 'tukey', -1, 0, 5, 2,RowBegin, ColBegin, \

                   RowEnd,ColEnd, Nr, Nc, Dist)

fit_circle_contour_xld (Circles, 'atukey', -1, 2, 0,3, 2, Row, Column, \

                    Radius, StartPhi, EndPhi, PointOrder)

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
《HALCON机器视觉与算法原理编程实践》第10章 边缘检测
Halcon在机器视觉中的典型应用
二十六.Contour Processing(之一)
HALCON算子函数(四)File
OpenCV 矩形轮廓检测
OpenCV
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服