我正在尝试使用C ++在OpenCV中检测椭圆内核。我试过获取Canny边,然后在边上使用fitEllipse()函数。虽然这可以找到椭圆,但是当图像有噪声或者有很多边缘时,精度是可怕的。
我已经意识到要走的路是检测省略号,而不是拟合它们。也许像霍夫圈子,但椭圆?我也不知道椭圆的长度,因为它在图像之间变化。
有人可以帮我开始吗?所有相关的答案都很模糊,我只想指出从哪里开始。
答案 0 :(得分:12)
如您所知,您不需要椭圆拟合,而是椭圆检测。
您可以在my other answer中找到两篇提供C ++代码的论文。我将在此报告完整性:
通过实施这两篇论文,移植到OpenCV this matlab script也相当容易:
另一个非常有趣的算法是:
可以找到Matlab代码here
直接应用Hough变换对于椭圆是不可行的,因为您将在5维参数空间中工作。这将非常缓慢,而且不准确。因此提出了许多算法。在这里提到的那些:
有关椭圆检测的最新参考书目,您可以参考this页面。