NDVI 是什么?含义、取值范围与 QGIS 计算方法
发布于
NDVI 是归一化植被指数(Normalized Difference Vegetation Index),一个介于 −1 到 +1 之间的数值,用来表示卫星影像上一个像素内健康绿色植被的多少。它比较地表反射回来的两种光:人眼看不见的近红外光,以及红光。NDVI = (NIR − Red) / (NIR + Red)。茂密的农作物和森林约为 0.6 到 0.9,裸土约为 0.1,水体低于 0。


NDVI 是应用最广的植被指数,因为几乎所有卫星和许多无人机相机都会记录这两种光,而且每个像素只有一个数值,便于制图和做时间对比。农户用它找出农田里长势偏弱的地块,林业人员用它跟踪干旱,规划人员用它衡量城市的绿化程度。您可以在 QGIS 中免费计算,几分钟即可完成,步骤见下文;也可以让我们开发的 QGIS 插件 AI Agent 根据一句话完成。
NDVI 的原理
植物吸收红光,反射近红外光。健康的叶片为了生长会吸收大部分红光,并把大部分近红外光反射回去。NASA Earthdata 指出,植物遭遇干旱或病害时,会反射更多红光、更少近红外光,两者之间的差距随之缩小。

NDVI 把这个差距变成一个数值:
NDVI = (NIR − Red) / (NIR + Red)
以一块健康的小麦田为例,近红外反射率为 40%,红光为 4%:(0.40 − 0.04) / (0.40 + 0.04) = 0.82。裸土的反射率可能是 28% 和 20%:(0.28 − 0.20) / (0.28 + 0.20) = 0.17。除以两者之和就是“归一化”:处在阴影里的农田和阳光下的同一块农田,得到的数值相近。
研究人员最早在 1974 年把它用于卫星影像(见 NASA 技术报告),当时是利用第一颗 Landsat 卫星监测美国大平原的农作物。
NDVI 数值的含义
美国地质调查局(USGS)给出了多数资料沿用的取值范围。请把它当作经验法则:
| NDVI | 通常对应什么 |
|---|---|
| 低于 0 | 水体、云、积雪 |
| 0 到 0.1 | 裸岩、沙地、裸土、建成区 |
| 0.2 到 0.5 | 稀疏植被:草地、灌木、幼苗期或成熟期的作物 |
| 0.6 到 0.9 | 茂密植被:森林、生长高峰期的作物 |
按 USGS 的说法,荒芜区域为“0.1 或更低”,稀疏植被“约 0.2 到 0.5”,茂密植被“约 0.6 到 0.9”。同一块农田在一年里会依次经过这三个区间,下一节会看到。
一个季节里的 NDVI 实测
NDVI 数值必须连同日期一起看才有意义。为了说明这一点,我跟踪了印度旁遮普邦的一块农田,用一整年的 Sentinel-2 卫星影像。同一块地在6 月初读数为 0.06,9 月初为 0.92:同一片土地,从裸土变成了茂密的作物。

曲线与农事日历一致:小麦在冬季生长,2 月前后达到峰值;4 月收割后农田裸露;水稻 6 月下旬栽种,8 月和 9 月达到峰值。附近的小镇全年都在 0.05 到 0.17 之间。所以“0.2”可能是幼苗期的作物、收割后的农田,也可能是一个村庄,取决于月份。
我们是怎样测量的。 我使用了该区域从 2025 年 9 月 26 日到 2026 年 9 月 26 日的全部 87 景 Sentinel-2 影像,并且在读取任何数值之前就选定了采样点。每个采样点取 3 × 3 个 10 m 像素的平均值,只有上空没有云和云影的日期才计入:这块农田共有 60 个日期。

