算子 regress_contours_xld

HALCON 算子 regress_contours_xld 详解

功能

regress_contours_xld 用于计算输入 XLD 轮廓的回归线参数,并将参数作为全局属性附加到输出轮廓中。回归线通过最小二乘法拟合所有轮廓点,支持多种异常值处理模式以提高拟合鲁棒性。

参数说明

Contours (输入):输入的 XLD 轮廓。
RegressContours (输出):处理后的轮廓,包含回归线参数属性。
Mode (输入控制):异常值处理模式,可选:
'no':直接使用所有点计算,不处理异常值。
'drop':忽略距离超过平均值的点。
'gauss':根据高斯分布加权距离。
'median':基于中位数标准差加权距离。
Iterations (输入控制):迭代次数,控制异常值处理的重复计算次数。

全局属性

输出轮廓包含以下全局属性(通过 get_contour_global_attrib_xld 获取):
'regr_norm_row', 'regr_norm_col':回归线法向量坐标(原点指向直线)。
'regr_mean_dist':轮廓点到回归线的平均距离。
'regr_dev_dist':距离的标准差。
'regr_dist':回归线到原点的距离。

模式详解

  1. 'no' 模式
    直接使用所有轮廓点计算回归线,适用于无显著异常值的情况。

  2. 'drop' 模式
    剔除距离超过平均值的点,重新拟合。适合明显离群点较少的情况,迭代可逐步优化。

  3. 'gauss' 模式
    假设距离服从高斯分布,加权降低远距离点的影响。适用于高斯噪声环境。

  4. 'median' 模式
    基于中位数计算标准差,对异常值更鲁棒,适合长尾分布或存在多个离群点的情况。

使用建议
预处理:先通过 edges_sub_pixlines_gauss 提取轮廓。
模式选择
• 若轮廓较干净,使用 'no''drop'
• 存在噪声时,优先 'gauss''median'
迭代次数:通常 1-3 次即可,过多可能过拟合。
后处理:结合 get_regress_params_xld 获取参数,用于几何变换或轮廓筛选。

示例流程

edges = edges_sub_pix(Image)  # 提取亚像素边缘
contours = gen_contours_skeleton_xld(edges)  # 生成轮廓
regress_contours = regress_contours_xld(contours, 'gauss', 3)  # 高斯加权,迭代3次
# 获取回归参数
params = get_regress_params_xld(regress_contours)
# 筛选标准差较小的轮廓
valid_contours = [c for c in regress_contours if c.regr_dev_dist < threshold]

注意事项
法向量方向:始终从原点指向直线,需注意坐标系原点位置。
性能:不支持并行处理,处理大量轮廓时建议分批或多线程。
参数调优:通过可视化对比不同模式和迭代次数的结果,选择最优配置。

典型应用场景
• 工业检测:定位物体边缘的主轴方向。
• 机器人导航:提取路径线的方向。
• 三维重建:矫正轮廓的几何变形。

通过合理选择模式和迭代次数,regress_contours_xld 能有效提升轮廓分析的精度,尤其在存在噪声或离群点的复杂场景中表现优异。

扩展:


1. 回归线的定义

回归线是通过最小二乘法拟合轮廓点得到的最优直线,其数学表示为法线形式:
[ a ⋅ row + b ⋅ col + c = 0 ] [ a \cdot \text{row} + b \cdot \text{col} + c = 0 ] [arow+bcol+c=0]
其中:
• (a, b) 是法向量(单位向量),表示直线的方向。
• c 是直线到原点的有符号距离,绝对值即'regr_dist'属性。


2. 法向量的方向

法向量坐标 ('regr_norm_row', 'regr_norm_col') 是从图像原点(0,0)指向直线的方向。
几何意义:法向量垂直于回归线,指向直线所在的一侧。例如:
• 若法向量为 (1, 0),表示直线位于原点下方(Y轴正方向),如水平线 row = d
• 若法向量为 (0, 1),表示直线位于原点右侧(X轴正方向),如垂直线 col = d


3. 原点的位置验证

HALCON坐标系:图像左上角为原点 (0,0),X轴向右(col增大),Y轴向下(row增大)。
示例验证
1. 水平线:轮廓点位于 row=10,col范围[0, 100]
◦ 回归线方程:1*row + 0*col - 10 = 0
◦ 法向量:(1, 0)(单位化后)。
'regr_dist':10(直线到原点的距离)。
2. 垂直线:轮廓点位于 col=20,row范围[0, 50]
◦ 回归线方程:0*row + 1*col - 20 = 0
◦ 法向量:(0, 1)
'regr_dist':20。


4. 关键属性解析

属性名描述示例值(水平线row=10)
'regr_norm_row'法向量的行分量(单位向量,从原点指向直线)1.0
'regr_norm_col'法向量的列分量(单位向量,从原点指向直线)0.0
'regr_dist'直线到原点的欧氏距离(符号由法向量方向决定,通常为正)10.0
'regr_mean_dist'轮廓点到回归线的平均距离(反映拟合精度)0.0(完美拟合)
'regr_dev_dist'距离的标准差(越小表示轮廓点越贴近直线)0.0

5. 应用场景与注意事项

方向校正:通过法向量方向调整物体姿态(如机器人抓取)。
几何变换:结合hom_mat2d进行仿射变换,将轮廓对齐到目标方向。
筛选轮廓:根据'regr_dev_dist'剔除噪声大的轮廓。
注意事项
法向量归一化:确保regr_norm_row² + regr_norm_col² ≈ 1
坐标系一致性:在图像处理中需保持HALCON坐标系约定,避免方向混淆。


6. 总结

原点位置:图像左上角(0,0)
法向量意义:从原点指向回归线的垂直方向,用于描述直线的位置和方向。
数据应用:通过get_regress_params_xld获取参数后,可直接用于几何计算或可视化。

通过理解原点位置及法向量方向,可更精准地利用回归线参数进行后续分析,提升工业检测、机器人引导等任务的准确性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值