2014-12-06 171 views
20

我試圖找到大約樹木覆蓋的區域給予靜態地圖圖像(左圖像)。如何使用圖像處理識別Google地圖圖像中的樹木?

我想到的方法是先對像素進行逐像素分析,找出「綠色」像素(使用HSV顏色方案提取色調值)。

我意識到在黎明或黃昏拍攝的一些圖像中,樹木實際上可能沒有任何綠色,並且可能只是呈現深灰色/黑色。而那些在中午期間拍攝,顯得明亮green.So我試着用圖片門檻,拿到像樣的成績(右圖像):

但我還是不滿意建築物的陰影,或者黑暗的物體可能會給我帶來誤報。

我想使用Stack Overflow中的一些開發人員的經驗,並建議哪種圖像處理工具和方法能夠在這種情況下給我最好的結果?

+0

更復雜的方法傾向於使用生物量強烈放射的紅外通道 - 谷歌歸一化植被指數(歸一化差異植被指數),但遺憾的是,您沒有這些數據。另一個選項是紋理分析。 – 2014-12-06 12:49:03

+0

@MarkSetchell:是否有免費在線提供的高質量紅外線地圖?然後,我可以將Google地圖全部棄用。 – 2014-12-06 15:24:29

+2

谷歌地圖引擎支持樹過濾(我記得)。 – wf9a5m75 2014-12-09 07:56:01

回答

17

-threshold Y%的問題是這樣的:它會翻譯所有像素,它們都是黑色的黑色!

如果圖像中有其他深色(深褐色,深藍色,深紅色,深灰色或黑色),則會錯誤地將其識別爲「木材」。

如果我正確理解你,你只是在尋找那些像素爲綠色或深綠色的像素。

爲此我建議基準自己用下面的命令的一些變種的方法:

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

而是「深綠」,你可以使用「#006400」各自的顏色值,它是相同的:

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

上面compare命令創建從兩個輸入圖像的output-1.png具有以下特徵:

  1. 原始圖像的比較是針對動態創建的(xc:)600x600像素的均勻顏色「深綠色」色塊進行的;
  2. 輸出將原始圖像顯示爲淺色背景;
  3. 輸出顯示紅色像素,其中原始圖像的相應像素在考慮到30%的「模糊因子」之後與顏色值「深綠色」不同(其中'0%'將意味着精確匹配顏色值);
  4. 輸出顯示白色/半透明像素,其中原始圖像的各個像素與顏色'深綠色'相似(在30%的模糊係數內)。

下面是結果在側方比較:

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.

當然你也可以用模糊因數發揮以及與「深綠」的確切定義顏色值。下面是-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.

如果你想比較,以顯示顏色逆(顯示紅色的像素在原始圖像已綠的顏色,透明/白色是把像素非綠色)中,使用「深綠色」的反轉顏色作爲比較補丁(這是某種粉紅色,順便說一句),和不同的模糊因數:

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.

如果你想輸出到顯示原始圖像作爲淡的背景下,再加入-compose src到您的命令(S):

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  

您現在可以使用最後一條命令的結果作爲「掩碼」。將遮罩覆蓋到原始圖像上,並以使圖像在結果中僅顯示「僅樹」部分的方式進行組合,從而除去所有其他部分。

+0

感謝您發表這樣一個詳細的答案!我正計劃使用Image Magick來完成上述任務。你能告訴我你用哪種工具/語言編寫上面的代碼嗎? – 2014-12-11 20:16:55

+0

@ user3210476:上面的代碼沒有特殊的「語言」。我只使用了ImageMagick命令行工具'compare',以及一些可用的選項。這個命令可以在Mac OSX的'Terminal.app'裏面運行,在Linux或Unix上的任何終端應用程序裏面,在Windows上的DOS窗口裏('cmd.exe')裏面運行.... – 2014-12-11 20:33:42

+0

我打算給你不僅僅是一個贊成,呵呵!我想我找到了我正在尋找的工具,感謝您的回答。 [paintopaqueimage](http://php.net/manual/en/imagick.paintopaqueimage.php)Image Magick PHP – 2014-12-11 20:42:28