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

最佳答案

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

例如,您可以在测试集上运行算法,用cv::fitEllipse拟合点并记录椭圆的两个轴的长度,然后查看两个轴之比的分布或主轴与主轴之间的差。短轴您可以找到假定的圆与圆有多少不同,然后评估是否可以使用cv::fitEllipse

您可以取cv::RotatedRect返回的cv::fitEllipse的宽度和高度的平均值,以获得圆形的直径的近似值(您写了半径,但我认为这是一个小错误)。

您可以看一下这篇易读的文章
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)(一种closed-form solution,它最大程度地减少了与几何误差不同的误差),并带有一些警告:

从实现的角度来看

  • ,您必须注意有关舍入错误和截断错误的通常警告。
  • 如果存在离群点,则封闭形式的解决方案不能足够健壮,在这种情况下,您可能需要实现一个健壮的插值器,例如RANSAC(随机选择三个点,使用公式(25)到(34 )从Weisstein, Eric W. "Circle." From MathWorld--A Wolfram Web Resource,计算出共识并进行迭代)。该警告也适用于以最小的几何误差找到的圆。
  • 关于opencv - 使用OpenCV fitEllipse()进行圆拟合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13760110/

    10-09 17:18