36.3、视觉测量---拟合算子

Halcon的拟合算子都是基于亚像素级高精度的XLD轮廓。

1、gen_contour_polygon_xld( : Contour : Row, Col : )

    功能:根据输入的点集,生成一个多边形轮廓。

2、fit_circle_contour_xld(Contours : : Algorithm, MaxNumPoints, MaxClosureDist, ClippingEndPoints, Iterations,

                        ClippingFactor : Row, Column, Radius, StartPhi, EndPhi, PointOrder)

    功能:根据xld拟合圆或圆弧。它是不会分割输入轮廓,因此需要确保每个轮廓对应唯一的圆。这个算子会返回每

            个轮廓拟合得到的圆的中心(Row、Column坐标)和半径

    Contours:输入xld轮廓

    Algorithm:输入拟合圆的算法

        'algebraic'

        这种算法是轮廓点和拟合得到的圆之间的代数距离最小。

    'ahuber'

        类似'algebraic'("代数")对轮廓点进行加权,以减少异常点(基于Huber方法,该方法看下文)的影响

    'atukey'

        类似'algebraic'("代数")对轮廓点进行加权,以减少异常点(基于Huber方法,该方法看下文)的影响

    'geometric'

        这种算法使轮廓点和拟合得到的圆之间的几何距离最小。这种距离测量时基于统计最优轮廓点的,但消

        耗更多时间。但轮廓点被噪声影响很大时,推荐采用这种方法。

    'geohuber'

        类似'geometric'("几何")对轮廓点进行加权,以减少异常点(基于Huber方法,该方法看下文)的影响

    'geotukey'

        类似'geometric'("几何")对轮廓点进行加权,以减少异常点(基于Huber方法,该方法看下文)的影响

        注:

'*huber' '*tukey'是强大的误差统计方法,用来估算无异常点的轮廓点和近似圆的距离标准差。在Tukey算法中,异常点事被删除,而在Huber算法中,异常点仅仅是被抑制,或者更准确的说,它们是线性加权的。在实际应用中,推荐使用Tukey算法。

    MaxNumPoints:输入用于拟合圆计算的最大轮廓点数。-1表示使用所有点

        为了减少计算负荷,可以把拟合圆限制在轮廓点的子集(即使用部分轮廓点)进行拟合。如果参数

MaxNumPoints值不是-1(-1表示使用所有点)而是其他值,那么只有MaxNumPoints个轮廓点用于拟合圆。(这些点假设均匀分布在轮廓上,假如轮廓上有30个点,而MaxNumPoints设置为10,那么没个两个点就取出一个点,这样最后就可以取出10个点构成原来的一个子集,用于拟合圆)

    MaxClosureDist:输入轮廓端点间的最大距离,但轮廓端点之间的距离小于该值时,认为轮廓是闭合的。

        如果轮廓起点和终点的距离小于或等于参数MaxClosureDist,那么认为轮廓是闭合的,把轮廓拟合圆,而不

        是拟合圆弧。

    ClippingEndPoints:输入拟合圆时忽略的起始轮廓点和终止轮廓点的数量。

        如果轮廓的起点和终点部分存在缺陷或干扰,可以用在轮廓的起点和终点部分排除ClippingEndPoints个轮廓

点,用剩下的轮廓点进行拟合。这些排除的点虽然不参与拟合计算,但会用来确定起始角度和终止角度。

注:

拟合圆至少要3个点,因此轮廓点的数量至少在3个以上。

    Iterations:加权拟合的最大迭代次数。

        这个参数适用于出'geohuber''geotukey'在这两种算法中,该参数被忽略)以外的算法。

    ClippingFactor:输入用于消除异常点的裁剪因子。(典型值:Huber设置为1.0 , Tukey设置为2.0)

        参数ClippingFactor控制抑制异常点的(程度):值越小,抑制程度低,检测到的异常点就越多。在最小二乘

        法拟合时可重复检测异常点

    Row, Column:输出圆心的坐标

    StartPhi, EndPhi:输出起始角度和终止角度(单位为幅度)

        对于圆弧,拟合的圆弧上的圆弧上的最靠近原始轮廓起点的轮廓点作为拟合圆弧的起点,与x轴的夹角作为

起始角度StartPhi;,拟合的圆弧上的圆弧上的最靠近原始轮廓终点的轮廓点作为拟合圆弧的终点,与x轴的夹角作为终止角度EndPhi

    PointOrder:输出边界点的顺序

取值列表:'positive'(顺时针), 'negative'(逆时针)

3、fit_ellipse_contour_xld(Contours : : Algorithm, MaxNumPoints, MaxClosureDist, ClippingEndPoints, VossTabSize,

                    Iterations, ClippingFactor : Row, Column, Phi, Radius1, Radius2, StartPhi, EndPhi, PointOrder)

    功能:根据xld拟合椭圆或椭圆弧,它是不会分割输入的轮廓,因此要确保每个轮廓对应唯一的椭圆结构。

    Contours:输入轮廓

    Algorithm:输入拟合算法

    MaxNumPoints:输入拟合椭圆计算的最大轮廓点数。-1表示使用所有点。

    MaxClosureDist:输入轮廓端点间的最大距离,但轮廓端点之间的距离小于该值时,认为轮廓是闭合的。

    ClippingEndPoints:输入拟合圆时忽略的起始轮廓点和终止轮廓点的数量。

    VossTabSize:输入用于Voss方法的圆弧段的数量

    Iterations:输入加权拟合的最大迭代次数。

    ClippingFactor:输入用于消除异常点的裁剪因子。(典型值:Huber设置为1.0 , Tukey设置为2.0)

    Row, Column:输出椭圆的中心坐标

    Phi:输出主轴角度(单位弧度)

    Radius1, Radius2:输出长短半轴半径

    StartPhi:输出起始角度(单位弧度)

    EndPhi:输出终止角度(单位弧度)

            如果是闭合的椭圆,StartPhi被设置为0EndPhi被设置为2*PIPointOrder倍设置为'positive'

    PointOrder:输出边界点的顺序