各颗卫星该用哪些波段
公式从不改变,但每颗卫星对波段(它所记录的各种颜色的光)的编号不同。把它们弄混,是最常见的新手错误。
| 数据源 | 红光波段 | 近红外波段 | 像素大小 | 重访周期 |
|---|---|---|---|---|
| Sentinel-2(ESA) | B4,665 nm | B8,842 nm | 10 m | 5 天或更短 |
| Landsat 8 和 9(USGS) | 波段 4 | 波段 5 | 30 m | 两颗合计 8 天 |
| Landsat 4 到 7 | 波段 3 | 波段 4 | 30 m | 存档可追溯到 1982 年 |
| MODIS(NASA) | 现成的 NDVI 产品 MOD13Q1 | 250 m | 16 天合成 | |
| 多光谱无人机相机 | 红光波段 | 近红外波段 | 几厘米 | 每次飞行时 |
Sentinel-2(哨兵 2 号)是农田和农场的首选:免费,10 m 像素,每隔几天就有新影像。想回溯到 2015 年之前用 Landsat,想每两周覆盖整个国家用 MODIS。普通的无人机相机算不出 NDVI,因为它不记录近红外。查找和流式加载场景的方法,见如何在 QGIS 中下载 Sentinel-2。
悄悄拉低 NDVI 的 Sentinel-2 偏移
自 2022 年 1 月 25 日起,Sentinel-2 文件的每个数值都加了 1,000。ESA 的数据质量报告要求把它减掉:反射率(被反射回来的光所占的比例)= (数值 − 1000) / 10000。经典教程里的公式 (B8 − B4) / (B8 + B4) 直接作用于原始数值,跳过了这一步,结果就会偏低。
误差恰恰在最要紧的地方最大,也就是长势良好的作物:
| 地表 | 正确的 NDVI | 忘记减 1,000 时的 NDVI | 误差 |
|---|---|---|---|
| 茂密作物 | 0.82 | 0.56 | −0.26 |
| 裸土 | 0.17 | 0.12 | −0.05 |
一块健康的作物会从“茂密”区间掉进“稀疏”区间。在我们的哈里克影像上,如果忘记这个偏移,NDVI 高于 0.6 的面积占比会从 73% 降到 14%。我们检查过的九篇 QGIS NDVI 教程,没有一篇提到它。
有些数据源已经替您去掉了偏移,所以减之前先确认。用识别要素工具点选一个像素:数值达到数千,说明是原始数值;数值在 0 到约 1 之间,说明已经是反射率。
NDVI 的局限
NDVI 衡量的是绿度,而绿度不等于健康。实际项目中常遇到四个局限:
- 会饱和。 在非常茂密的植被上,NDVI 稳定在 0.85 到 0.9 左右,分不出“茂盛”和“非常茂盛”。
- 土壤颜色会干扰。 植物稀疏的地方,深色土壤和浅色土壤即使植物相同,数值也不同。
- 云会造成假象。 薄云会拉低 NDVI,因此在求任何平均值之前,要先剔除有云的像素。
- 不同卫星略有差异。 同一块农田,Sentinel-2 和 Landsat 给出的数值接近,但不完全相同。
这些局限造成影响时,换一个指数会更合适:
| 指数 | 适用情况 |
|---|---|
| EVI | 植被非常茂密,例如热带森林,NDVI 已不再上升 |
| SAVI | 植物稀疏,裸露土壤很多,例如幼苗期作物或旱地 |
| NDRE | 生长后期跟踪作物氮含量(需要红边波段,Sentinel-2 有) |
| NDWI | 想绘制水体而不是植物 |
如何在 QGIS 中计算 NDVI
加载红光和近红外波段
对于 Sentinel-2,加载波段 B04(红光)和 B08(近红外),下载或流式加载的方法见 Sentinel-2 指南。用识别要素工具点选一个像素:数值达到数千表示是原始数值,数值在 0 到 1 之间表示已经校正。
打开栅格计算器
栅格 > 栅格计算器…(Raster > Raster Calculator…)。用您的图层名输入公式。对反射率:("B08@1" - "B04@1") / ("B08@1" + "B04@1")。对 2022 年起的原始数值,先给每个波段减去 1,000:(("B08@1" - 1000) - ("B04@1" - 1000)) / (("B08@1" - 1000) + ("B04@1" - 1000))。把范围设为您的研究区域,而不是整块切片。
设置结果的样式
打开图层属性,选择符号化,渲染类型选单波段伪彩色,使用从 −0.2 到 0.9 的红黄绿色带。水体变成红褐色,农田变成绿色。
按农田汇总
对您的农田多边形运行数据处理 > 工具箱 > 分区统计(Processing > Zonal statistics),得到每块农田的平均 NDVI,并作为属性保存。
下面是栅格计算器中针对 Sentinel-2 原始数值的公式,每个波段先减去 1,000:

下面是设置为红到绿样式的结果,图例显示在图层面板中:

