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

Shu*_*dia 20 opencv google-maps colors imagemagick image-processing

给定静态地图图像(左图),我试图找到大约树木覆盖的区域.

我想到的方法涉及对图像进行逐像素分析,最初找出"更绿"的像素(使用HSV颜色方案来提取色调值).

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

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

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

Kur*_*fle 18

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

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

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

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

compare                              \
 -size 600x600                       \
 -fuzz 30%                           \
  http://i.stack.imgur.com/kqMtt.png \
  xc:'darkgreen'                     \
  output-1.png    
Run Code Online (Sandbox Code Playgroud)

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

compare                              \
 -size 600x600                       \
 -fuzz 30%                           \
  http://i.stack.imgur.com/kqMtt.png \
  xc:'#006400'                       \
  output-2.png    
Run Code Online (Sandbox Code Playgroud)

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

  1. 原始图像的比较是针对动态创建的(xc:)600x600像素的均匀颜色'darkgreen'补丁完成的;
  2. 输出显示原始图像为苍白背景;
  3. 输出显示红色像素,其中原始图像的各个像素在考虑30%的"模糊因子"(其中"0%"意味着颜色值的精确匹配)之后与颜色值'darkgreen'不同;
  4. 输出显示白色/半透明像素,其中原始图像的各个像素类似于颜色"深绿色"(在30%的模糊因子内).

以下是并排比较的结果:

原始图像与结果图像的并排比较. 原始图像用作苍白背景. 红色像素显示原始图像在30%模糊因子内不是

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

原始图像与结果图像的并排比较. 原始图像用作苍白背景. 红色像素显示原始图像在25%模糊因子内不是

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

compare                              \
 -size 600x600                       \
 -fuzz 70%                           \
  http://i.stack.imgur.com/kqMtt.png \
  xc:'#ff9bff'                     \
  output-3.png    
Run Code Online (Sandbox Code Playgroud)

结果现在是:

原始图像与结果图像的并排比较. 原始图像用作苍白背景. 红色像素显示原始图像在25%模糊因子内不是

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

compare                              \
 -size 600x600                       \
 -fuzz 70%                           \
  http://i.stack.imgur.com/kqMtt.png \
  xc:'#ff9bff'                       \
 -compose src                        \
  output-4.png    
Run Code Online (Sandbox Code Playgroud)

原始图像与结果图像的并排比较. 原始图像不再是苍白的背景图片. 红色像素显示原始图像在25%模糊因子内不是

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

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

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