首页 > 编程知识 正文

ellipse函数,halcon 点云

时间:2023-05-05 02:01:47 阅读:107998 作者:1873

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从自学到接项目视频教程,另外再赠送全网最全资源

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。