检测草图像中的植物

时间:2016-02-11 16:51:59

标签: c++ opencv computer-vision

我是计算机视觉领域的新人。 我想在草图中发现某种植物。

原始图片 Original Image

Canny边缘检测算法 Canny Edge Detection Algorithmus

霍夫线变换(边缘检测后) enter image description here

我已经尝试过了:

  • 通过比较某个地区的白色像素的平均值来移除背景中的草。
  • 使用hough line变换算法进行线检测(草添加错误的行)

您认为检测此植物的最佳方法是什么?

3 个答案:

答案 0 :(得分:3)

我想到了虚拟解决方案。由于草比植物本身更详细:

  1. 应用Canny或任何其他边缘检测器。
  2. 使用窗口传递图像(让我们说10 * 10)。对于每个窗口:
    • 计算密度(如果使用Canny,则为白色像素数)
    • 将其存储在数组
  3. 使用Otsu算法对数组中的值进行阈值处理。值越小表示作为工厂一部分的窗口。
  4. 将所有需要的窗口重新映射到原始图片。
  5. 如果一个窗口被计算为不是该对象的一部分,但同时它被该对象的窗口所环绕,它就是它的一部分。

答案 1 :(得分:3)

只是为了好玩,与Humam的回答非常相似,只是使用标准差而不是密度,并使图像透明,而不认为有叶子。我直接在命令行使用了ImageMagick:

convert weed.jpg \( +clone -canny 0x1+10%+30% -statistic standarddeviation 10x10 -blur 0x8 -normalize -negate \) -compose copyopacity -composite result.png

enter image description here

答案 2 :(得分:1)

我实施了Humam的方法。

但是在Otsu算法之后添加了一些步骤:

  1. 完成每个黑色连接组件
  2. 使用矩阵减法提取蒙版
  3. 将面具存储在矢量
  4. 按区域大小(= sum(mask))
  5. 对其进行排序
  6. 选择最大的面具(=植物)
  7. 植物面具上的
  8. :再次执行步骤1-3
  9. 从植物面具中移除所有小面具
  10. 我有一些来自工厂的旧图像和坏图像,我将在接下来的几天对这些图像进行测试。 不幸的是,这是我国的冬天,草被雪覆盖着。所以我必须等几个星期才能从这个植物中得到一些正确的图像。

    提取结果。 enter image description here

    下一步是检测提取的图像是否是所需的植物。