我试图在给定静态地图图像(左图像)的情况下找到大约树木覆盖的区域。
我想到的方法包括对图像进行逐像素分析,最初找出“更绿”的像素(使用HSV颜色方案提取色调值)。
我意识到在黎明或黄昏拍摄的一些照片中,树木实际上可能没有任何绿色,并且可能只是出现深灰色/黑色。而在中午拍摄的那些,显得亮绿色。所以我尝试使用图像阈值并得到了不错的结果(右图像):
但是我仍然不满意建筑物的阴影,或者黑暗的物体可能会给我误报。
我想在Stack Overflow上使用一些开发人员的经验,并建议在这种情况下哪种图像处理工具和方法会给我最好的结果?
答案 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
,具有以下特征:
xc:
)600x600像素的均匀颜色'darkgreen'补丁; 以下是并排比较的结果:
您当然可以使用模糊因子以及'darkgreen'颜色值的确切定义。以下是-fuzz 25%
的结果:
如果您希望比较显示反色(红色像素显示原始图像具有绿色,透明/白色是像素为非绿色),请使用“darkgreen”的反色作为比较色块(这是某种粉红色,BTW),以及不同的模糊因素:
compare \
-size 600x600 \
-fuzz 70% \
http://i.stack.imgur.com/kqMtt.png \
xc:'#ff9bff' \
output-3.png
结果现在是:
如果您希望输出 NOT 将原始图像显示为苍白背景,请将-compose src
添加到您的命令中:
compare \
-size 600x600 \
-fuzz 70% \
http://i.stack.imgur.com/kqMtt.png \
xc:'#ff9bff' \
-compose src \
output-4.png
您还可以将突出显示“delta”像素的红色更改为其他颜色。使用黑色:
compare \
-highlight-color black \
-size 600x600 \
-fuzz 60% \
http://i.stack.imgur.com/kqMtt.png \
xc:'#ff9bff' \
-compose src \
output-5.png
您现在可以将最后一个命令的结果用作“掩码”。将该蒙版叠加到原始图像上,然后以一种方式构图,使结果中出现图像的“仅树”部分,从而消除所有其他部分。