算子segment_contours_xld

功能:将 XLD 轮廓分割为线段、圆弧或椭圆弧。


签名

 segment_contours_xld(Contours : ContoursSplit : Mode, SmoothCont, MaxLineDist1, MaxLineDist2)

参数详解

输入参数

  1. Contours (输入对象)

    • 类型:XLD 轮廓数组

    • 描述:待分割的输入轮廓。

  2. Mode (输入控制)

    • 类型:字符串

    • 可选值

      • 'lines':仅分割为线段。

      • 'lines_circles':分割为线段和圆弧。

      • 'lines_ellipses':分割为线段和椭圆弧。

    • 默认值'lines_circles'

    • 作用:选择分割模式。

  3. SmoothCont (输入控制)

    • 类型:整数

    • 默认值:5

    • 建议值:0, 3, 5, 7, 9

    • 限制SmoothCont == 0SmoothCont >= 3 且为奇数。

    • 作用:平滑轮廓的采样点数。

      • 设为 0 表示不进行平滑。

      • 值越大,轮廓越平滑(抑制噪声,但可能丢失细节)。

  4. MaxLineDist1 (输入控制)

    • 类型:实数

    • 默认值:4.0

    • 建议值:1.0, 1.5, 2.0, 2.5, 3.0, 3.5

    • 作用

      • 第一阶段的线段近似最大距离

      • 控制初始多边形近似的精度(值越大,线段越少,但可能忽略细节)。

  5. MaxLineDist2 (输入控制)

    • 类型:实数

    • 默认值:2.0

    • 建议值:1.0, 1.5, 2.0, 2.5, 3.0, 3.5

    • 作用

      • 第二阶段的线段近似最大距离(仅对 'lines_circles''lines_ellipses' 有效)。

      • 用于细化第一阶段未处理的区域(通常设为比 MaxLineDist1 更小的值)。


输出参数

  1. ContoursSplit (输出对象)

    • 类型:XLD 轮廓数组

    • 描述:分割后的轮廓,每个子轮廓的全局属性 'cont_approx' 标识其类型:

      • -1:线段

      • 0:圆弧('lines_circles' 模式)

      • 1:椭圆弧('lines_ellipses' 模式)


算法原理

  1. 预处理

    • SmoothCont > 0,先对输入轮廓进行平滑(类似 smooth_contours_xld),抑制噪声。

    • 使用 Ramer 算法gen_polygons_xld)进行初始多边形近似,最大距离为 MaxLineDist1

  2. 分割逻辑

    • 模式 'lines':直接输出多边形近似结果。

    • 模式 'lines_circles''lines_ellipses'

      1. 第一阶段:用 MaxLineDist1 生成初始线段。

      2. 合并圆弧:若相邻线段可替换为圆弧(误差更小),则合并为圆弧。

      3. 第二阶段:用 MaxLineDist2 对剩余线段重新分割,进一步合并短弧。

      • 优势:两步法比单步法更高效,尤其适合长弧检测。

  3. 输出限制

    • 输出轮廓长度 ≥ 3 像素,且包含 ≥ 6 个连续点。

    • 过短的输入轮廓直接复制到输出,不做处理。


参数调试指南

1. Mode 选择

  • 'lines':适用于简单直线检测(如 PCB 板边缘)。

  • 'lines_circles':适合工业零件中的圆孔、轴承检测。

  • 'lines_ellipses':用于椭圆目标(如倾斜的圆形标记)。

2. SmoothCont

  • 噪声较多时:增大值(如 5 或 7),但需权衡细节丢失。

  • 高精度场景:设为 0 或 3,保留原始轮廓特征。

3. MaxLineDist1 和 MaxLineDist2

  • 调试步骤

    1. 初始设置:MaxLineDist1=4.0, MaxLineDist2=2.0

    2. 若圆弧漏检:减小 MaxLineDist1(如 3.0)。

    3. 若线段过多:增大 MaxLineDist1MaxLineDist2

    4. 平衡速度与精度

      • MaxLineDist1 大 → 计算快,但可能漏细节。

      • MaxLineDist2 小 → 精度高,但计算量增加。

4. 示例调试场景

  • 场景 1:金属零件圆孔检测

     # 参数设置
     Mode = 'lines_circles'
     SmoothCont = 5      # 抑制加工毛刺
     MaxLineDist1 = 3.0  # 初始近似保留大圆弧
     MaxLineDist2 = 1.5  # 细化小圆弧
  • 场景 2:实时机器人抓取

     Mode = 'lines'      # 仅需线段信息
     SmoothCont = 0      # 禁用平滑以降低延迟
     MaxLineDist1 = 5.0  # 快速生成粗略轮廓

示例代码(HDevelop 翻译)

 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)

调试技巧

  1. 可视化验证

    • 使用 dev_display 显示分割后的轮廓,检查线段和圆弧是否符合预期。

    • 对比不同参数下 ContoursSplit 的差异。

  2. 性能监控

    • 在实时系统中,监控算子执行时间,调整 MaxLineDist1SmoothCont 以优化速度。

  3. 鲁棒性测试

    • 在不同光照、噪声水平的图像上测试参数,确保泛化能力。


通过合理调整参数,segment_contours_xld 可广泛应用于工业检测、机器人导航和医学图像分析等领域。

