如何使用图像处理识别Google Maps Image中的树?

时间:2014-12-06 09:15:24

标签: google-maps opencv image-processing colors imagemagick

我试图在给定静态地图图像(左图像)的情况下找到大约树木覆盖的区域。

我想到的方法包括对图像进行逐像素分析,最初找出“更绿”的像素(使用HSV颜色方案提取色调值)。

我意识到在黎明或黄昏拍摄的一些照片中,树木实际上可能没有任何绿色,并且可能只是出现深灰色/黑色。而在中午拍摄的那些,显得亮绿色。所以我尝试使用图像阈值并得到了不错的结果(右图像):

但是我仍然不满意建筑物的阴影,或者黑暗的物体可能会给我误报。

我想在Stack Overflow上使用一些开发人员的经验,并建议在这种情况下哪种图像处理工具和方法会给我最好的结果?

1 个答案:

答案 0 :(得分:18)

-threshold Y%的问题是这样:它会将所有像素转换为黑色!

如果您的图像中有其他深色(深棕色,深蓝色,深红色,深灰色或黑色),您将错误地将其识别为“木材”。

如果我理解正确的话,那你只是在找那些像素的像素,它们是某种绿色或深绿色。

因此我建议使用以下命令的某些变体对您自己的方法进行基准测试:

compare                              \
 -size 600x600                       \
 -fuzz 30%                           \
  http://i.stack.imgur.com/kqMtt.png \
  xc:'darkgreen'                     \
  output-1.png    

您可以使用'#006400'的相应颜色值代替'darkgreen',它是相同的:

compare                              \
 -size 600x600                       \
 -fuzz 30%                           \
  http://i.stack.imgur.com/kqMtt.png \
  xc:'#006400'                       \
  output-2.png    

以上compare命令从两个输入图像中创建output-1.png,具有以下特征:

  1. 原始图像的对比是针对动态创建的(xc:)600x600像素的均匀颜色'darkgreen'补丁;
  2. 输出显示原始图像为苍白背景;
  3. 输出显示红色像素,其中原始图像的各个像素在考虑30%的“模糊因子”之后与颜色值'darkgreen'不同(其中'0%'表示精确匹配颜色值);
  4. 输出显示白色/半透明像素,其中原始图像的各个像素与'darkgreen'颜色相似(在模糊因子中为30%)。
  5. 以下是并排比较的结果:

    Side by side comparison of original image with resulting image. The original image serves as a pale background. Red pixels show up where the original image is NOT 'darkgreen' within 30% fuzz factor.

    您当然可以使用模糊因子以及'darkgreen'颜色值的确切定义。以下是-fuzz 25%的结果:

    Side by side comparison of original image with resulting image. The original image serves as a pale background. Red pixels show up where the original image is NOT 'darkgreen' within 25% fuzz factor.

    如果您希望比较显示反色(红色像素显示原始图像具有绿色,透明/白色是像素为非绿色),请使用“darkgreen”的反色作为比较色块(这是某种粉红色,BTW),以及不同的模糊因素:

    compare                              \
     -size 600x600                       \
     -fuzz 70%                           \
      http://i.stack.imgur.com/kqMtt.png \
      xc:'#ff9bff'                     \
      output-3.png    
    

    结果现在是:

    Side by side comparison of original image with resulting image. The original image serves as a pale background. Red pixels show up where the original image is not 'light-pink' (or IS 'darkgreen') within 25% fuzz factor.

    如果您希望输出 NOT 将原始图像显示为苍白背景,请将-compose src添加到您的命令中:

    compare                              \
     -size 600x600                       \
     -fuzz 70%                           \
      http://i.stack.imgur.com/kqMtt.png \
      xc:'#ff9bff'                       \
     -compose src                        \
      output-4.png    
    

    Side by side comparison of original image with resulting image. The original image serves no longer as the pale background picture. Red pixels show up where the original image is not 'light-pink' (or IS 'darkgreen') within 25% fuzz factor. White pixels are the ones which were non-greenish in the original image.

    您还可以将突出显示“delta”像素的红色更改为其他颜色。使用黑色:

    compare                              \
     -highlight-color black              \
     -size 600x600                       \
     -fuzz 60%                           \
      http://i.stack.imgur.com/kqMtt.png \
      xc:'#ff9bff'                       \
     -compose src                        \
      output-5.png    
    

    您现在可以将最后一个命令的结果用作“掩码”。将该蒙版叠加到原始图像上,然后以一种方式构图,使结果中出现图像的“仅树”部分,从而消除所有其他部分。