Halcon知识:segment_contours_xld算子

边界提取:以前的边缘提取都建立在前景通过thresold将区域提取出,然后从区域提出XLD,但是,如果区域无法提出就不好办了。此例子告诉大家,不必二值化提取,也能取出边缘来,edges_sub_pix 就能做到。

本案例主要给出一种对比度不明显的图中,提取出圆、椭圆、直线的例子。

在用Halcon进行图像处理的过程中,必须对轮廓进行分割,将轮廓分为直线段、圆(或圆弧)、椭圆弧不同的段,轮廓分割最常用的算子是 segment_contours_xld

segment_contours_xld——Segment XLD contours into line segments and circular 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,这一部分轮廓最适合被拟合为圆弧。

Original: https://blog.csdn.net/gongdiwudu/article/details/114093665
Author: 无水先生
Title: Halcon知识:segment_contours_xld算子

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/640632/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球