5

我又接到了学校的任务。这一次,我的老师给我的任务是创建算法来计算图片上有多少只鸭子。

图片与此类似:

我想我应该使用模式识别来搜索上面有多少只鸭子。但我不知道每只鸭子都匹配哪种模式。

4

3 回答 3

6

我认为您可以通过分割鸭子的喙并计算二值图像中连通分量的数量来解决这个问题。

要分割鸭子的喙,首先将图像转换为HSV 颜色空间,然后使用色调分量执行二值化。请注意,鸭子的喙部色调与图像的其他部分不同。

于 2011-12-27T18:06:32.307 回答
2

这可能只是因为我现在正在与 SIFT 合作,但对我来说,它看起来可能对您的问题有好处。

它是一种在两张不同图片上匹配同一对象的算法,其中对象可以具有不同的方向、比例,并在两张图片上从不同的角度进行查看。当一个对象被另一个对象部分隐藏(就像你的鸭子一样)时,它也可以工作。

我建议找到一个清晰的橡皮鸭图片( :D ),然后使用一些 SIFT 实现(VLFeat - C library with SIFT but no visualization , SIFT++ - based on VLFeat, but in C++ , Rob Hess in C with OpenCV ...)。

您应该记住,与 SIFT(和其他任何东西)匹配并不完美 - 因此您可能无法获得图片中橡皮鸭的确切数量。

于 2011-12-27T12:43:28.720 回答
2

这是一种方法:

圆的霍夫变换:

  • 初始化由 (x,y,radius) 索引的累加器数组
  • 对于每个像素:
    • 计算边缘(例如,Sobel 算子将提供幅度和方向),如果幅度超过某个阈值,则:
      • 递增该边缘可能提供证据的每个累加器(仅边缘方向上的 (x,y),仅 min_duck_radius 和 max_duck_radius 之间的半径)
  • 现在对累加器数组进行平滑和阈值处理,最高累加器的坐标会显示正面的位置。如果您对累加器中的值进行直方图绘制,阈值可能会突然出现(“大量证据”和“噪声”之间可能存在明显差异)。

所以这非常简洁,但它可以让你开始。

于 2011-12-27T20:49:13.067 回答