作用:将XLD轮廓分割成线段和圆弧或椭圆弧;
参数翻译:输入轮廓、输出轮廓、分割采用的模式、用于平滑轮廓的点数、轮廓线和近似线之间的最大距离(第一次迭代)、轮廓线和近似线之间的最大距离(第二次迭代)
描述:segment_contours_xld在分割时,
如果Mode='lines'则将输入轮廓分割成线条,
如果Mode='lines_circles'则将其分割成线条和圆弧,
如果Mode='lines_ellipses'则将其分割成线条和椭圆弧;
(1)、segment_contours_xld首先通过折线来逼近输入的轮廓,这样,在弯曲的地方轮廓就会被过度的分割,如果用圆弧可以更好地逼近轮廓,则用圆弧或椭圆弧分别代替相邻的线段。如果SmoothCont设置为> 0,则首先对输入的轮廓进行平滑,这是必要的,因为平滑抑制了轮廓上的异常值,所以一方面可以防止在分割特别短的线的时后带来的异常,另一方面,在使用圆或椭圆分割时,可以实现更稳健的分割;
(2)、最初的折线逼近是使用Ramer算法通过MaxLineDist1的最大距离来完成的,在此之后,圆形或椭圆形的弧被匹配到相邻的线段中,如果所产生的弧线到轮廓线的最大距离小于两条线段的最大距离,两个线段被替换为圆弧,迭代此过程,直到不再发生更改;
(3)、在此之后,仍然由线段逼近的轮廓部分再次用最大距离MaxLineDist2的多边形逼近进行分割,并且新创建的线段在可能的情况下合并为圆形或椭圆弧。显然,这只会在MaxLineDist2 < MaxLineDist1时更改输出,这种两步方法比使用MaxLineDist2的一步方法更有效,由于在第一步中生成的线段较少,因此必须较少地进行圆或椭圆拟合。因此,使用长圆弧逼近部分输入轮廓会更高效;之后,再用短圆弧去逼近输入的轮廓,最后再细化使用过长圆弧逼近的轮廓的末端;
(4)、所述所得轮廓长度至少为3像素,并且包含所述输入轮廓的至少6个连续点;所有输入的长度小于3像素或少于6个轮廓点的轮廓线将被复制到输出轮廓线,不做任何修改。
参数设置注意事项:
SmoothCont (input_control)
(1)、不能等于0;
(2)、最好大于等于3并且是奇数;
(3)、建议值是5;
MaxLineDist1 (input_control) MaxLineDist2 (input_control)
(1)、需要大于等于0.0;