设置首页收藏本站
开启左侧

[算子] fit_circle_contour_xld 对xld进行圆拟合

[复制链接]
Criss 发表于 昨天 11:14 | 显示全部楼层 |阅读模式
签名:
  1. fit_circle_contour_xld(Contours : : Algorithm, MaxNumPoints, MaxClosureDist, ClippingEndPoints, Iterations, ClippingFactor : Row, Column, Radius, StartPhi, EndPhi, PointOrder)
复制代码

通过对输入的Contours使用圆相关算法进行拟合,并生成圆的参数。
需要注意的是,输入的Contours的数据只能包含一个圆的数据,因为该算子不会对轮廓进行分割,所以轮廓应该视为近似一个圆。

参数:
Contours:输入轮廓

Algorithm:圆的拟合算法
  1. 'algebraic' 这种方法可以最大限度地减少轮廓点与所得圆之间的代数距离。
  2. 'ahuber' 与“algebraic”类似,轮廓点根据 Huber 的方法进行加权,以减少异常值的影响。
  3. 'atukey' 与“algebraic”类似,轮廓点根据 Tukey 的方法进行加权,并忽略异常值。
  4. 'geometric' 这种方法可以最小化轮廓点与最终圆之间的几何距离。虽然这种距离度量在统计上是最优的,但计算时间较长。如果轮廓点受噪声影响较大,建议采用这种方法。
  5. 'geohuber' 与“geometric”类似。这里,轮廓点根据 Huber 的方法进行加权,以减少异常值的影响。
  6. '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'
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表