如何在不使用opencv中的fitEllipse()的情况下检测图像中的椭圆?

时间:2016-02-26 09:56:54

标签: opencv image-processing computer-vision

我正在尝试使用C ++在OpenCV中检测椭圆内核。我试过获取Canny边,然后在边上使用fitEllipse()函数。虽然这可以找到椭圆,但是当图像有噪声或者有很多边缘时,精度是可怕的。

我已经意识到要走的路是检测省略号,而不是拟合它们。也许像霍夫圈子,但椭圆?我也不知道椭圆的长度,因为它在图像之间变化。

有人可以帮我开始吗?所有相关的答案都很模糊,我只想指出从哪里开始。

Fitted Ellipses on Canny Edges

1 个答案:

答案 0 :(得分:12)

如您所知,您不需要椭圆拟合,而是椭圆检测

您可以在my other answer中找到两篇提供C ++代码的论文。我将在此报告完整性:

  
      
  1. 升。 Libuda,I。Grothues,K.-F。 Kraiss,数字图像中的椭圆检测   使用几何特征的数据,在:J. Braz,A。Ranchordas,H。Arajo,   J. Jorge(编辑),计算机图形学与计算机视觉进展,   计算机与信息科学通讯第4卷,   Springer Berlin Heidelberg,2007,pp.229-239。 linkcode

  2.   
  3. 微米。 Fornaciari,A。Prati,R。Cucchiara,   “用于嵌入式视觉应用的快速有效的椭圆探测器”,模式识别,2014 linkcode

  4.   

通过实施这两篇论文,移植到OpenCV this matlab script也相当容易:

  • “一种新的高效椭圆检测方法”(Yonghong Xie Qiang,Qiang Ji / 2002)
  • “使用结果聚类进行椭圆检测的随机Hough变换”(CA Basca,M Talos,R Brad / 2005)

另一个非常有趣的算法是:

  • Dilip K. Prasad,Maylor K.H. Leung和Siu-Yeung Cho,“基于边缘曲率和凸性的椭圆检测方法”,模式识别,2012。

可以找到Matlab代码here

直接应用Hough变换对于椭圆是不可行的,因为您将在5维参数空间中工作。这将非常缓慢,而且不准确。因此提出了许多算法。在这里提到的那些:

  • Xie和Ji的方法很有名,很容易(但仍然很慢)
  • Basca等。方法更快,但可能不准确
  • Prasad等。方法很快,而且非常准确。
  • Libuda等。方法非常快速和准确
  • Fornaciari等。方法是最快的,但在特定情况下可能不准确。

有关椭圆检测的最新参考书目,您可以参考this页面。