卡尺工具:实现halcon中的fit_line_contour_xld

本文介绍了如何在Halcon中使用fit_line_contour_xld函数来实现直线拟合,特别是在卡尺测量应用中的具体步骤。通过创建多个卡尺,选择边缘点,并结合霍夫变换、最小二乘法等方法,有效地剔除异常点干扰,确保直线拟合的准确性。同时,探讨了fit_line_contour_xld的加权最小二乘法及权重函数,并展示了拟合效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        上一篇文章中,我们实现了卡尺的边缘定位,卡尺会根据灰度值变化提取准确的位置。通常卡尺中的边缘点有多个,而实际应用中只需要一个。对应于halcon中measure_pos的Transition、Select参数,我添加了first、first+、first-、last、last+、last-、best这些选项用于选择边缘点(其中first表示第一个,last表示最后一个,+表示从黑到白,-表示从白到黑)。

        有了上面的准备之后,我们可以创建多个卡尺,选择自己想要的边缘点,进而找到圆或者直线。下面主要讲如何找到直线:

        第一步,创建多个卡尺,指定起始点、卡尺长宽、卡尺个数。

        第二步,提取每个卡尺的边缘点,构成点集。

        第三步,对点集进行直线拟合。

        这里重点讲一下直线拟合,常用的方法比较多,例如霍夫变换、最小二乘法、ransac、加权最小二乘法等。halcon中的fit_line_contour_xld拟合效果是比较好的,可以有效剔除异常点的干扰,从参数Algorithm可以看出它使用的是加权最小二乘法,huber、tukey、drop、gauss表示不同的权重函数,权重函数的输入是一个距离(即点到直线的距离),距离越大权重越小,距离越小权重越大。我也使用了此方法同时配合ransac,增加了抽样点个数、迭代次数、内点距离等控制参数,保证均方误差最小或者内点个数最多,下面的图是拟合效果图。

575a0d32f670422986bc6bd1b87ba20b.png

d239d37486e34c1cb318fa20e2e1a9ba.png

f3ae3aba0db646ca82a1842c1f259acf.png

24e77350541b490cb0ed9b8a4fb39f87.png

290a9075ccea4fa6bc9e20fb3605771b.png

862856f5254f405aa918cc2a232d4949.png

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值