计算图像算法的对象

时间:2011-12-27 12:26:24

标签: algorithm image-processing pattern-matching

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

图片与此类似:

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

3 个答案:

答案 0 :(得分:6)

我认为你可以通过分割鸭子的喙并计算二进制图像中connected components的数量来解决这个问题。

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

答案 1 :(得分: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 ...)。< / p>

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

答案 2 :(得分:2)

这是一种方式:

圆圈的霍夫变换:

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

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