2010年11月12日 星期五

利用ArcGIS Model Builder建立差異化植生指數(NDVI)模組

差異化植生指數(Normalized Difference Vegetation Index;NDVI)是一個常見的環境因子,利用多光譜之衛星影像用來評估地表上的植生覆蓋情形,用來計算植物生長與生產力,另外也常被用來應用在崩塌地判釋或土壤沖蝕量估算或是土地利用變化之監測,原理是利用植生在不同波段之反射率的差異,將此差異標準化,如圖A所示,植生(綠線)在近紅外光段反射率約50%;而在紅光段的反射率卻只有10%左右。


圖 A 土壤、水和植生的典型光譜反射曲線
利用上述之特性,NDVI方程式表為:  NDVI = (NIR – RED) / (NIR + RED) ,其中NIR為光譜近紅外光段;RED為光譜紅光段,計算的值範圍會在 -1 至 1 之間。
然而,在ArcMap的模組之中,居然沒有內建NDVI的模組,因此必須自己藉由Raster Calculator計算,但我們也可以利用model builder把它寫一個模組,方便以後使用。
1.首先先在Toolbox上面按右鍵,NewToolbox,新增一個toolbox,並幫他取個名。
image

在把你的設定值儲存為預設值,那麼以後開啟ArcMap就會自動載入你的Toolbox
image

在你的Toolbox上面按右鍵,新增一個Model。
image

視窗會自動跑出空白的model builder的畫面,這時候我們就可以開始製作NDVI模組。
image

2.模式的建立
NDVI的計算方程式非常簡單,需要加、減、除法,因此開啟Toolbox > Spatial Analyst Tools > Math ,包括 加 (plus)、減 (minus)、除 (divide)法 。直接用拖拉的方式,把minus, plus, divde拖進model的視窗中,長方形的方框代表運算,方框右邊的圓圈代表輸出物件。
利用右上方倒數第二個工具add connection,把minus和plus的output連結到 Divide,這裡要注意的是,必須要先連minus的輸出,之後再連plus的輸出,因為先連上到Divide會被當成被除數(分子),後連則為除數(分母),代表minus和plus的輸出匯入作為Divide的輸入值。
image

如果不確定是否正確,可以把Divide點開,確認兩個input是否正確
image

這時要增加模式的輸入的圖層,在minus按右鍵 > Make Variable > From Parameter > Input raster or Constant value 1 & 2。
image

並且把input 1 改名為近紅外光,input 2 改為紅光(必須注意順序,因為input 1預設為被減數),Divide,。
image

這時候再用add connection把近紅外光和紅光連到plus。
image

3.設定變數
NDVI需要輸入兩個參數,分別是影像的近紅外光和紅光段,一個輸出當然就是計算的結果,所以我們在近紅外光和紅光段別按右鍵選Model Parameter,將這個物件指定為模式參數(輸入值),在右鍵divide的輸出檔按右鍵,選Model Parameter,將這個物件指定為模式參數(輸出值),另外也點選add to display,代表模式計算完成後,會把這個輸出檔自動新增到 ArcMap之中,當物件被指定為模式參數時,在右上角會跑出一個P。
image

如果你手邊剛好有衛星影的話,可以開啟近紅外光、紅光與NDVI輸出檔,指定其檔案路徑(若沒有影像的話,此步驟可以忽略),當檔案路徑指定之後,原本白色的圖形都會出現顏色,藍色代表輸入檔(input)、黃色代表計算元件、綠色表示輸出檔(output),記得要存檔。
image

這樣看起來好像已經大功告成了,但是實際計算的話會出現問題,因為衛星影像的光段的值是從0-255的整數 (integer),如果整數和整數計算的輸出值也會是整數,但是 NDVI範圍為 -1 至 1 之間,因此必須要將數值轉換為浮點數(float),在math之中找到float的功能拖進去,model之中後,重新連結,如下圖,這時候存檔關閉模式就大功告成了。
image
這時候你就可以開始使用你的NDVI模組。
image
P.S. 事實上,以上NDVI模式建構方法的主要是想要介紹Model Builder的建置方法,但是實際操作上,完全用model builder建構NDVI模組是比較沒有效率的方法,另外一個比較好的方法是利用Spatial Analyst Tools > Math Albegra > Single Output Map Algebra,直接使用這個tool計算NDVI,如下圖,先把Single Output Map Algebra 拖入model builder,開啟Single Output Map Algebra ,把計算之方程式key入Map Algebra expression。
image
然後分別把NIR與R連線至Single Output Map Algebra ,並且設定model parameter,大功告成,模式看起來更簡潔。
image

根據實際測試用石門水庫集水區之兩期影像的NDVI計算,原本model builder計算需要136秒,而利用Single Output Map Algebra 僅需59秒,速度增加約130%。因此在處理大量之網格資料計算時,採用Single Output Map Algebra是比較好的方法。