取值列表:'positive'(顺时针), 'negative'(逆时针)

 

算法:

'fitzgibbon'

    这种算法是轮廓点(X,Y)和拟合圆的代数距离代数距离(a*X^2 + b*X*Y+c*Y^2+d*X+e+f)最小,约束条件

4ac – b^2 = 1确保所得到的多项式描述是椭圆(而不是一个双曲线或抛物线)

'fhuber'

    类似于'fitzgibbon',对轮廓点进行加权,以减少异常点(基于Huber方法)的影响

'ftukey'

    类似于'fitzgibbon',对轮廓点进行加权,以减少异常点(基于Tukey方法)的影响

'geometric'

    种种方法使轮廓点和拟合得到的椭圆之间几何距离最小。这种距离测量时基于统计最优轮廓点,但是消耗的时间

    更多。因为计算过程是一个迭代处理过程。但轮廓点被噪声影响很大时候,推荐使用这种方法。

'geohuber'

    类似于' geometric ',对轮廓点进行加权,以减少异常点(基于Huber方法)的影响

'geotukey'

    类似于' geometric ',对轮廓点进行加权,以减少异常点(基于Tukey方法)的影响

'voss'

    详情参考help

'focpoints'

    椭圆上每个P点满足约束条件,点P2个焦点F1F2的距离等于长半轴a的长度两倍。这种方法中,用最小二

    乘法优化,使得所有轮廓点的PF1 + PF2 – 2a偏差最小。

'fphuber'

    类似于'focpoints',对轮廓点进行加权,以减少异常点(基于Huber方法)的影响

'fptukey'

    类似于'fphuber',对轮廓点进行加权,以减少异常点(基于Tukey方法)的影响

注:

'*huber' '*tukey'是强大的误差统计方法,用来估算无异常点的轮廓点和近似圆的距离标准差。在Tukey算法中,异常点事被删除,而在Huber算法中,异常点仅仅是被抑制,或者更准确的说,它们是线性加权的。在实际应用中,推荐使用Tukey算法。

4fit_line_contour_xld(Contours : : Algorithm, MaxNumPoints, ClippingEndPoints, Iterations, ClippingFactor : RowBegin,

                    ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)

    功能:根据xld拟合直线段,它不会分割输入的轮廓,因此需要确保每个轮廓对应唯一的直线段。

Contours:输入轮廓

Algorithm:输入拟合直线的算法

MaxNumPoints:输入用于拟合圆计算的最大轮廓点数。-1表示使用所有点

ClippingEndPoints:输入拟合圆时忽略的起始轮廓点和终止轮廓点的数量。

Iterations:输入加权拟合的最大迭代次数。

ClippingFactor:输入拟合圆时忽略的起始轮廓点和终止轮廓点的数量。

RowBegin, ColBegin, RowEnd, ColEnd:线段起点和终点坐标

Nr, Nc, Dist:直线的法向量(Nr,Nc),原点到直线的距离为Dist

回归线直线方程:r * Nr + c * Nc – Dist = 0

算法:

'regression':

    标准最小二乘法直线拟合。把所有轮廓点代入计算,所有轮廓点的权重都是一样的。

'huber'

    加权最小二乘法直线拟合,以减少异常点(基于Huber方法)的影响

'tukey'

    权最小二乘法直线拟合,以减少异常点(基于Tukey方法)的影响

'drop'

    加权最小二乘法直线拟合,以减少异常点(基于Huber方法)的影响

'gauss'

    加权最小二乘法直线拟合,以减少异常点(基于Huber方法)的影响

注:

'*huber' '*tukey'是强大的误差统计方法,用来估算无异常点的轮廓点和近似圆的距离标准差。在Tukey算法中,异常点事被删除,而在Huber算法中,异常点仅仅是被抑制,或者更准确的说,它们是线性加权的。在实际应用中,推荐使用Tukey算法。

5、fit_rectangle2_contour_xld(Contours : : Algorithm, MaxNumPoints, MaxClosureDist, ClippingEndPoints, Iterations,

                            ClippingFactor : Row, Column, Phi, Length1, Length2, PointOrder)

    Contours:输入轮廓

    Algorithm:输入拟合算法

    MaxNumPoints:输入用于拟合圆计算的最大轮廓点数。-1表示使用所有点

    MaxClosureDist:输入轮廓端点之间的最大距离。但轮廓端点之间的距离小于该值时,认为轮廓是闭合的。

    ClippingEndPoints:输入拟合圆时忽略的起始轮廓点和终止轮廓点的数量。

    Iterations:输入加权拟合的最大迭代次数。

    ClippingFactor:输入拟合圆时忽略的起始轮廓点和终止轮廓点的数量。

    Row, Column, Phi:仿射矩形的中心坐标和主轴(Length1所在轴)方向

    Length1:仿射矩形第一半径(半长)

    Length2:仿射矩形第二半径(半宽)

    PointOrder:输出边界点的顺序

取值列表:'positive'(顺时针), 'negative'(逆时针)

posted @ 2022-05-31 23:46  ihh2021  阅读(934)  评论(0编辑  收藏  举报