Halcon 算子 fit_circle_contour_xld

349 阅读3分钟

作用:用圆近似XLD轮廓;

参数翻译(对应以上参数顺序):

输入轮廓、

圆拟合算法(详细算法解释如下)、

用于计算的最大轮廓点数(MaxNumPoints >= 3,-1是所有点)、

闭合轮廓端点之间的最大距离(轮廓两头的距离MaxClosureDist >= 0.0)、

拟合过程忽略的点(轮廓首尾ClippingEndPoints >= 0)、

稳健加权拟合的最大迭代次数(Iterations >= 0)、

用于剔除异常值的剪切因子(ClippingFactor > 0)一般情况下:Huber算法设置为 1.0、Tukey算法设置为 2.0、

输出圆心的行坐标、输出圆心坐标的列坐标、输出圆的半径、输出起始点的角度、输出结束点的角度、输出沿边界的点序;

 

圆拟合算法(Algorithm参数):

代数方法:

(1)、'algebraic'  这种方法使轮廓点与所得圆之间的代数距离最小;

(2)、'ahuber'     类似于“代数方法(algebraic)”,在此基础上,采用Huber方法对等高线点进行加权,以减小异常值的影响;

(3)、'atukey'      类似于“代数方法(algebraic)”,在此基础上,采用Tukey算法对轮廓点进行加权,忽略离群点;

几何方法:

(4)、'geometric'  这种方法最小化轮廓点和结果圆之间的几何距离,这种算法在距离统计上是最优的,但需要更多的计算时间,如果轮廓点被噪声严重影响,建议使用这个选项;

(5)、'geohuber'  类似于“几何方法(geometric)”,在此基础上,采用Huber方法对等高线点进行加权,以减小异常值的影响;

(6)、'geotukey'  类似于“几何方法(geometric)”,在此基础上,采用Tukey算法对轮廓点进行加权,忽略离群点;

 

描述:

(1)、fit_circle_contour_xld用圆近似XLD轮廓,它不执行对输入轮廓的分割,因此,我们必须确保每条等高线都只对应一个圆。使用如上算法,操作符为每个轮廓返回中心(行、列)坐标和半径;对于“*huber”和“*tukey”,在没有近似圆异常值的影响下,它们采用稳健的误差统计来估计轮廓点距离的标准偏差;

(2)、参数ClippingFactor(标准偏差的比例因子)控制了异常值的数量:为ClippingFactor选择的值越小,检测到的离群值就越多;

(3)、在Tukey算法中离群值是会被剔除的,而在Huber算法中,离群值只被阻尼,更准确地说,它们是线性加权的;在没有任何鲁棒加权的情况下,优化时采用距离的平方作为误差值,即最小二乘公式,在实践中,建议采用Tukey方法。

(4)、参数Iterations指定算法“algebra”、“ahuber”和“atukey”的迭代次数,对于算法'geometric', 'geohuber'和'geotukey',这个参数会被忽略。如果迭代次数设置为0,则算法不会对拟合圆进行迭代改进,但是会检查最初的猜测是否已经足够接近,这也取决于对异常值的处理方法选择。

(5)、为了减少计算量,可以将圆的拟合限制在轮廓点的子集内;如果MaxNumPoints的值不是-1,只有达到MaxNumPoints设置的最大点数均匀分布在轮廓上才使用。

(6)、对于圆弧,选择圆上最接近原始轮廓起始点和结束点的点作为起始点和结束点,与x轴对应的角度在StartPhi和EndPhi中返回;

(7)、XLD轮廓上,起点和终点之间的距离小于或等于MaxClosureDist设置的值的轮廓被认为是闭合的,这种情况下,用圆代替圆弧来近似它们;

由在预处理过程中可能导致轮廓的起始点和结束点出现问题,因此,可以从圆的拟合中排除轮廓开始点和结束点(设置ClippingEndPoints的值 ),虽然如此,它们仍然被用于StartPhi和EndPhi的测定;

 

注意:

         拟合圆所需轮廓点的最小数目是三个,因此,要求等高线点的个数至少要符合以下公式计算的点数: