工控编程吧
标题:
halcon fit_line_contour_xld函数介绍
[打印本页]
作者:
qq263946146
时间:
2019-5-24 00:08
标题:
halcon fit_line_contour_xld函数介绍
fit_line_contour_xld(Contours : : Algorithm, MaxNumPoints, ClippingEndPoints, Iterations, ClippingFactor : RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)
fit_line_contour_xld通过线段逼近XLD轮廓。它不执行输入轮廓的分割。
因此,我们必须确保每个轮廓对应一个且仅对应一个线段。
运算符返回每个轮廓的起始点(RowBegin, ColBegin),
终点(RowEnd, ColEnd),
直线的法向量(Nr, Nc)及其距原点的距离所给出的轮廓的回归线。
直线方程由r*nr+c*nc-dist=0;
直线拟合用到的算法可由参数 Algorithm:指定
regression
标准最小二乘直线拟合
huber
加权“最小二乘”直线拟合,采用Huber方法降低异常值的影响(见下)。
tukey
加权“最小二乘”线拟合,根据Tukey方法忽略异常值(见下)。
drop'
“最小二乘”线拟合,其中的异常值被忽略。
其中,所有距轮廓线较远的等高线点,
均忽略其到回归线的平均距离乘上ClippingFactor(见下),
计算无畸变回归线。
gauss
加权“最小二乘”直线拟合,
根据所有等高线点到近似线距离的均值和标准差,
减小离群点的影响。
对于“huber”、“tukey”和“drop”,
使用稳健的误差统计量来估计与轮廓点之间的距离的标准差,
而没有与近似线的异常值。
参数ClippingFactor(标准偏差的比例因子)控制异常值的数量:
为ClippingFactor选择的值越小,
检测到的异常值就越多。
重复检测异常值。
参数 Iterations 指定迭代的数量。
在“回归”模式中,这个值被忽略。
注意,
在Tukey (' Tukey ')的方法中,
在进行近似之前会去除离群值,并对所有其他点进行加权,
而在Huber (' Huber ')的方法中,离群值的影响仍然很小。
特别是对于离群点,优化受到线性影响,对于距离较小的点,优化受到二次影响。
在实践中,推荐了Tukey的方法。
为了减少计算量,线的拟合可以限制在轮廓点的子集中:
如果MaxNumPoints分配的值不是-1,
那么只使用MaxNumPoints(均匀分布在轮廓上)。
线段的起点和终点是通过将相应轮廓的第一点和最后一点投影到近似线来确定的。
由于预处理中的伪影,
轮廓的起点和终点可能会出现错误。
因此,可以从线拟合中排除轮廓的起点和终点处的 ClippingEndPoints。
然而,它们仍然被用来确定线段的起点和终点。
拟合直线所需的轮廓点的最小必要数目是两个。
因此,要求轮廓点的个数至少为2+2*
ClippingEndPoints
参数
Contours要被拟合的轮廓,
Algorithm拟合的算法名,有 'drop', 'gauss', 'huber', 'regression', 'tukey'
MaxNumPoints
用于计算的最大轮廓点数量(-1表示所有点)。
ClippingEndPoints
拟合时忽略轮廓开始点和结束点的个数。
Iterations
最大迭代次数(未用于“回归”)
ClippingFactor
裁剪因子用于消除异常值(典型的:1.0表示“huber”和“drop”,2.0表示“tukey”)。
输出结果
RowBegin,ColBegin,RowEnd,ColEnd拟合结果线段两端点坐标
Nr,Nc
线参数:法向量的行列坐标
Dist
直线参数:直线到原点的距离
例程
read_image (Image, 'mreut')
edges_sub_pix (Image, Edges, 'lanser2', 0.5, 20, 40)
gen_polygons_xld (Edges, Polygons, 'ramer', 2)
split_contours_xld (Polygons, Contours, 'polygon', 1, 5)
fit_line_contour_xld (Contours, 'regression', -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)
[halcon]1[/halcon]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4