常用植被指数有哪些?NDVI该怎么计算?

GIS基础理论
Dr.GIS
wowwwai GIS研习社 · 工具流程与项目排障

“常用植被指数有哪些?NDVI该怎么计算?”是遥感与GIS入门中非常高频的问题。很多同学拿到多光谱影像后,知道要做植被覆盖分析、作物长势监测或生态评价,但不确定该选哪个植被指数,也不清楚NDVI计算时应该用哪两个波段、结果为什么会出现异常值。

本文以GIS实际工作流为主线,整理常用植被指数的适用场景,并重点讲清楚NDVI计算公式、波段选择、QGIS和ArcGIS Pro中的操作方法,以及计算结果检查要点。

常用植被指数有哪些 NDVI计算公式与红光近红外波段示意图
NDVI通常由近红外波段和红光波段计算得到,适合快速判断植被覆盖和长势差异。

引言:常用植被指数有哪些,为什么NDVI最常用

植被指数是利用遥感影像不同波段的反射差异,突出植被信息的一类计算指标。它的核心作用不是“让图像变绿”,而是把植被、水体、裸地、建筑等地物在光谱上的差异转化为更容易分析的数值。

在常用植被指数中,NDVI使用最广,因为它计算简单、解释直观、资料丰富,几乎所有主流遥感软件和GIS软件都支持。对于初学者来说,先掌握NDVI该怎么计算,再理解EVI、SAVI、NDWI等指数的适用场景,是比较稳妥的学习路径。

背景:植被指数通常解决哪些GIS问题

在GIS和遥感项目中,植被指数常用于以下任务:

  • 快速提取或评估区域植被覆盖情况。
  • 比较不同时期作物长势变化。
  • 识别城市绿地、林地、草地等生态空间。
  • 辅助判断干旱、退化、病虫害等异常区域。
  • 作为土地利用分类、生态质量评价或空间统计分析的输入变量。

需要注意的是,植被指数不是万能分类器。它可以增强植被信号,但不能单独解决所有地物识别问题。例如,水体阴影、深色屋顶、湿润裸土和稀疏植被在某些影像中可能出现混淆,因此计算后还需要结合影像目视判读、阈值检查和样本验证。

原理:NDVI计算公式和数值含义

NDVI的全称是归一化植被指数,英文为Normalized Difference Vegetation Index。它利用健康植被在近红外波段反射较强、在红光波段吸收较强的特征来突出植被信息。

NDVI = (NIR - Red) / (NIR + Red)

其中,NIR表示近红外波段,Red表示红光波段。NDVI理论范围通常在-1到1之间。

NDVI范围 常见含义 解释建议
小于0 水体、云影、阴影、部分建筑 通常不是健康植被,需要结合影像判断
0到0.2 裸地、建设用地、稀疏植被 不同地区阈值差异较大,不建议机械套用
0.2到0.5 草地、农田、稀疏到中等植被 适合做相对比较
大于0.5 较茂盛植被 林地、旺盛农作物常见较高值

NDVI计算最关键的地方是波段不能选错。如果红光波段和近红外波段选反,结果会变成相反趋势;如果使用的是经过拉伸显示的影像值,而不是原始反射率或DN值,也可能导致结果难以解释。

步骤:NDVI该怎么计算

步骤一:确认影像传感器和波段编号

计算NDVI之前,先确认影像来自哪个传感器。不同卫星的红光波段和近红外波段编号不同,不能凭感觉选择。

数据源 红光波段 Red 近红外波段 NIR NDVI表达式示例
Landsat 8/9 OLI Band 4 Band 5 (B5 – B4) / (B5 + B4)
Landsat 5/7 Band 3 Band 4 (B4 – B3) / (B4 + B3)
Sentinel-2 MSI Band 4 Band 8 (B8 – B4) / (B8 + B4)
MODIS常见产品 Red相关波段 NIR相关波段 以产品说明为准

如果你使用的是国产高分影像、无人机多光谱影像或商业影像,需要查看数据说明文档中的波段定义。不要只看文件名中的“B1、B2、B3”,因为不同产品的命名规则可能不同。

步骤二:检查影像是否已经预处理

NDVI可以用DN值、辐射亮度或地表反射率计算,但不同处理级别的结果可比性不同。用于同一景影像内部观察时,DN值有时也能反映大致趋势;用于多时相、多区域比较时,建议使用经过大气校正的地表反射率产品。

  • 单景影像快速查看:可先用原始波段试算,但结果只适合初步判断。
  • 多时相长势对比:优先使用地表反射率数据。
  • 跨区域生态评价:需要关注大气校正、云掩膜、地形阴影和传感器差异。
  • 论文或正式报告:应说明数据来源、处理级别、波段选择和计算公式。

