跳转到内容
QGIS
指南

NDVI 是什么?含义、取值范围与 QGIS 计算方法

发布于

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

印度旁遮普邦哈里克湿地周边农田的 Sentinel-2 影像,两条河流在此交汇;随后是同一视野的 NDVI 地图:农田为深绿色,村庄和沙地为浅橙色,河流和水库为红色。 (after)
印度旁遮普邦哈里克湿地周边农田的 Sentinel-2 影像,两条河流在此交汇;随后是同一视野的 NDVI 地图:农田为深绿色,村庄和沙地为浅橙色,河流和水库为红色。 (before)
之前之后
拖动比较
旁遮普邦哈里克,2026 年 9 月 8 日:先是卫星照片,再是它的 NDVI。绿色是茂密的农作物,红色是水体。

NDVI 是应用最广的植被指数,因为几乎所有卫星和许多无人机相机都会记录这两种光,而且每个像素只有一个数值,便于制图和做时间对比。农户用它找出农田里长势偏弱的地块,林业人员用它跟踪干旱,规划人员用它衡量城市的绿化程度。您可以在 QGIS 中免费计算,几分钟即可完成,步骤见下文;也可以让我们开发的 QGIS 插件 AI Agent 根据一句话完成。

NDVI 的原理

植物吸收红光,反射近红外光。健康的叶片为了生长会吸收大部分红光,并把大部分近红外光反射回去。NASA Earthdata 指出,植物遭遇干旱或病害时,会反射更多红光、更少近红外光,两者之间的差距随之缩小。

四种地表的红光与近红外反射率柱状图。健康作物的红光反射率为 4%,近红外为 40%,NDVI 为 0.82;受胁迫作物为 8% 和 30%,NDVI 为 0.58;裸土为 20% 和 28%,NDVI 为 0.17;水体的红光为 5%,近红外为 2%,NDVI 为 −0.43。
健康叶片吸收红光,把近红外光反射回去。两者差距越大,NDVI 越高。

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:同一片土地,从裸土变成了茂密的作物。

哈里克附近旁遮普邦一块农田从 2025 年 9 月到 2026 年 9 月的 NDVI 折线图。10 月水稻收割期间数值下降;小麦在冬季生长,数值升到约 0.91;4 月收割小麦后数值下降,5 月和 6 月农田裸露时约为 0.06;随后水稻在 7 月到 9 月生长,数值再次攀升到约 0.92。代表哈里克镇的灰色线全年保持在 0.05 到 0.17 之间。
一块农田,60 个无云日期。一年两茬作物,对应两个峰值;旁边的小镇则保持平稳。

曲线与农事日历一致:小麦在冬季生长,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 真彩色影像,五个黄点标出采样点:农田 A、农田 B、哈里克镇、拦河坝水塘,以及河边的漫滩沙地。
五个采样点,均在读取任何 NDVI 数值之前选定。上方曲线对应的是农田 A。

各颗卫星该用哪些波段

公式从不改变,但每颗卫星对波段(它所记录的各种颜色的光)的编号不同。把它们弄混,是最常见的新手错误。

数据源红光波段近红外波段像素大小重访周期
Sentinel-2(ESA)B4,665 nmB8,842 nm10 m5 天或更短
Landsat 8 和 9(USGS)波段 4波段 530 m两颗合计 8 天
Landsat 4 到 7波段 3波段 430 m存档可追溯到 1982 年
MODIS(NASA)现成的 NDVI 产品 MOD13Q1250 m16 天合成
多光谱无人机相机红光波段近红外波段几厘米每次飞行时

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.820.56−0.26
裸土0.170.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:

QGIS 栅格计算器。左侧列出波段 B04_red 和 B08_nir。表达式为 (B08_nir 减 1000,减去 B04_red 减 1000) 除以 (B08_nir 减 1000,加上 B04_red 减 1000),标记为 Expression valid,输出格式为 GeoTIFF。
栅格计算器中的 NDVI 公式,已去除 Sentinel-2 的偏移。

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

QGIS 中哈里克地区的 NDVI 图层,按红到绿设置样式。图层面板中的图例从代表水体和裸沙的 −0.2 一直到代表茂密作物的 0.9。农田为绿色,河流和水库为红色,村庄和沙地为浅橙色。
按红到绿设置样式的 NDVI。农田呈绿色,水体呈红色。

一句话完成

我们开发了 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 与我手动计算的结果逐像素一致。

QGIS 界面,右侧是 AI Agent 面板,左侧是哈里克附近农田的 NDVI 地图,以绿色为主,河流为橙色。智能体回复说,哈里克 2026 年 9 月 8 日的 NDVI 已按 10 m 以红到绿显示;9 月 8 日是该区域上空没有云和云影的最新一景;NDVI 超过 0.6 的面积为 12.86 km²,占 17.04 km² 区域的 75.47%。
输入一句话,得到设置好样式的 NDVI 图层和答案。

它还把中间的工作图层留在了工程里,并且把区域说成“4 km × 4 km”,而实际是 3.8 × 4.5 km。都是小问题,但您引用的数字要自己核对。

在 QGIS 中免费试用 AI Agent,无需信用卡

要点回顾

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 插件。