机器视觉测量,halcon测量讲解,卡尺找线,卡尺找圆

测量是机器视觉应用场景之一,今天我来介绍一下在halcon中测量项目的一些方法。

在halcon中本身的测量demo比较多,在实际项目使用中,最为广泛的方法还是使用卡尺来解决测量任务,整体的思想就是先找到边界点,然后判断边界点是否符合要求,最后通过拟合出线或者圆来进行测量任务。当然也可以通过边缘查找后拟合。

理解halcon测量原理

在halcon中,来确定边缘的方法为在一个ROI宽度上,计算每个宽度上的像素平均值,在ROI的整个长度上计算所有的均值,得到了一系列的平均灰度值,那么在这一系列的灰度值组成了轮廓线Profile Line

投影轮廓线计算均值

如果在这个宽度上计算灰度值的时候,投影线不平行,那么就会使用插值计算平均灰度值,nearest_neighbor 最邻近插值,biliner双线性插值,bicubic插值。

宽度和滤波的影响

同时,ROI的宽度越宽,计算的平均值越逼真,得到的值也是越准确,同时,同样的ROI宽度,如果使用滤波,那么效果也最好,测量对象中使用的滤波器是高斯滤波器。

测量矩形ROI

测量的ROI,矩形中心R,C坐标,矩形宽、高,phi

测量过程

建立测量对象

gen_measure_rectangle2( : : Row, Column, Phi, Length1, Length2, Width, Height, Interpolation :MeasureHandle)
gen_measure_arc( : : CenterRow, CenterCol, Radius, AngleStart, AngleExtent, AnnulusRadius, Width,Height, Interpolation : MeasureHandle)

Row: 矩形ROI的中心R坐标

Column:矩形ROI的中心C坐标

Length1: 矩形ROI的半长

Length2:矩形ROI的半宽

Width:图像的宽度

Height:退昂的高度

Interolation:插值

MeasureHandle:输出的测量句柄对象

gen_measure_arc的位圆弧与gen_measure_rectangle2类似

测量

measure_pos(Image : : MeasureHandle, Sigma, Threshold, Transition, Select : RowEdge, ColumnEdge,Amplitude, Distance)
measure_pairs(Image : : MeasureHandle, Sigma, Threshold, Transition, Select : RowEdgeFirst,ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance,InterDistance)

Image:输入图像

MesureHandle:输入句柄

Sigma:滤波参数

ThresHold:边缘幅度

Transition:边缘极性,由白到黑、由黑到白、两者

Select:点的选择,第一点、最后一点,所有

RowEdge,ColumnEdge,Amplitude,Dinstance:输出点的信息

还有一种高级测量是fuzzy_measure的方法, 我个人在实际应用中没有用到这种方法,不过也研究过,在后期会专门说fuzzy_meausre.

这一步为止,我们还是单独的得到一个点,我们还不能真实的表达一条边界呢,我们最好的方式是通过找到的一系列点进行拟合直线或者圆,以伪代码表示

最后通过fit_circle_contour_xld和fit_line_contour_xld拟合圆和直线。

计算

distance_pp 计算两个点的距离

distance_pl计算一个点到线的距离

mean_tuple计算平均值,这在使用distance_pl的时候回用到

卡尺找圆,找线

虽然这里只有最简单的2个算子,但是组合起来会有强大的效果,可以满足98%以上的项目需求,halcon的给的测量方法有很多,我都看过,但是实际项目中我还是没有用,对于初学的同学来说, 也没必要都知道那么多,否则打消你的积极性。

感觉来关注我公众号 VisionManMaster

后期不定期更新各种知识,欢迎过来关注我