步骤三:在QGIS中计算NDVI

QGIS计算NDVI通常使用“栅格计算器”。下面以Sentinel-2为例,假设红光波段为B4,近红外波段为B8。

  1. 打开QGIS,将红光波段和近红外波段加载到图层面板。
  2. 确认两个波段的坐标系、分辨率和范围基本一致。
  3. 进入“栅格”菜单,打开“栅格计算器”。
  4. 输入表达式:("B8@1" - "B4@1") / ("B8@1" + "B4@1")
  5. 设置输出路径,建议保存为GeoTIFF格式。
  6. 运行后加载结果,设置单波段伪彩色渲染,范围可设为-1到1。

如果影像像元值是整数,部分软件环境中需要注意浮点计算。可以把表达式写成:

1.0 * ("B8@1" - "B4@1") / ("B8@1" + "B4@1")

这样可以减少整数除法或数据类型带来的异常风险。计算完成后,建议查看NDVI栅格的最小值、最大值和直方图,判断是否存在大量超出-1到1的异常值。

步骤四:在ArcGIS Pro中计算NDVI

ArcGIS Pro中可以使用“栅格计算器”或影像分析相关工具计算NDVI。典型流程如下:

  1. 将多光谱影像或单独波段添加到地图中。
  2. 确认红光波段和近红外波段对应关系。
  3. 打开“地理处理”面板,搜索“栅格计算器”。
  4. 输入表达式,例如Landsat 8/9:Float("Band5" - "Band4") / Float("Band5" + "Band4")
  5. 设置输出栅格路径,运行工具。
  6. 对结果图层设置拉伸或分类渲染,并检查统计信息。

如果使用的是多波段栅格,也可以通过波段索引或函数模板处理。关键仍然是确认Band 4和Band 5的含义,而不是只看图层顺序。

步骤五:用Python批量计算NDVI

如果需要批量处理多景影像,可以使用Python和Rasterio。下面示例适合两个已经对齐的单波段GeoTIFF输入。

import numpy as np
import rasterio

red_path = "red.tif"
nir_path = "nir.tif"
out_path = "ndvi.tif"

with rasterio.open(red_path) as red_src, rasterio.open(nir_path) as nir_src:
    red = red_src.read(1).astype("float32")
    nir = nir_src.read(1).astype("float32")

    profile = red_src.profile
    profile.update(dtype=rasterio.float32, count=1, nodata=-9999)

    denominator = nir + red
    ndvi = np.where(denominator == 0, -9999, (nir - red) / denominator)
    ndvi = np.where(np.isfinite(ndvi), ndvi, -9999).astype("float32")

with rasterio.open(out_path, "w", **profile) as dst:
    dst.write(ndvi, 1)

这段代码的重点是处理分母为0和无效值。如果不处理,输出结果中可能出现无穷大、NaN或极端异常值,后续在QGIS、ArcGIS Pro中显示时就会出现拉伸异常。

常见坑:NDVI计算结果不对通常有哪些原因

红光和近红外波段选错

这是最常见问题。NDVI计算必须使用近红外和红光。如果把绿光当成红光,或把短波红外当成近红外,结果仍然会生成一个栅格,但数值意义已经不是标准NDVI。

没有处理云、云影和水体

云、云影、水体会显著影响NDVI。特别是在做区域均值统计时,如果不先进行云掩膜,统计结果可能被严重拉低。正式分析中应优先使用质量波段、云掩膜产品或人工检查方法排除异常区域。

不同日期影像直接比较

多时相NDVI对比时,要注意季节、物候、太阳高度角、大气条件和传感器差异。比如春季和夏季的NDVI差异,可能主要来自植被生长阶段,而不是生态质量变化。

影像分辨率不一致

Sentinel-2中部分波段分辨率不同。计算NDVI时,红光B4和近红外B8通常都是10米,比较方便。但如果计算其他植被指数涉及20米波段,就需要重采样。重采样方法会影响边界区域的结果。

把显示拉伸后的颜色当成真实数值

NDVI图层显示得很绿,不代表数值一定高。颜色渲染只是可视化方式,真正判断结果要看像元值、统计信息和直方图。

方法比较:常用植被指数有哪些

常用植被指数并不只有NDVI。不同指数适合不同问题。下面是GIS项目中经常遇到的几类。