一句话完成
我们开发了 AI Agent,所以这一部分讲的是我们自己的插件。上面的步骤熟悉之后大约要十分钟。用这个插件,您只需输入任务。我在一个使用默认设置的新工程中发送了这句话:“Calculate NDVI for the fields around Harike, Punjab from the latest cloud-free Sentinel-2 image, style it red to green, and tell me what share of the area is above 0.6.”(用最新的无云 Sentinel-2 影像计算旁遮普邦哈里克周边农田的 NDVI,设置为红到绿样式,并告诉我高于 0.6 的区域占多大比例。)
它查看了 9 月的五景影像,跳过其中两景有云的,选用了 9 月 8 日那一景,去除了偏移,并在大约 3 分 30 秒内给出答案:在 17 km² 的区域中,75% 高于 0.6。它算出的 NDVI 与我手动计算的结果逐像素一致。

它还把中间的工作图层留在了工程里,并且把区域说成“4 km × 4 km”,而实际是 3.8 × 4.5 km。都是小问题,但您引用的数字要自己核对。
要点回顾
NDVI = (NIR − Red) / (NIR + Red),取值从 −1 到 +1。茂密的作物和森林约为 0.6 到 0.9,裸土约为 0.1,水体低于 0。
同一块农田一年里会走完整个量表,所以 NDVI 数值必须连同日期一起看才有意义。旁遮普邦的一块农田,6 月初读数为 0.06,9 月初为 0.92。
在 Sentinel-2 上,NDVI 使用 10 m 的 B8 和 B4。自 2022 年 1 月 25 日起,L2A 级原始数值带有 −1000 的偏移;如果忽略它,茂密作物的 NDVI 会从 0.82 降到 0.56。
NDVI 在茂密冠层上会饱和,对土壤和云也敏感。遇到这些情况,EVI、SAVI 和 NDRE 更合适。
常见问题
作物的 NDVI 多少算好?
处于生长高峰期的健康作物,通常是 0.6 到 0.9。生长季早期,植物只覆盖一小部分土壤,0.2 到 0.4 属于正常。比较时请拿一块农田与它自己在整个季节中的变化对比,或者与同一天、同一作物的相邻农田对比,而不是对照某个固定阈值。
NDVI 为负数是什么意思?
几乎都是水体、云或积雪,它们反射的红光比近红外光多。清澈的开阔水体通常低于 0,而浑浊或较浅的水体可能略高于 0,所以只靠 NDVI 来识别水体效果不好。
计算 NDVI 要用 Sentinel-2 的哪些波段?
B8(近红外,842 nm)和 B4(红光,665 nm),分辨率都是 10 m。对反射率,NDVI = (B8 − B4) / (B8 + B4)。对 2022 年 1 月 25 日之后处理的 L2A 级原始数值,要先从每个波段减去 1,000 的偏移。
NDVI 和 NDRE 有什么区别?
NDRE 用红边波段代替红光波段。在 NDVI 已饱和的茂密冠层上,它仍然有响应,因此更适合评估氮含量和生长后期的作物长势。它需要带红边波段的传感器,例如 Sentinel-2 或多光谱无人机相机。
能用普通无人机照片计算 NDVI 吗?
不能。NDVI 需要近红外波段,而普通的 RGB 相机只记录红、绿、蓝。VARI 这类可见光指数虽然存在,但只是较弱的替代。要用无人机获得 NDVI,需要一台多光谱相机。
QGIS 能自动计算 NDVI 吗?
QGIS 没有一键计算 NDVI 的按钮,但栅格计算器用一个公式就能完成,如上文所示。想省去这些步骤,可以用 AI 智能体插件,根据一句话找到影像、计算 NDVI 并设置样式:我们的 AI Agent 为旁遮普的一片农耕区完成这些,用了大约三分半钟。
哪里可以免费获取 NDVI 数据?
可以用 Sentinel-2(10 m)或 Landsat(30 m)自己计算,两者都免费;也可以下载 NASA 现成的 MODIS NDVI 产品(MOD13Q1,250 m,每 16 天一期)。在 QGIS 中,用栅格计算器根据两个波段,一分钟就能算出来。
获取影像的方法,见在 QGIS 中下载 Sentinel-2,它比较了四种方式,并演示了如何选取和流式加载场景。多光谱与高光谱讲解了指数背后的波段,QGIS 树冠制图则把植被从指数推进到多边形。AI Agent 可以在 QGIS 中用一句话跑完整个 NDVI 工作流程,QGIS AI 导航页按任务列出了其他 AI 插件。
中免费计算,几分钟即可完成,步骤见下文;也可以让我们开发的 QGIS 插件 

