算子 segment_contours_xld
算子segment_contours_xld
功能:将 XLD 轮廓分割为线段、圆弧或椭圆弧。
签名
segment_contours_xld(Contours : ContoursSplit : Mode, SmoothCont, MaxLineDist1, MaxLineDist2)
参数详解
输入参数
Contours (输入对象)
类型:XLD 轮廓数组
描述:待分割的输入轮廓。
Mode (输入控制)
类型:字符串
可选值:
'lines':仅分割为线段。'lines_circles':分割为线段和圆弧。'lines_ellipses':分割为线段和椭圆弧。
默认值:
'lines_circles'作用:选择分割模式。
SmoothCont (输入控制)
类型:整数
默认值:5
建议值:0, 3, 5, 7, 9
限制:
SmoothCont == 0或SmoothCont >= 3且为奇数。作用:平滑轮廓的采样点数。
设为
0表示不进行平滑。值越大,轮廓越平滑(抑制噪声,但可能丢失细节)。
MaxLineDist1 (输入控制)
类型:实数
默认值:4.0
建议值:1.0, 1.5, 2.0, 2.5, 3.0, 3.5
作用:
第一阶段的线段近似最大距离。
控制初始多边形近似的精度(值越大,线段越少,但可能忽略细节)。
MaxLineDist2 (输入控制)
类型:实数
默认值:2.0
建议值:1.0, 1.5, 2.0, 2.5, 3.0, 3.5
作用:
第二阶段的线段近似最大距离(仅对
'lines_circles'和'lines_ellipses'有效)。用于细化第一阶段未处理的区域(通常设为比
MaxLineDist1更小的值)。
输出参数
ContoursSplit (输出对象)
类型:XLD 轮廓数组
描述:分割后的轮廓,每个子轮廓的全局属性
'cont_approx'标识其类型:-1:线段0:圆弧('lines_circles'模式)1:椭圆弧('lines_ellipses'模式)
算法原理
预处理:
若
SmoothCont > 0,先对输入轮廓进行平滑(类似smooth_contours_xld),抑制噪声。使用 Ramer 算法(
gen_polygons_xld)进行初始多边形近似,最大距离为MaxLineDist1。
分割逻辑:
模式
'lines':直接输出多边形近似结果。模式
'lines_circles'或'lines_ellipses':第一阶段:用
MaxLineDist1生成初始线段。合并圆弧:若相邻线段可替换为圆弧(误差更小),则合并为圆弧。
第二阶段:用
MaxLineDist2对剩余线段重新分割,进一步合并短弧。
优势:两步法比单步法更高效,尤其适合长弧检测。
输出限制:
输出轮廓长度 ≥ 3 像素,且包含 ≥ 6 个连续点。
过短的输入轮廓直接复制到输出,不做处理。
参数调试指南
1. Mode 选择
'lines':适用于简单直线检测(如 PCB 板边缘)。'lines_circles':适合工业零件中的圆孔、轴承检测。'lines_ellipses':用于椭圆目标(如倾斜的圆形标记)。
2. SmoothCont
噪声较多时:增大值(如 5 或 7),但需权衡细节丢失。
高精度场景:设为 0 或 3,保留原始轮廓特征。
3. MaxLineDist1 和 MaxLineDist2
调试步骤:
初始设置:
MaxLineDist1=4.0,MaxLineDist2=2.0。若圆弧漏检:减小
MaxLineDist1(如 3.0)。若线段过多:增大
MaxLineDist1或MaxLineDist2。平衡速度与精度:
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)
调试技巧
可视化验证:
使用
dev_display显示分割后的轮廓,检查线段和圆弧是否符合预期。对比不同参数下
ContoursSplit的差异。
性能监控:
在实时系统中,监控算子执行时间,调整
MaxLineDist1和SmoothCont以优化速度。
鲁棒性测试:
在不同光照、噪声水平的图像上测试参数,确保泛化能力。
通过合理调整参数,segment_contours_xld 可广泛应用于工业检测、机器人导航和医学图像分析等领域。
算子 segment_contours_xld的更多相关文章
- HALCON中的算子大全(中英对照)
HALCON中的算子大全(中英对照) Chapter 1 :Classification1.1 Gaussian-Mixture-Models1.add_sample_class_gmm功能:把一个训 ...
- HALCON学习之算子大全
1.1 Gaussian-Mixture-Models 1.add_sample_class_gmm 功能:把一个训练样本添加到一个高斯混合模型的训练数据上. 2.classify_class_gmm ...
- halcon 算子功能查找大全中文版(可直接下载)
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11543364.html haicon算子中文查找大全百度云链接 链接:https://pan. ...
- (八)map,filter,flatMap算子-Java&Python版Spark
map,filter,flatMap算子 视频教程: 1.优酷 2.YouTube 1.map map是将源JavaRDD的一个一个元素的传入call方法,并经过算法后一个一个的返回从而生成一个新的J ...
- opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较
opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较 参考: http://wenku.baidu.com/link?url=1aDYAJBCrrK-uk2w3sSNai7h52x_ ...
- 特征描述算子-sift
特征描述算子-sift http://boche.github.io/download/sift/Introduction%20to%20SIFT.pdf
- EasyPR--开发详解(3)高斯模糊、灰度化和Sobel算子
在上篇文章中我们了解了PlateLocate的过程中的所有步骤.在本篇文章中我们对前3个步骤,分别是高斯模糊.灰度化和Sobel算子进行分析. 一.高斯模糊 1.目标 对图像去噪,为边缘检测算法做准备 ...
- Spark算子选择策略
摘要 1.使用reduceByKey/aggregateByKey替代groupByKey 2.使用mapPartitions替代普通map 3.使用foreachPartitions替代forea ...
- sobel算子的一些细节
1. 形式 Gy 上下颠倒的 (*A表示卷积图像,忽略先): 看得出来,sobel算子感觉并不统一,特别是方向,我们知道matlab的图像格式是,x轴从左到右,y轴从上到下,原点在左上角. 所以,第二 ...
- halcon算子
halcon的算子列表 Chapter 1 :Classification 1.1 Gaussian-Mixture-Models 1.add_sample_class_gmm 功能:把一个训练样 ...
随机推荐
- 3.QMainWindow
QMainWindow介绍 QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar),多个工具栏(tool bars),多个铆接部件(dock widgets),一个状 ...
- 在 Ubuntu GUI 中以 root 身份登录
参考:https://zhuanlan.zhihu.com/p/610049537?utm_id=0 有一些桌面用户想以 root 身份登录.这不是什么明智之举,但肯定是可以做到的. 默认情况下,Ub ...
- 【Java】SpringBoot邮件发送实现
Springboot3 邮件发送 哔哩哔哩 萌狼蓝天 微信公众号 萌狼蓝天 依赖 <dependency> <groupId>org.springframework.boot& ...
- java-信息安全(二十)国密算法 SM1,SM2,SM3,SM4
一.概述 国密即国家密码局认定的国产密码算法.主要有SM1,SM2,SM3,SM4.密钥长度和分组长度均为128位.目前主要使用公开的SM2.SM3.SM4三类算法,分别是非对称算法.哈希算法和对称算 ...
- Qt编写安防视频监控系统25-离线地图
一.前言 离线地图这个功能是近期才完成的,老早以前就很多人问有没有离线地图的功能,之前也大致了解过如何做离线地图,其实最核心的不是代码,而是如何搞到免费的离线地图文件,离线地图下载器网上大部分都是收费 ...
- Spring Security默认登录页面代码位于哪里?
问:Spring Security默认登录页面代码位于哪里? 答:它是从此类生成的org.springframework.security.web.authentication.ui.DefaultL ...
- HUAWEI MindStudio安装配置
HUAWEI MindStudio安装配置 官网: 链接 安装流程 获取软件包 软件包 说明 获取链接 MindStudio_{version}_linux.tar.gz MindStudio软件包, ...
- Appium_测试步骤读取自外部文件:定制执行引擎
testcase.yaml: - id: home_search - id: search_input_text input: alibaba - id: name - id: current_pri ...
- c# 无法捕获 System.NullReferenceException?
..在VS debug 模式下会"无法捕获" System.NullReferenceException......但是在release 或者外部运行是能捕获的. test cod ...
- ClickHouse-3引擎
引擎 数据库引擎 index 表引擎 数据库引擎 数据库引擎允许您处理数据表. 默认情况下,ClickHouse使用Atomic数据库引擎.它提供了可配置的table engines和SQL dial ...