植被指数 公式或思路 适用场景 注意事项
NDVI (NIR – Red) / (NIR + Red) 植被覆盖、长势监测、生态评价入门 高覆盖植被区可能饱和
EVI 增强型植被指数,引入蓝光修正 高植被覆盖区、热带森林、作物旺长期 需要蓝光波段,参数和数据质量要求更高
SAVI 土壤调节植被指数 稀疏植被、裸土背景明显区域 需要设置土壤调节因子
GNDVI 使用绿光和近红外 作物氮素、叶绿素相关分析的辅助指标 解释时应结合农学背景
NDRE 使用红边和近红外 无人机多光谱、作物长势精细监测 需要红边波段,并非所有卫星都有
NDWI 与水分或水体相关的归一化指数 植被水分、水体提取等相关分析 不同NDWI定义使用波段不同,要先确认公式

如果只是要快速回答“某区域植被覆盖大概如何”,NDVI通常足够。如果研究区是干旱半干旱地区,裸土影响明显,可以考虑SAVI。如果研究区植被非常茂密,NDVI容易饱和,可以尝试EVI。如果使用无人机多光谱影像且有红边波段,NDRE往往更适合作物长势精细分析。

检查清单:计算NDVI前后应该核对什么

  • 确认数据源:影像来自Landsat、Sentinel-2、无人机还是其他传感器。
  • 确认波段:红光和近红外波段编号是否正确。
  • 确认处理级别:是否为地表反射率,是否需要大气校正。
  • 确认空间一致:两个波段的坐标系、分辨率、范围是否一致。
  • 确认无效值:NoData、云、云影、水体是否已经处理或记录。
  • 确认表达式:是否写成(NIR - Red) / (NIR + Red),而不是反过来。
  • 确认输出类型:输出是否为浮点型,避免整数计算造成结果异常。
  • 确认数值范围:大多数有效NDVI应在-1到1之间。
  • 确认统计结果:查看最小值、最大值、均值和直方图。
  • 确认解释边界:不要只凭一个固定阈值解释所有地区。

实务建议:NDVI适合做“相对比较”和“快速诊断”,但正式结论最好结合样本点、土地利用数据、现场情况或更完整的遥感分类流程。

FAQ:常用植被指数和NDVI计算问题

NDVI越高一定代表植被越好吗?

不一定。NDVI越高通常说明植被信号越强,但它不等于植被质量、产量或生态健康的完整评价。不同植被类型、季节、土壤背景和影像条件都会影响NDVI。

NDVI计算为什么会出现大于1或小于-1的值?

常见原因包括波段值存在异常、NoData没有处理、分母接近0、输入数据不是可直接计算的反射率或DN值,以及计算过程中数据类型设置不当。应先检查原始波段统计值和NoData设置。

Sentinel-2计算NDVI用B8还是B8A?

常规NDVI一般使用B8作为近红外波段,因为B8是10米分辨率,和红光B4匹配方便。B8A是窄近红外波段,分辨率通常为20米,在某些特定指数或红边分析中会用到。使用前要确认公式和分辨率处理方式。

Landsat 8的NDVI公式是什么?

Landsat 8/9 OLI常用公式是(Band 5 - Band 4) / (Band 5 + Band 4),其中Band 5是近红外,Band 4是红光。不要套用Landsat 5/7的波段编号。

NDVI可以直接用于提取植被范围吗?

可以作为初步方法,但阈值需要根据研究区调整。例如某些地区NDVI大于0.2可以粗略表示植被,但在城市、农田、湿地或干旱区,阈值可能明显不同。更可靠的方法是结合样本、分类算法和人工验证。

常用植被指数有哪些适合初学者优先掌握?

建议先掌握NDVI,再了解SAVI、EVI、GNDVI、NDRE和NDWI。NDVI用于基础植被覆盖分析,SAVI适合裸土背景明显区域,EVI适合高覆盖植被区,GNDVI和NDRE更常用于作物长势和精细农业分析。

结论:先把NDVI算准,再选择更合适的植被指数

回答“常用植被指数有哪些?NDVI该怎么计算?”这个问题,最关键不是背公式,而是理解每个指数依赖的波段和适用场景。NDVI的标准公式是(NIR - Red) / (NIR + Red),计算前必须确认红光和近红外波段,计算后要检查数值范围、异常值和空间分布。

对于大多数GIS入门分析,NDVI已经可以完成植被覆盖判断、长势对比和生态分析的基础工作。只有当研究区存在高植被饱和、裸土背景明显、作物精细监测或水分分析需求时,才需要进一步选择EVI、SAVI、NDRE、GNDVI等其他常用植被指数。