7

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

4

2 回答 2

3

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

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

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

你可以看看这篇非常易读的文章 UMBACH,Dale;JONES, Kerry N. 一些将圆拟合到数据的方法。Instrumentation and Measurement, IEEE Transactions on , 2003, 52.6: 1881-1885。并编写自己的圆插值器。

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

否则,您可以使用从 (II.8) 到 (II.15) 的公式编写一个简单的圆插值器(一种封闭形式的解决方案,可以最大限度地减少与几何错误不同的误差),并带有一些警告:

  1. 从实现的角度来看,您必须注意通常关于舍入错误和截断错误的警告。
  2. 在异常点的情况下,封闭形式的解决方案不够稳健,在这种情况下,您可能需要实现像RANSAC这样的稳健插值器(随机选择三个点,用 (25) 到 (34) 的公式用这三个点插值一个圆来自Weisstein, Eric W. “Circle”。来自MathWorld --A Wolfram Web Resource,计算共识并迭代)。此警告也适用于几何误差最小化的圆。
于 2013-07-23T20:27:27.150 回答
0

有一个圆形拟合的功能:minEnclosureCircle

于 2012-12-07T15:18:06.507 回答