HALCON XLD 轮廓筛选分段 , 局部直线拟合
一、整体流程
1. 图像亚像素边缘提取 → 生成原始 XLD 边缘轮廓
2. 按长度筛选轮廓 → 剔除短小杂线、噪声毛刺
3. 轮廓几何分段 → 将连续轮廓切分为直线 / 圆弧小段
4. 形状筛选 → 仅保留直线段轮廓
5. 直线局部拟合 → 单段轮廓精准拟合直线
6. 直线求交 → 获取两条拟合直线交点坐标
二、核心算子
1. edges_sub_pix 亚像素边缘提取
edges_sub_pix (Image, Edges, Filter, Alpha, Low, High)
- 作用:从输入的灰度图像中提取亚像素级别的高精度边缘,相比普通像素级边缘提取,能精准定位边缘的实际位置(精度可达像素的十分之一甚至百分之一),最终生成包含所有边缘信息的原始 XLD 轮廓集合,是后续轮廓处理的基础。
- 输入参数:
- Image:输入的待提取边缘的灰度图像,是算子处理的原始图像数据;
- Filter:边缘提取使用的滤波算法类型,决定边缘检测的核心逻辑;
- Alpha:滤波算法的平滑系数,控制边缘检测时的图像平滑程度;
- Low:边缘检测的低阈值,用于筛选边缘梯度值的下限;
- High:边缘检测的高阈值,用于筛选边缘梯度值的上限。
- 输出参数:
- Edges:输出的原始杂乱边缘 XLD 轮廓集合,包含图像中所有符合阈值条件的亚像素边缘。
- 常用参数:Filter='canny',选用 canny 滤波是因为它能有效抑制图像噪声,同时精准定位边缘位置,是工业场景中边缘提取的首选算法,兼顾抗噪性和边缘定位精度;Alpha=1,该值设置为 1 时能在平滑图像和保留边缘细节间取得平衡,避免过度平滑导致边缘丢失,也不会因平滑不足保留过多噪声;Low=20,设置 20 作为低阈值,能过滤掉梯度值过小的微弱噪声边缘;High=40,设置 40 作为高阈值,确保只有梯度值足够大的真实边缘被提取出来。2. select_contours_xld 按长度剔除杂线
select_contours_xld (Contours, SelectedContours, Feature, Min, Max, Order1, Order2)
- 输入参数:
- Contours:输入的待筛选的 XLD 轮廓集合,是前期边缘提取得到的原始轮廓数据;
- Feature:筛选依据的轮廓特征类型,比如 'length' 代表按长度筛选;
- Min:筛选特征的最小值阈值,比如按长度筛选时就是轮廓的最小长度;
- Max:筛选特征的最大值阈值,比如按长度筛选时就是轮廓的最大长度;
- Order1:辅助排序参数,一般默认 0 即可,无实际筛选作用;
- Order2:辅助排序参数,一般默认 0 即可,无实际筛选作用。
- 输出参数:
- SelectedContours:输出的筛选后符合条件的 XLD 轮廓集合,仅保留长度在 Min 到 Max 之间的轮廓。
- 常用参数:Feature='length',选用 length 作为筛选特征,是因为短杂线、毛刺的核心特征就是轮廓长度短,通过长度阈值能快速区分有效轮廓和干扰轮廓;Min 可根据实际场景设置,比如设为 50,代表剔除长度小于 50 像素的轮廓,Max 设为 1000,代表保留长度不超过 1000 像素的轮廓,这样能精准过滤掉微小噪声,同时避免保留过长的无关轮廓。- 作用:根据轮廓的指定特征对输入的 XLD 轮廓集合进行筛选,最常用的是按长度过滤,能快速删除图像中因噪声、工件毛刺等产生的短碎线条,只保留长度符合要求的有效长轮廓,减少后续处理的干扰,提升轮廓分析的准确性。
- Filter 参数选择(现场最实用)
-
canny:高斯模糊 + 双阈值,抗噪强、边缘干净,适用于边缘清晰、亮度对比明显的图像。
deriche1(deriche2边缘更模糊的弱边缘):递归滤波,灵敏度高、保留弱边缘,适用于边缘淡、暗、对比度低的图像。
``- 适用:快速去除画面干扰线、工件边缘毛刺
3. segment_contours_xld 轮廓自动分段
- 作用:将输入的长连续 XLD 轮廓按照指定模式自动拆分成多个小段轮廓,核心是区分直线段和圆弧段,实现轮廓的局部拆分,避免整段长轮廓因局部弯曲、拐点导致后续拟合偏差,让每一段轮廓都能精准贴合单一的几何形状(直线或圆弧)。 - 常用参数:Mode='lines',选用 'lines' 模式是因为工业场景中大多需要提取直线轮廓(如工件的直边、设备的边框等),该模式能只拆分出直线类的小段轮廓,过滤掉圆弧部分,贴合实际检测需求;Smooth 设为 5,能适度平滑轮廓的微小波动,避免因轮廓局部抖动导致错误分段;MaxDist 设为 1.5,控制拆分后的直线段与原轮廓的偏差不超过 1.5 像素,保证分段后的轮廓既贴合原轮廓,又能精准体现直线特征。 - 核心用途:实现局部区域单独拟合,避免整段轮廓拟合偏差4. select_shape_xld 筛选纯直线轮廓
- 作用:对分段后的 XLD 轮廓小段集合进行形状特征筛选,过滤掉圆弧、拐点等非直线轮廓,只保留符合直线特征的标准直线 XLD 轮廓,为后续直线拟合提供纯净的轮廓数据。 - 常用参数:Feature='cont_approx',选用 'cont_approx' 特征是因为该特征能量化轮廓与理想直线的贴合程度,值越小代表轮廓越接近直线;Min 设为 0,Max 设为 0.5,代表只保留直线度在 0~0.5 之间的轮廓,这个范围能有效区分直线和圆弧 / 拐点,保证筛选后都是纯直线轮廓。5. fit_line_contour_xld XLD 轮廓拟合直线
- 作用:对单段纯直线 XLD 轮廓进行局部精准直线拟合,通过指定的算法计算出最贴合该轮廓的直线参数,输出直线的首尾端点坐标,为后续计算直线交点、测量直线尺寸等操作提供精准的直线数据。 - 常用参数:Algorithm='tukey',选用 tukey 算法是因为它具有抗噪性,能忽略轮廓中少量异常点(如噪声点、轮廓毛刺)的影响,拟合出更贴合真实直线的结果,特别适配工业工件边缘存在少量干扰的场景;MaxNumPoints=-1,使用轮廓所有点参与拟合,能最大程度保证拟合的准确性;Iterations=5,通过 5 次迭代计算,能逐步优化拟合参数,提升直线拟合的精准度。 - 输出:直线起点、终点行列坐标,用于后续求交点6. intersection_lines 求取直线交点
正常相交,0 为平行无交点7. 无 XLD 备选算子(纯点集拟合)
- 作用:传入两条直线的首尾端点坐标,通过几何计算得出两条直线在像素坐标系中的交点坐标,同时判断两条直线是否相交,是工业场景中定位交点、测量夹角、标定位置的核心算子。
-
fit_line (Rows, Cols, Algorithm, MaxNumPoints, ClippingEndPoints, Iterations, ClipLength, Row1, Col1, Row2, Col2)
- 输入参数:
- Rows:输入的离散点集的行坐标数组,比如 [10,20,30] 代表 3 个点的行坐标;
- Cols:输入的离散点集的列坐标数组,比如 [15,25,35] 代表 3 个点的列坐标;
- Algorithm:拟合算法类型,常用 'tukey' 或 'least_squares';
- MaxNumPoints:参与拟合的最大点数,-1 代表使用所有点;
- ClippingEndPoints:端点裁剪比例,0 代表不裁剪;
- Iterations:迭代次数,5 代表迭代 5 次优化结果;
- ClipLength:裁剪长度阈值,0 代表不裁剪。
- 输出参数:
- Row1:拟合直线起点的行坐标;
- Col1:拟合直线起点的列坐标;
- Row2:拟合直线终点的行坐标;
- Col2:拟合直线终点的列坐标。
- 作用:针对没有图像边缘、只有自定义离散坐标点的场景,直接对输入的行、列坐标点集进行直线拟合,计算出最贴合这些点集的直线,输出直线的首尾端点坐标,无需生成 XLD 轮廓,简化拟合流程。
-
- 常用参数:Algorithm='least_squares',选用最小二乘法是因为离散点集无过多噪声时,该算法计算速度快、拟合结果稳定,能精准贴合点集的整体趋势;MaxNumPoints=-1,使用所有离散点参与拟合,保证拟合结果的全面性。
- 适用场景:无图像边缘,仅自定义离散坐标点拟合直线
- 优势:无需生成 XLD,代码简洁,标定点位拟合首选三、标准完整执行流程
1. 读取目标图像,预处理降噪(可选)
mean_image (mA2, ImageMean, 9, 9)
scale_image (mA2, ImageScaled, 0.01, 0)
`2. 调用
edges_sub_pix提取全图亚像素边缘 XLD3. 调用
select_contours_xld过滤短杂线,保留有效长轮廓4. 调用
segment_contours_xld对长轮廓进行直线分段5. 调用
select_shape_xld筛选出所有纯直线段轮廓6. 遍历目标直线段,使用
fit_line_contour_xld局部拟合直线7. 提取两组拟合直线端点,使用
intersection_lines计算交点8. 输出交点像素坐标,完成定位 / 测量 / 标定辅助取点
四、场景选用原则
1. 图像处理提取工件边缘线条:优先XLD 整套流程,抗干扰强、可分段局部拟合
2. 手动标定点位、离散采样坐标:优先
fit_line`无 XLD 拟合,简洁高效3. 存在大量干扰线条、工件多折边:必须使用剔杂线 + 分段流程,保证拟合精度
评论 (0)