1.fit_line_contour_xld
通过轮廓进行直线拟合
fit_line_contour_xld(Contours : : Algorithm, MaxNumPoints, ClippingEndPoints, Iterations, ClippingFactor : RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist) Contours (input_object) :输入的XLD轮廓 Algorithm (input_control):直线拟合算法( ‘drop’, ‘gauss’, ‘huber’, ‘regression’, ‘tukey’) MaxNumPoints (input_control):参与拟合直线的最大轮廓点数(设置-1代表所有点参与计算;最小值要大于等于2,因为至少两点才能确认一条直线) ClippingEndPoints (input_control) :拟合直线时,需要忽略轮廓起始处点个数。(一个XLD轮廓会被线分割成很多个小轮廓) Iterations (input_control) :最大迭代次数。(不适用于’regression’) ClippingFactor (input_control):剔除异常值因子。(算法 ‘huber’ 、‘drop’ 设置1.0,'tukey’设置2.0) RowBegin (output_control) :拟合后的线段起始点行坐标 ColBegin (output_control) :拟合后的线段起始点列坐标 RowEnd (output_control) :拟合后的线段终点点行坐标 ColEnd (output_control) :拟合后的线段终点点列坐标 Nr (output_control) :直线方程法线式x相乘系数 Nc (output_control) :直线方程法线式y相乘系数 Dist (output_control) :坐标系原点到线段的距离
fit_line_contour_xld目的是将一个XLD轮廓拟合成一条线段。几何数学上获取线段的起始点坐标,以及直线法线式方程中的Nr,Nc向量。
法线式方程如下:
这个算子在工业检测中有很大用处,比如:
1、精细寻找产品的边界用于角度计算
2、拟合两条边,然后求交点,做定位用
3、求解参与拟合的点到直线的距离,可以做异常值检测
拟合直线的算法有以下几种:
‘regression’:回归,标准的最小二乘法拟合
‘huber’:加权的最小二乘法拟合,异常值的影响被减小。
‘tukey’:加权的最小二乘法拟合,异常值被忽略,Halcon推荐方法。
‘drop’:加权的最小二乘法拟合,异常值被忽略。
‘gauss’:加权的最小二乘法拟合,异常值去除是根据轮廓点距拟合直线距离的平均值以及标准差方式决定。
2.fit_circle_contour_xld
用于拟合圆的xld轮廓(最少需要3个轮廓点)
fit_circle_contour_xld( Contours : : Algorithm, MaxNumPoints, MaxClosureDist, ClippingEndPoints, Iterations, ClippingFactor : Row, Column, Radius, StartPhi, EndPhi, PointOrder ) Contours(in):输入轮廓 Algorithm(in):拟合圆的算法 MaxNumPoints(in):用于计算的最大轮廓点个数 MaxClosureDist(in):一个轮廓的末尾点最大间距被认为是闭合 ClippingEndPoints(in):在逼近过程中被忽略的开始及末尾点个数 Iterations(in):迭代的最大次数用于鲁棒加权拟合 ClippingFactor(in):消除异常值的裁剪因子 Row(out):圆心行坐标 Col(out):圆心列坐标 Radius(out):圆半径 StartPhi(out):开始点的角度(rad) EndPhi(out):末尾点的角度(rad) PointOrder(out):边界点的顺序
参数Algorithm的可选项解释如下:
algebraic:这种方法减少了轮廓点与结果圆之间的代数距离
ahuber:类似于algebraic,轮廓点被加权以减小异常值的影响基于方法Huber
atukey:类似于algebraic,轮廓点被加权以减小异常值的影响基于方法Tukey
geometric:该法减少了轮廓点与结果圆之间的几何距离,该法被统计是最优的,但占用很多计算时间。如果轮廓点被噪声干扰严重,可以考虑使用该方法。
geohuber:类似于geometric,轮廓点被加权以减小异常值的影响基于方法Huber
geotukey:类似于geometric,轮廓点被加权以减小异常值的影响基于方法Tukey
ClippingFactor控制被弱化的异常值个数,值越小,越多异常值被检测到。最小拟合一条线的必要轮廓点个数是2,因此,一条轮廓线点个数至少是2+2*ClippingEndPoints。
注意:无论是直线拟合还是圆形拟合,操作的对象都是contours,因此需要将拟合的点通过gen_contour_polygon_xld转为contour再进行拟合。