單波段閾值法是經過選擇某單一波段爲判識參數,這一波段每每是水體特徵最明顯而其它地物相對不太突出的波段(如近紅外波段和中紅外波段),而後再劃定閾值來肯定水體信息。該方法主要是利用水體在近紅外和中紅外波段的強吸取特性,以及植被和土壤在這兩個波段較高的反射特性。算法
對於GF一、環境星、資源三、資源1-02C,可選近紅外波段T4(第四波段)公式爲T4<α(閾值);對於TM影像,選擇近紅外(T4)或短波紅外(T5) 。公式爲:T4<α或T5<α(閾值)ide
譜間關係法是經過利用不一樣地物的感光特性不一樣,在不一樣光譜之間創建的一系列組合運算關係來以突出目標地物、剔除非目標地物的算法。其提取水體的基本原理是利用水體在可見光和近紅外波段吸取較強而植被、土壤等地物在該波段範圍內反射極強的特色所產生的反射率差別來實現的,不一樣的數據源、不一樣的地物譜間關係式不一樣。工具
對於GF一、環境星、資源三、資源1-02C影像,可用如下公式提取:(T2+T3)-(T1+T4)>α spa
式中T一、T二、T三、T4爲第1、2、3、四波段的灰度值,α爲閾值;code
對於TM影像,可用如下判別公式:視頻
(T2+T3)-(T4+T5)>α ; blog
T4/T2 < β 教程
式中T二、T三、T四、T5爲TM影像第2、3、4、五波段的灰度值,α、β爲閾值。ci
水體指數法,目前,對水體指數構建形式有不少,但基本原理都是採用波段比值運算的方法達到突出水體、削弱非水體的目的,對於只有藍、綠、紅、近紅波段的高分1號、環境星1A/1B、資源3號、資源1號02C等,可用歸一化差別水體指數(NDWI),利用水體在綠波段和近紅波段吸取和反射的反差進行水體自動提取,公式以下:資源
NDWI=(T2–T4)/( T2+T4)
NDWI >α
式中T二、T4爲第2、四波段灰度值,α爲閾值;
對於高分一號數據,還可用高分1號水體指數(GF1_WI),利用藍波段和近紅波段吸取和反射的反差突出水體,計算公式以下:
GF1_WI=(T1–T4)/(T1+T4)
GF1_WI >α
式中T二、T4爲高分1號第1、四波段灰度值,α爲閾值;
對於有中紅外波段的TM數據,可用修正的歸一化差別水體指數(MNDWI)進行水體提取,用中紅外波段代替NDWI中的近紅外波段,進一步加大水體與其餘地物分類的差距。計算公式以下:
MNDWI=(T2–T5)/( T2+T5)
MNDWI >α
式中T二、T5爲TM影像的第2、五波段灰度值,α爲閾值。
PIE支持這3個算法的執行,下面對算法功能進行介紹。
第一步 |
算法參數設置 |
第二步 |
算法執行 |
第三步 |
結果顯示 |
算法名稱 |
水體指數法&單波段閾值法&譜間關係法 |
|
C#算法DLL |
PIE.CommonAlgo.dll |
|
C#算法名稱 |
PIE.CommonAlgo.ParaInvThresholdAlgo |
|
參數結構體 |
ParaInvThreshold_Exchange_Info |
|
參數說明 |
||
InputFilePath |
String |
輸入文件路徑 |
ListBands |
IList<int> |
波段集合 單波段閾值法集合是{4} 譜間關係集合{2,3,1,4} 水體指數{2,4} |
OutputFilePath |
string |
輸出文件路徑 |
Threshold |
double |
閾值 |
Type |
Int |
類型 0:單波段閾值法 1:譜間關係法 2:水體指數法 |
數據路徑 |
百度雲盤地址下/ PIE示例數據/柵格數據/01.GF1/洞庭湖水體/ IMG_FE233_20171219_636493846049962321.tif SHP_FE233_20171219_636493846049962321.shp |
視頻路徑 |
百度雲盤地址下/PIE視頻教程/10.算法調用/實用工具/緩衝區分析算法.avi |
示例代碼 |
|
1 /// <summary> 2 /// 水體指數法、譜間關係法、單波段閾值法 3 /// </summary> 4 public void WaterExtract_NDWI() 5 { 6 PIE.CommonAlgo.ParaInvThreshold_Exchange_Info info = new ParaInvThreshold_Exchange_Info(); 7 info.InputFilePath = @"D:\MapData\Raster\水體提取數據\WR_20171219_A0303_636493863981864520\IMG_FE233_20171219_636493846049962321.tif"; 8 info.OutputFilePath = @"D:\MapData\Raster\水體提取數據\temp\水體指數-閾值法.shp";//輸出文件路徑 9 info.ListBands = new List<int> {4};//單波段閾值法集合是{4} 譜間關係集合{2,3,1,4} 水體指數{2,4} 10 info.Threshold = 150;//閾值 根據實際算法結果來設置 水體指數法通常在0左右徘徊 11 info.Type = 0;//提取算法類型 0、單波段閾值法 一、譜間關係法 二、水體指數法 12 13 PIE.SystemAlgo.ISystemAlgo algo = PIE.SystemAlgo.AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.ParaInvThresholdAlgo"); 14 if (algo == null) return; 15 16 algo.Name = "單波段閾值法"; 17 algo.Params = info; 18 19 bool result = PIE.SystemAlgo.AlgoFactory.Instance().ExecuteAlgo(algo); 20 if (result) 21 { 22 MessageBox.Show("水體指數法執行成功"); 23 ILayer layer = LayerFactory.CreateDefaultLayer(info.OutputFilePath); 24 if (layer == null) return; 25 m_HookHelper.ActiveView.FocusMap.AddLayer(layer); 26 m_HookHelper.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll); 27 } 28 }
|
圖1:單波段閾值法結果
圖2:譜間關係法圖
圖3:水體指數法(閾值爲0.5的狀況)