算子 segment_contours_xld的更多相关文章

  1. HALCON中的算子大全(中英对照)

    HALCON中的算子大全(中英对照) Chapter 1 :Classification1.1 Gaussian-Mixture-Models1.add_sample_class_gmm功能:把一个训 ...

  2. HALCON学习之算子大全

    1.1 Gaussian-Mixture-Models 1.add_sample_class_gmm 功能:把一个训练样本添加到一个高斯混合模型的训练数据上. 2.classify_class_gmm ...

  3. halcon 算子功能查找大全中文版(可直接下载)

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11543364.html haicon算子中文查找大全百度云链接 链接:https://pan. ...

  4. (八)map,filter,flatMap算子-Java&Python版Spark

    map,filter,flatMap算子 视频教程: 1.优酷 2.YouTube 1.map map是将源JavaRDD的一个一个元素的传入call方法,并经过算法后一个一个的返回从而生成一个新的J ...

  5. opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较

    opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较 参考: http://wenku.baidu.com/link?url=1aDYAJBCrrK-uk2w3sSNai7h52x_ ...

  6. 特征描述算子-sift

    特征描述算子-sift http://boche.github.io/download/sift/Introduction%20to%20SIFT.pdf

  7. EasyPR--开发详解(3)高斯模糊、灰度化和Sobel算子

    在上篇文章中我们了解了PlateLocate的过程中的所有步骤.在本篇文章中我们对前3个步骤,分别是高斯模糊.灰度化和Sobel算子进行分析. 一.高斯模糊 1.目标 对图像去噪,为边缘检测算法做准备 ...

  8. Spark算子选择策略

    摘要  1.使用reduceByKey/aggregateByKey替代groupByKey 2.使用mapPartitions替代普通map 3.使用foreachPartitions替代forea ...

  9. sobel算子的一些细节

    1. 形式 Gy 上下颠倒的 (*A表示卷积图像,忽略先): 看得出来,sobel算子感觉并不统一,特别是方向,我们知道matlab的图像格式是,x轴从左到右,y轴从上到下,原点在左上角. 所以,第二 ...

  10. halcon算子

    halcon的算子列表   Chapter 1 :Classification 1.1 Gaussian-Mixture-Models 1.add_sample_class_gmm 功能:把一个训练样 ...

随机推荐

  1. 从混沌到秩序:Python的依赖管理工具分析

    Python 的依赖管理工具一直没有标准化,原因主要包括: 历史发展的随意性:Python发展早期对于依赖管理的重视程度不足,缺乏从一开始就进行统一规划和设计的意识 社区的分散性:Python社区庞大 ...

  2. 【Mybatis】学习笔记02:实现简单的查

    Mybatis02:简单的查 如果你没先去学 增删改 ,然后直接看这篇记录,我想会有些困难.因为该文写的很粗劣,只是简单的截图.所以没基础的建议先去看 [Mybatis]学习笔记01:连接数据库,实现 ...

  3. JAVA中的时区设置

    JAVA中的时区设置 第一种方式.通过代码指定.   final TimeZone timeZone = TimeZone.getTimeZone("GTM+8");   Time ...

  4. 龙哥量化:通达信分时均线在5分钟K线图上显示

    代写技术指标.量化策略,微信:Long622889 龙哥QQ:591438821 T1:=DAY<>REF(DAY,1);T2:=BARSLAST(T1)+1;JX:SUM(AMO,T2) ...

  5. Qt编写地图综合应用38-覆盖物矩形

    一.前言 矩形的应用场景和多边形基本一致,也是用来框起一块区域,然后根据坐标点集合,找到该区域内的标注点集合,比如指定某个县市区域多边形,然后找到这个县市对应的所有站点,拿到这些站点在做其他处理. 二 ...

  6. Qt音视频开发22-通用GPU显示

    一.前言 采用GPU来绘制实时视频一直以来都是个难点,如果是安防行业的做视频监控开发这块的人员,这个坎必须迈过去,本人一直从事的是安防行业的电子围栏这个相当小众的细分市场的开发,视频监控这块仅仅是周边 ...

  7. OpenCV4.1.0与CUDAcuda_10.1.105联合进行图像特征点提取和特征匹配时,运行程序时错误提示:无法定位程序输入点?createBFMatchercv@DescriptorMatcher@cuda@cv......于动态链接库......

    问题描述: OpenCV4.1.0与CUDAcuda_10.1.105联合进行图像特征点提取和特征匹配时,运行程序时错误提示:无法定位程序输入点?createBFMatchercv@Descripto ...

  8. IM开发干货分享:浅谈IM系统中离线消息、历史消息的最佳实践

    本文由融云技术团队原创分享,原题"IM 消息数据存储结构设计",内容有修订. 1.引言 在如今的移动互联网时代,IM类产品已是我们生活中不可或缺的组成部分.像微信.钉钉.QQ等是典 ...

  9. WPF 动态加载嵌入主程序的DLL

    WPF 动态加载嵌入主程序的DLL,好处是节省文件数量,坏处是启动影响加载速度. 首先将DLL添加进项目,选择添加现有项,设置生成操作为"嵌入资源". 代码: public App ...

  10. 在OERV也可以玩MC(下)

      话接上回,上期讲述了在OERV安装HMCL的历程,这期讲讲HMCL的打包.   Show openEuler:24.09 / HMCL - 开源软件构建与测试.在这个网站里,可以看到有好几个文件, ...