单波段阈值法是经过选择某单一波段为判识参数,这一波段每每是水体特征最明显而其它地物相对不太突出的波段(如近红外波段和中红外波段),而后再划定阈值来肯定水体信息。该方法主要是利用水体在近红外和中红外波段的强吸取特性,以及植被和土壤在这两个波段较高的反射特性。算法
对于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的状况)