NDWI水体指数公式是?阈值该如何设定?
“NDWI水体指数公式是?阈值该如何设定?”是遥感水体提取中最常见的问题之一。很多同学在 QGIS、ArcGIS Pro 或 Python 里算出了 NDWI,却发现河流断断续续、阴影被误判成水体、城市屋顶也被提取出来。问题通常不在公式本身,而在波段选择、影像预处理和阈值设定方法。

引言:NDWI水体指数适合解决什么问题
NDWI水体指数主要用于从多光谱遥感影像中增强水体信息,并把水体与植被、裸地、建设用地等地物区分开。它常用于湖泊边界提取、河道识别、水库面积统计、洪水淹没范围分析和湿地监测。
但需要先说明一点:NDWI不是“万能水体提取按钮”。它更像一个增强工具,能让水体在指数影像中更容易被识别。真正得到可用水体边界,还需要根据影像类型、研究区地物、季节和水体浑浊程度合理设定阈值。
背景:为什么同一个NDWI阈值不能到处套用
很多教程会直接写“NDWI大于0为水体”。这个经验在部分场景中有效,但不能无条件套用。
原因很简单:NDWI值受到多个因素影响,包括传感器类型、影像是否做过大气校正、水体是否浑浊、岸线是否混合像元、城市阴影是否明显、云和云影是否被掩膜,以及研究区是否存在湿地、稻田、暗色屋顶等容易混淆的地物。
例如,在清澈湖泊区域,水体NDWI可能明显大于0;在泥沙含量高的河流中,水体反射特征会改变,NDWI可能接近0甚至偏低;在城市地区,建筑阴影和山体阴影有时也会表现出类似水体的低反射特征,导致误提取。
原理:NDWI水体指数公式是什么
最常用的 NDWI 水体指数由 McFeeters 提出,公式如下:
NDWI = (Green - NIR) / (Green + NIR)
其中,Green 表示绿光波段,NIR 表示近红外波段。水体通常在绿光波段有一定反射,而在近红外波段反射很弱,因此 NDWI 计算后水体往往表现为较高值。
对于常见卫星影像,波段对应关系可以参考下表:
| 数据源 | Green绿光波段 | NIR近红外波段 | NDWI公式示例 |
|---|---|---|---|
| Landsat 8/9 OLI | Band 3 | Band 5 | (B3 – B5) / (B3 + B5) |
| Landsat 5/7 TM/ETM+ | Band 2 | Band 4 | (B2 – B4) / (B2 + B4) |
| Sentinel-2 MSI | Band 3 | Band 8 | (B3 – B8) / (B3 + B8) |
| 高分系列影像 | 需查看传感器说明 | 需查看传感器说明 | 按绿光与近红外波段代入 |
NDWI理论取值范围一般在 -1 到 1 之间。数值越高,越可能是水体;数值越低,通常越可能是植被、裸地或建筑用地。但在实际影像中,阈值需要结合直方图、样本点和目视检查确定。
步骤:在GIS软件中计算NDWI并设定阈值
步骤1:确认影像波段和预处理状态
计算 NDWI水体指数 前,先确认影像是否满足基本条件:
- 影像必须包含绿光波段和近红外波段。
- 尽量使用地表反射率产品,而不是未经校正的原始DN值。
- 如果有云、云影、积雪,应先做掩膜处理。
- 不同分辨率波段参与计算时,应先统一空间分辨率。
- 确认研究区范围,不要把大量无关区域一起参与阈值判断。
如果使用 Sentinel-2,常见组合是 B3 和 B8。若使用 Landsat 8 或 Landsat 9,常见组合是 B3 和 B5。
步骤2:在QGIS中计算NDWI
在 QGIS 中可以使用“栅格计算器”完成 NDWI 计算。基本流程如下:
- 加载包含绿光和近红外波段的多光谱影像。
- 打开“栅格”菜单中的“栅格计算器”。
- 输入 NDWI 公式。
- 设置输出路径和输出格式,建议使用 GeoTIFF。
- 运行后加载结果栅格,并调整渲染方式查看水体高值区域。
以 Sentinel-2 为例,如果绿光波段文件是 B3,近红外波段文件是 B8,公式可写为:
("B3@1" - "B8@1") / ("B3@1" + "B8@1")
以 Landsat 8 为例,公式可写为:
("B3@1" - "B5@1") / ("B3@1" + "B5@1")
计算完成后,不要急着二值化。建议先查看 NDWI 栅格的统计值和直方图,观察水体与非水体是否有明显分界。
步骤3:在ArcGIS Pro中计算NDWI
在 ArcGIS Pro 中,可以使用 Raster Calculator 或栅格函数计算 NDWI。流程如下:
- 加载影像波段或多波段影像。
- 打开 Spatial Analyst 工具中的 Raster Calculator。
- 输入 Green 和 NIR 波段对应的表达式。
- 输出 NDWI 栅格。
- 使用重分类、栅格计算器或条件函数提取水体。
示例表达式如下:
(Float("Green") - Float("NIR")) / (Float("Green") + Float("NIR"))
这里使用 Float 是为了避免整数运算导致结果异常。对于 NDWI 这类归一化指数,输出应为浮点型栅格。
步骤4:初步设定NDWI阈值
NDWI阈值没有唯一标准,但可以按以下顺序判断:
- 先从 0 作为初始阈值测试。
- 查看 NDWI > 0 的区域是否基本覆盖水体。
- 如果漏掉大量浑浊水体,可尝试降低到 -0.05 或 -0.1。
- 如果阴影、暗色建筑被误提取,可尝试提高到 0.1、0.2 或结合其他指数过滤。
- 对比原始真彩色或假彩色影像,检查边界是否合理。
常见的二值化表达式如下:
NDWI > 0
如果需要在 QGIS 栅格计算器中输出水体二值栅格,可以写成:
"NDWI@1" > 0
结果通常为 1 表示满足条件,0 表示不满足条件。之后可以将 1 值区域转换为矢量面,用于面积统计或制图。
步骤5:用直方图和样本点优化阈值
更稳妥的 NDWI阈值设定 方法是结合样本点和直方图,而不是只凭一个经验数值。
- 在原始影像上人工选择若干水体样本点,包括深水、浅水、浑浊水体和岸边水体。
- 选择若干非水体样本点,包括植被、裸地、建筑阴影、道路和农田。
- 提取这些样本点对应的 NDWI 值。
- 比较水体与非水体的数值范围。
- 选择能最大程度区分两类样本的阈值。
如果水体样本大多集中在 0.12 到 0.65,非水体大多小于 0.05,那么阈值可以考虑设为 0.08 或 0.1。若两类样本重叠严重,说明单独使用 NDWI 不够稳定,需要加入其他方法。
步骤6:提取水体边界并计算面积
得到二值水体栅格后,可以继续做后处理:
- 去除很小的孤立斑块,减少噪声。
- 填补水体内部小空洞。
- 将二值栅格转换为矢量面。
- 检查矢量边界是否过度破碎。
- 在投影坐标系下计算面积,避免使用经纬度坐标直接算平方米。
如果目标是统计湖泊、水库或洪水面积,建议先将结果投影到合适的等面积投影或当地常用投影坐标系,再进行面积计算。
常见坑:NDWI计算和阈值设定容易出错的地方
1. 把波段选错
NDWI水体指数公式使用的是 Green 和 NIR。如果把红光、短波红外或其他波段误当成近红外,结果会完全不同。尤其是不同卫星的波段编号不一样,不能只凭“第几波段”套公式。
2. 用原始DN值直接跨影像比较
同一地区不同日期、不同传感器的原始DN值不一定可比。如果要做时间序列水体变化分析,建议使用经过辐射定标和大气校正的地表反射率数据。
3. 忽略云影和山体阴影
云影、山体阴影、建筑阴影都可能被 NDWI 误判为水体。城市地区和山区尤其需要先做阴影检查,必要时结合 DEM、云掩膜或其他指数过滤。
4. 阈值只看一个局部区域
如果只在一个湖泊附近调阈值,应用到整个研究区时可能失效。较大的研究区通常包含多种地表类型,建议分区检查阈值效果。
5. 岸线混合像元导致边界偏移
遥感影像的一个像元可能同时包含水体和陆地,这就是混合像元。水岸交界处最容易出现这种情况,因此提取出的水体边界可能比真实岸线略有偏移。
6. 将NDWI和MNDWI混为一谈
NDWI常用 Green 和 NIR,MNDWI常用 Green 和 SWIR。MNDWI在城市水体提取中经常更有优势,因为它对建筑用地的抑制效果更明显。两者公式不同,阈值也不能直接通用。
方法比较:NDWI、MNDWI和监督分类怎么选
| 方法 | 适用场景 | 优点 | 局限 |
|---|---|---|---|
| NDWI | 湖泊、河流、水库等常规水体提取 | 公式简单,计算快,易解释 | 容易受阴影、建筑和浑浊水体影响 |
| MNDWI | 城市水体、建设用地较多区域 | 对建筑背景抑制更好 | 需要短波红外波段,部分数据不具备 |
| NDVI辅助过滤 | 水体与植被混淆区域 | 可减少植被误判 | 仍需设定多个阈值 |
| 监督分类 | 地物复杂、样本充足区域 | 可综合多个波段和特征 | 需要训练样本,流程更复杂 |
| 面向对象分类 | 高分辨率影像水体提取 | 能利用形状、纹理和邻域信息 | 参数较多,迁移性较差 |
如果研究区是自然湖泊或河流,NDWI通常可以作为第一选择。如果研究区位于城市内部,建议优先测试 MNDWI,或把 NDWI 与建筑阴影过滤方法结合使用。如果要做高精度制图,单一指数往往不够,需要样本分类和人工校核。
检查清单:发布结果前请逐项确认
- 公式是否正确:确认使用的是 Green 和 NIR,并且顺序为 Green – NIR。
- 波段是否对应:不同传感器波段编号不同,必须查清楚再计算。
- 数据是否校正:多期对比尽量使用地表反射率产品。
- 云影是否处理:云、云影、山体阴影会明显影响阈值。
- 阈值是否验证:不要只用默认0,至少结合原始影像和样本点检查。
- 误提区域是否排查:重点查看阴影、暗色屋顶、湿地、稻田和裸地。
- 面积计算是否投影:面积统计前应使用合适的投影坐标系。
- 边界是否后处理:必要时去除小斑块、填洞和平滑边界。
FAQ:NDWI水体指数公式和阈值常见问题
1. NDWI水体指数公式到底是哪一个?
常用 NDWI水体指数公式 是:
NDWI = (Green - NIR) / (Green + NIR)
其中 Green 是绿光波段,NIR 是近红外波段。Sentinel-2 常用 B3 和 B8,Landsat 8/9 常用 B3 和 B5。
2. NDWI阈值一定是0吗?
不一定。NDWI > 0 是常见初始阈值,但不是固定标准。清澈水体可能适合较高阈值,浑浊水体或浅水区可能需要更低阈值。建议结合直方图、样本点和原始影像目视检查来确定。
3. 为什么NDWI提取出来的水体有很多阴影?
因为阴影区域整体反射率低,在某些影像中可能与水体表现相似。可以通过云影掩膜、DEM地形阴影分析、MNDWI、NDVI辅助过滤或人工校核减少误判。
4. Sentinel-2计算NDWI应该用哪个波段?
Sentinel-2常用 B3 作为绿光波段,B8 作为近红外波段,公式为:
NDWI = (B3 - B8) / (B3 + B8)
如果使用不同处理级别或重采样后的数据,要确认波段分辨率和空间对齐情况。
5. Landsat 8计算NDWI应该用哪个波段?
Landsat 8 和 Landsat 9 OLI 常用 Band 3 作为绿光波段,Band 5 作为近红外波段,公式为:
NDWI = (B3 - B5) / (B3 + B5)
如果使用的是 Landsat 5 或 Landsat 7,常见组合是 Band 2 和 Band 4。
6. NDWI和MNDWI有什么区别?
NDWI通常使用 Green 和 NIR,MNDWI通常使用 Green 和 SWIR。MNDWI在城市水体提取中常更稳,因为短波红外对建筑和裸地的区分能力更强。但前提是影像必须有 SWIR 波段。
7. NDWI结果能直接作为最终水体边界吗?
不建议直接使用。NDWI结果通常还需要阈值分割、噪声去除、空洞填补、矢量化和人工检查。对于正式成果,还应结合高分影像、实测数据或已有水系数据进行验证。
结论:NDWI阈值要从影像和场景中确定
NDWI水体指数的核心公式很简单:用绿光波段减去近红外波段,再除以二者之和。真正影响结果质量的是波段选择、影像预处理和 NDWI阈值设定。
实际工作中,可以先以 NDWI > 0 作为起点,再通过直方图、样本点和原始影像对比逐步调整。自然水体场景通常较容易,城市、山区、浑浊河流和湿地场景则需要结合 MNDWI、掩膜、分类方法或人工校核。
一句话总结:NDWI公式可以固定,阈值不能死记。把公式算对、把波段选对、把阈值验证清楚,才是可靠提取水体的关键。