常用植被指数有哪些?NDVI该怎么计算?
“常用植被指数有哪些?NDVI该怎么计算?”是遥感与GIS入门中非常高频的问题。很多同学拿到多光谱影像后,知道要做植被覆盖分析、作物长势监测或生态评价,但不确定该选哪个植被指数,也不清楚NDVI计算时应该用哪两个波段、结果为什么会出现异常值。
本文以GIS实际工作流为主线,整理常用植被指数的适用场景,并重点讲清楚NDVI计算公式、波段选择、QGIS和ArcGIS Pro中的操作方法,以及计算结果检查要点。

引言:常用植被指数有哪些,为什么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。
- 打开QGIS,将红光波段和近红外波段加载到图层面板。
- 确认两个波段的坐标系、分辨率和范围基本一致。
- 进入“栅格”菜单,打开“栅格计算器”。
- 输入表达式:
("B8@1" - "B4@1") / ("B8@1" + "B4@1") - 设置输出路径,建议保存为GeoTIFF格式。
- 运行后加载结果,设置单波段伪彩色渲染,范围可设为-1到1。
如果影像像元值是整数,部分软件环境中需要注意浮点计算。可以把表达式写成:
1.0 * ("B8@1" - "B4@1") / ("B8@1" + "B4@1")
这样可以减少整数除法或数据类型带来的异常风险。计算完成后,建议查看NDVI栅格的最小值、最大值和直方图,判断是否存在大量超出-1到1的异常值。
步骤四:在ArcGIS Pro中计算NDVI
ArcGIS Pro中可以使用“栅格计算器”或影像分析相关工具计算NDVI。典型流程如下:
- 将多光谱影像或单独波段添加到地图中。
- 确认红光波段和近红外波段对应关系。
- 打开“地理处理”面板,搜索“栅格计算器”。
- 输入表达式,例如Landsat 8/9:
Float("Band5" - "Band4") / Float("Band5" + "Band4") - 设置输出栅格路径,运行工具。
- 对结果图层设置拉伸或分类渲染,并检查统计信息。
如果使用的是多波段栅格,也可以通过波段索引或函数模板处理。关键仍然是确认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等其他常用植被指数。