测试图:

测试代码:
read_image (Image, 'C:/Users/斌/Desktop/test.png')
binary_threshold (Image, Region, 'max_separability', 'dark', UsedThreshold)
*转骨架
skeleton (Region, Skeleton)
*骨架转xld
gen_contours_skeleton_xld (Skeleton, Contours, 1, 'filter')
*拟合近似轮廓线线段
fit_line_contour_xld (Contours, 'regression', -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)
*生成这条回归线
gen_contour_polygon_xld (Contour, [RowBegin,RowEnd], [ColBegin,ColEnd])
dev_clear_window ()
dev_set_line_width (3)
dev_display (Image)
dev_display (Contour)
效果:

关于fit_line_contour_xld 算子描述
fit_line_contour_xld通过线段来逼近XLD轮廓。它不执行输入轮廓的分割。因此,必须确保每个轮廓都对应且仅对应一个线段。该操作符返回每个轮廓的起点(RowBegin, ColBegin)、终点(RowEnd, ColEnd),以及由直线的法向量(Nr, Nc)及其到原点的距离(即距离)给出的轮廓的回归线。,直线方程由。
拟合直线的算法可以通过以下算法进行选择:
regression “回归”:
标准最小二乘拟合。
“Huber”:
加权‘最小二乘’直线拟合,其中根据Huber的方法减少了异常值的影响(见下文)。
“tukey”:
加权'最小二乘'线拟合,其中的异常值被忽略的方法Tukey(见下文)。
“drop”:
“最小二乘”拟合,其中的异常值被忽略。特别是,所有距轮廓线较远的等高线点,其距与削波因子相乘的回归线的平均距离(见下)均被忽略,以计算无失真的回归线。
“gauss”:
加权“最小二乘”直线拟合,根据所有等高线点到近似线距离的平均值和标准差,减少离群点的影响。
对于“huber”、“tukey”和“drop”,使用稳健的误差统计来估计与等高线点之间的距离的标准偏差,而不需要离群值。参数ClippingFactor(标准偏差的比例因子)控制异常值的数量:为ClippingFactor选择的值越小,检测到的异常值就越多。重复检测离群值。参数迭代指定迭代的数量。在“回归”模式中,这个值被忽略。值得注意的是,在Tukey(‘Tukey’)的方法中,在进行近似之前将离群点去除,并对所有其他点进行加权,而在Huber(‘Huber’)的方法中,离群点的影响仍然很小。特别地,对于离群点,优化过程受到线性影响,对于距离较小的点,优化过程受到二次影响。在实践中,推荐了杜克的方法。
为了减少计算量,可以将线的拟合限制在轮廓点的一个子集内:如果将-1以外的值赋给MaxNumPoints,则只使用MaxNumPoints点(均匀分布在轮廓上)。
线段的起点和终点是通过将相应轮廓的第一点和最后一点投影到近似线来确定的。由于在预处理的人工制品,轮廓的起点和终点可能是错误的。因此,可以从线拟合中排除轮廓的起始点和结束点。然而,它们仍然被用来确定线段的起点和终点。
本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

