检测图像中圆圈的快速方法有哪些?

时间:2013-04-08 11:50:33

标签: image-processing geometry

检测图像中圆圈的快速方法是什么?

对于前: 我有一个大圆圈的图像,并在大圆圈内有6个小圆圈。

我需要在不使用Hough Circles(OpencV)的情况下找到一个大圆圈。

2 个答案:

答案 0 :(得分:11)

查找圆圈的标准算法是Hough(评论中提到的堵塞)和RANSAC。参数化这些算法将为您的应用程序设置基线速度。

http://en.wikipedia.org/wiki/Hough_transform

http://en.wikipedia.org/wiki/RANSAC

要加快这些算法的速度,您可以查看您的图像集,并决定限制搜索范围是否有助于加快搜索速度。这很简单:只在半径的合理范围内搜索。由于它们将边缘点作为输入,因此您还可以查看减少检查边缘点数量的方法。

但是,还有一些其他技巧可以加快处理速度。

  • 仔细设置检查半径的范围。例如,您可能不会简单地从最小可能半径检查到最大可能半径,而是可以将搜索分成两个不同的范围:从半径R1到R2,然后从半径R3到R4。
  • 放弃Canny边缘检测,以支持应用程序可以容忍的最快边缘检测。 (你可以在很多应用程序中抛弃Canny。)
  • 预处理边缘点图像以消除异常值。消除异常值的适当算法将特定于您的图像集,但您可能能够找到一种消除明显异常值的算法,从而在更昂贵的圆拟合算法中节省一些搜索时间。
  • 如果您的圈子定义得很好,并且所有或几乎所有点都存在,请弄清楚如何只匹配四分之一圆或半圆而不是整圆。

长话短说:从完整的实施开始并对其进行基准测试,然后逐步收紧参数设置并限制搜索范围,同时确保您仍然可以为应用程序和图像集找到圆圈。

如果您的图像适合缩放,那么一种可能性是创建不同比例的图像金字塔图像:1/2比例,1/4比例,1/8比例等。您需要一个边缘 - 在较小的尺度上保留缩放方法。

获得图像金字塔后,请尝试以下操作:

  1. 以最小的比例查找圆圈。图像会很小 可能的半径范围将是有限的,所以这应该是a 快速操作。
  2. 如果您在小尺度上找到使用初始拟合的圆,请通过在下一个更大尺度的图像中进行测试来改善拟合度 - 或者 - 继续搜索全尺寸图像。
  3. 检查下一个最大比例。在较小比例图像中不可见的圆圈可能会突然“出现”在当前比例中。
  4. 通过图像中的所有比例重复上述步骤。
  5. 图像缩放将是一个快速操作,您可以看到,如果您的圆圈中至少有一个圆圈存在于较小比例的图像中,您应该能够通过在小图像中执行粗圆圈来减少总循环次数缩放图像,然后在全尺寸图像中优化这些边缘点的拟合。

    边缘保留缩放也可以使用相关类型工具来查找圆圈,但能够这样做取决于图像的内容,包括噪点,边缘点如何表示圆圈,等等。

答案 1 :(得分:1)

或许,检测contours并检查其属性,例如尝试使用cv::isContourConvex或其他方式可以使用covariance matrix的特征值,并检查轮廓的代表ellipse first eccentricity是否为0。