签名:
- fit_circle_contour_xld(Contours : : Algorithm, MaxNumPoints, MaxClosureDist, ClippingEndPoints, Iterations, ClippingFactor : Row, Column, Radius, StartPhi, EndPhi, PointOrder)
复制代码
通过对输入的Contours使用圆相关算法进行拟合,并生成圆的参数。
需要注意的是,输入的Contours的数据只能包含一个圆的数据,因为该算子不会对轮廓进行分割,所以轮廓应该视为近似一个圆。
参数:
Contours:输入轮廓
Algorithm:圆的拟合算法
- 'algebraic' 这种方法可以最大限度地减少轮廓点与所得圆之间的代数距离。
- 'ahuber' 与“algebraic”类似,轮廓点根据 Huber 的方法进行加权,以减少异常值的影响。
- 'atukey' 与“algebraic”类似,轮廓点根据 Tukey 的方法进行加权,并忽略异常值。
- 'geometric' 这种方法可以最小化轮廓点与最终圆之间的几何距离。虽然这种距离度量在统计上是最优的,但计算时间较长。如果轮廓点受噪声影响较大,建议采用这种方法。
- 'geohuber' 与“geometric”类似。这里,轮廓点根据 Huber 的方法进行加权,以减少异常值的影响。
- 'geotukey' 与“geometric”类似。这里,轮廓点根据 Tukey 方法进行加权,并忽略异常值。
复制代码
对于"*huber"和"*tukey"算法,使用稳健误差统计来估计轮廓点到近似圆的距离的标准差(不包括 异常值)。
MaxNumPoints:用于计算的最大轮廓点数(-1 表示所有点)
为了减少计算量,可以将圆的拟合限制在轮廓点的子集上:如果将MaxNumPoints赋值为-1以外的值,则只使用轮廓上均匀分布的MaxNumPoints个点。
MaxClosureDist:轮廓线端点之间的最大距离,该距离被视为“闭合”。
ClippingEndPoints:拟合过程中要忽略的轮廓线开头和结尾处的点数。
Iterations:稳健加权拟合的最大迭代次数。
该参数指定算法"algebraic","ahuber"和"atukey"的迭代次数。
对于算法"geometric","geohuber"和"geotukey" ,此参数将被忽略。
如果设置为零,则算法不会对拟合圆进行迭代改进,而只会根据所选的异常值处理方式检查初始猜测是否已经足够接近。
ClippingFactor:剔除异常值的裁剪因子(典型值:Huber 为 1.0,Tukey 为 2.0)。
控制异常值的数量:该值越小, 检测到的异常值就越多。
在Tukey算法中,异常值会被移除;而在Huber算法中,异常值仅被抑制,或者更准确地说,是被线性加权。
如果没有进行任何稳健加权,则在优化过程中(即最小二乘法)将距离的平方作为误差值。
在实践中,建议使用Tukey方法。
对于圆弧,选择圆上距离原始轮廓起点和终点最近的点作为起点和终点。
Row:圆心的行坐标
Column:圆心的列坐标
Radius:圆的半径
StartPhi:起始点角度[弧度]
EndPhi:终点角度[弧度]
PointOrder:边缘点的顺序,值为:'negative', 'positive'
|