HALCON常用算子
在 HALCON 中,segment_contours_xld
是一个用于分割轮廓(XLD Contours)的算子,目的是将复杂或长的轮廓线条切分成多个更规则的线段或子段,方便后续几何拟合、分析、测量等操作。
✅ 语法:
segment_contours_xld(Contours, SegmentedContours, Mode, SmoothCont, MaxLineDist1, MaxLineDist2)
📘 参数说明:
参数名 | 类型 | 说明 |
---|---|---|
Contours | 输入 XLD | 要分割的原始轮廓(可以是多个) |
SegmentedContours | 输出 XLD | 分割后得到的子轮廓 |
Mode | 'lines' 、'lines_circles' 等 | 分割类型(线段/线段+圆弧) |
SmoothCont | 布尔/整型 | 是否对输入轮廓平滑(1 = 是,0 = 否) |
MaxLineDist1 | 实数 | 判断拐点(角点)的灵敏度,越小越敏感 |
MaxLineDist2 | 实数 | 用于进一步线段判断 |
🎯 常用 Mode 说明:
'lines'
:将轮廓按角度突变点分成直线段;'lines_circles'
:同时提取线段和弧段(适用于边角 + 圆弧的轮廓);'polygons'
:拟合为折线轮廓(类似轮廓简化);'poly_segments'
:输出拟合段,便于后续计算方向等。
🧪 示例代码:
read_image(Image, 'metal_part.png')
edges_sub_pix(Image, Edges, 'canny', 1, 20, 40)
* 联通边缘
union_adjacent_contours_xld(Edges, Contours, 10, 1, 'attr_keep')* 分段
segment_contours_xld(Contours, Segments, 'lines', 1, 5, 10)* 显示
dev_display(Image)
dev_set_color('green')
dev_display(Segments)
📌 输出:
SegmentedContours
是一组新的 XLD 轮廓(线段或弧段)- 这些段可以直接用于:
- 计算长度、角度
- 做几何拟合(如
fit_line_contour_xld
) - 匹配模板(如 GMCA)
📍调参建议:
MaxLineDist1
: 控制是否分段,太大则不分;太小则分得太碎MaxLineDist2
: 二次精度控制(一般设为略大于MaxLineDist1
)
🔁 常与这些配合:
算子名 | 用途 |
---|---|
edges_sub_pix | 获取亚像素轮廓 |
union_adjacent_contours_xld | 将多条碎线合并 |
fit_line_contour_xld | 对每段拟合直线 |
get_contour_angle_xld | 计算每段轮廓的方向 |
🧠 应用举例:
- 将一条复杂轮廓分成多个直线段用于检测角度;
- 拟合圆弧 + 直线构成的零件边缘;
- 多边形检测、CAD 比对前处理;
- 精密检测中的角点提取和线段建模。
如你有具体目标,比如测量零件边角、提取折线轮廓结构,我可以提供完整流程(带结果显示),需要的话告诉我图像或用途即可。
在 HALCON 中,lines_gauss
是一个用于检测图像中线结构(Line Features)的算子,采用基于高斯导数的方式提取亚像素级线条。它常用于提取细长、对比明显的线,如电路线、划痕、笔迹、管道等。
✅ 语法:
lines_gauss(Image, Lines, Sigma, Low, High, MaxLength, Mode)
📌 参数说明:
参数 | 类型 | 说明 |
---|---|---|
Image | 灰度图像 | 输入图像,需为单通道(灰度) |
Lines | 输出 | 检测到的线轮廓(XLD 格式,亚像素) |
Sigma | 实数 | 高斯平滑参数(建议 0.6 ~ 2.5),越大越平滑 |
Low | 实数 | 低阈值(边缘响应的强度),控制噪声过滤 |
High | 实数 | 高阈值,线响应强度的上限 |
MaxLength | 实数 | 检测到的线段最大长度(像素) |
Mode | 字符串 | 'light' :亮线(背景暗),'dark' :暗线(背景亮) |