fit _ ellipse _ contour _ xld (contours : algorithm,MaxNumPoints,MaxClosureDist,ClippingEndPoints,vostabstabsion
fit_ellipse_contour_XLD用椭圆弧或封闭椭圆逼近xld轮廓线。
不执行输入配置文件的分割。
因此,每个轮廓必须对应一个,每个椭圆结构只能对应一个。
操作符返回每个轮廓的中心(行,列)、主轴方向Phi、大侧Radius1的长度和小侧Radius2的长度。
椭圆弧还会返回到起点和终点的开始点、结束点和沿边界的点顺序。
对于闭合椭圆,这些参数将设置为0,2 * pai和positive。
椭圆拟合的算法可以在Algorithm中选择:
fitzgibbon
该方法将代数距离最小化
2019-05-23_110423.jpg(2.35kb,下载次数: 1) )。
2019-5-23 16:49上传
位于轮廓线的点(xi,yi )和生成的椭圆之间。
约束4ac - b^2=1确保得到的多项式是椭圆而不是双曲线或抛物线。
fhuber
与“fitzgibbon”相似。 这里基于Huber法对轮廓点进行加权,
减小异常点的影响。
ftukey
与“fitzgibbon”相似。 这里根据Tukey方法对轮廓点进行加权,
无视异常值。
地理
此方法将最小化轮廓线点和最终椭圆之间的几何距离。
距离测量在统计上最好,但计算是一个迭代的过程。
需要更多的计算时间。
如果轮廓线上的点因噪声而严重扭曲,建议使用此选项。
geohuber
与" geometric "相似。 这里,基于Huber法对轮廓点进行加权,减小异常点的影响(参照下述)。
geotukey
类似于“几何”。 在此,基于Tukey的方法对轮廓点进行加权,忽略异常值(参照以下)。
voss
每个输入轮廓都在仿射标准位置进行转换。
根据变换后轮廓、即封闭的图像区域的矩值,
选择标准圆段,使其标准位置与轮廓的标准位置最匹配。
对与基于仿射变换选择圆段的标准位置相对应的椭圆进行再变换,
仿射变换生成轮廓的标准位置,以使椭圆与原始轮廓匹配。
VossTabSize标准圆段用于此计算。
为了提高处理速度,对应的力矩和其他数据存储在一个表中。
此表是在第一次调用fit_ellipse_contour_xld时创建的。 VossTabSize有特定的值。
focpoints
椭圆上的每个点p满足到焦点(f1、f2 )的距离之和等于大坐标轴a长度的两倍的约束。
该方法通过最舒适的母鸡乘优化,使所有轮廓点的偏差pf1 pf2-2a最小。
fphuber
与“focpoints”相似。 本文采用最舒适的母鸡乘方优化方法
基于Huber法降低了异常值的影响(见下文)。
fptukey
与“focpoints”相似。 本文采用最舒适的母鸡乘方优化方法
无视异常值。
对于“*huber”和“*tukey”,使用鲁棒误差统计量来估计从轮廓点到距离的标准偏差,
距离离群点没有接近椭圆的距离。
参数ClippingFactor (标准偏差的比例因子)控制异常值的数量:
为ClippingFactor选择的值越小,分类为异常值的点越多。
在拟合过程中,各等高线点被单独加权,
根据其权重做出贡献。
傲慢的魔镜和拟合的集合可以重复。
迭代的总数由Iterations给出。
该参数与除基于几何距离的两个算法外的所有算法相关。
也就是说,“geohuber”和“geotukey”将忽略此参数。
如果算法在该迭代次数内未找到拟合椭圆,则为拟合直线;
在这种情况下,Radius2为零。 在Tukey算法中,异常值被删除,
在Huber算法中,异常值只是阻尼,更准确地说是线性加权。
不使用傲慢的魔镜,将距离的平方和优化为误差值,是采用最舒适的母鸡乘式。
在实践中,推荐了Tukey的方法。
为了减少计算量,可以将椭圆的拟合限制为轮廓点的子集
内:如果MaxNumPoints分配的值不是-1,
那么只使用MaxNumPoints(均匀分布在轮廓上)。
对于椭圆圆弧,选取椭圆上最接近原始轮廓起点和终点的点作为起点和终点。
与椭圆主轴对应的角在StartPhi和EndPhi中返回,也参见gen_ellipse_contour_xld。
对于起点和终点之间的距离小于或等于MaxClosureDist的轮廓线,则认为轮廓线是闭合的。
因此,它们用椭圆代替椭圆弧来近似。
“focpoints”算法比开放轮廓算法更快、更不精确地确定了封闭轮廓优化的初始参数。
因此,在某些情况下,当应用于闭合轮廓时,可能需要更多的迭代。
由于预处理中的伪影,轮廓的起点和终点可能会出现错误。
因此,可以从椭圆的拟合中排除轮廓的起点和终点处的裁剪端点。
然而,它们仍然用于StartPhi和EndPhi的测定。
拟合椭圆所需的最小轮廓点个数为5。因此,要求轮廓点的个数至少为5+2*ClippingEndPoints
例程
read_image (Image, 'caltab')
find_caltab (Image, CalPlate, 'caltab_800mm.descr', 3, 112, 5)
reduce_domain (Image, CalPlate, ImageReduced)
edges_sub_pix (ImageReduced, Edges, 'lanser2', 0.5, 20, 40)
select_contours_xld (Edges, EdgesClosed, 'closed', 0, 2.0, 0, 0)
select_contours_xld (EdgesClosed, EdgesMarks, 'length', 20, 80, 0, 0)
fit_ellipse_contour_xld (EdgesMarks, 'fitzgibbon', -1, 2, 0, 200, 3, 2.0,
Row, Column, Phi, Radius1, Radius2, StartPhi,
EndPhi, PointOrder)
gen_ellipse_contour_xld (EllMarks, Row, Column, Phi, Radius1, Radius2,
StartPhi, EndPhi, PointOrder, 1.5)
length_xld(EllMarks,Length)
halcon从自学到接项目视频教程,另外再赠送全网最全资源