使用OpenCV fitEllipse()进行圆拟合

时间:2012-12-07 09:19:54

标签: opencv curve-fitting

使用OpenCV fitEllipse进行圆拟合是否有效。 fitEllipse()返回cv::RotatedRect如何平均宽度和高度以获得拟合的圆半径?

2 个答案:

答案 0 :(得分:3)

我认为使用cv::fitEllipse拟合圆的“有效性”取决于拟合所需的精度。

例如,您可以在测试集上运行算法,使用cv::fitEllipse拟合点并记录椭圆的两个轴的长度,然后查看两个轴的比率分布,或者在主轴和短轴之间的差异;你可以找到你认为的圈子与圈子的差异,然后评估你是否可以使用cv::fitEllipse

您可以获取cv::RotatedRect返回的cv::fitEllipse的宽度和高度的平均值,以获得圆的直径的近似值(您编写了< em> radius 但我认为这是一个微不足道的错误。)

你可以看看这篇非常易读的文章 UMBACH, Dale; JONES, Kerry N. A few methods for fitting circles to data. Instrumentation and Measurement, IEEE Transactions on, 2003, 52.6: 1881-1885.并编写自己的圆内插器。

如果你想最小化几何误差(从点到圆的距离的平方和,如文章的介绍中所述)你可能需要一个可靠的实现非线性最小化算法。

否则你可以用(II.8)到(II.15)中的公式(a closed-form solution编写一个简单的圆内插器,它最小化一个不同于几何的误差)并带有一些警告:

  1. 从实现的角度来看,你必须处理关于舍入错误和截断错误的常见警告。
  2. 封闭形式的解决方案在异常点的情况下不够强大,在这种情况下,你可能需要实现一个强大的插值器,如RANSAC(随机选择三个点,用这三个点插入一个带有公式的圆来自Weisstein, Eric W. "Circle." From MathWorld--A Wolfram Web Resource的(25)到(34),计算共识并迭代)。此警告也适用于通过最小化几何误差找到的圆。

答案 1 :(得分:-1)

圆拟合功能:minEnclosingCircle