使用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,它最大程度地减少了与几何误差不同的误差),并带有一些警告:
从实现的角度来看
关于opencv - 使用OpenCV fitEllipse()进行圆拟合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13760110/