Earth Data School/NDVI — vegetation greenness
Lesson 2.1 · 4 of 17

NDVI — vegetation greenness

The single most-used number in satellite remote sensing. It turns two colours of reflected light into a measure of how much living, healthy plant is on the ground — and it's the 'greenness' bar you saw on the deforestation result.

In one lineHealthy leaves soak up red light (to photosynthesise) and bounce back near-infrared (invisible to us). NDVI is just the contrast between those two — high contrast = lush, low = bare.

Why two specific colours

A satellite measures how much light a patch of ground reflects in different bands. Two matter here:

  • Red (~0.65 µm) — chlorophyll absorbs it for photosynthesis, so a healthy leaf reflects little red.
  • Near-infrared (NIR) (~0.85 µm) — the leaf's internal cell structure scatters it strongly, so a healthy leaf reflects a lot of NIR.

So "lots of NIR, little red" = vigorous vegetation. Bare soil reflects red and NIR about equally; water reflects almost no NIR. NDVI captures that contrast in one normalised number:

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

Dividing by the sum normalises it — it cancels out whether the scene is bright or dim (sun angle, haze, shadow), so it ranges a tidy −1 to +1 and is comparable across days and places. Roughly: < 0 water/snow · 0–0.2 bare soil/rock · 0.2–0.5 grass/shrub/sparse crop · 0.6–0.9 dense healthy canopy.

Play with it

Move the two reflectance sliders, or pick a surface. Watch the swatch and the NDVI gauge respond.

−1 (water)0 (bare)+1 (lush)

Why it matters

  • Deforestation — clearing forest drops NDVI; that's the "greenness" signal in the BACI result. (A subtlety: oil-palm is itself green, so converting forest→palm loses less NDVI than forest→pasture — the size of the drop tells you what kind of change happened.)
  • Drought & crop stress — NDVI falls weeks before a failing harvest is obvious, so it underpins famine early-warning.
  • Phenology — its seasonal rise and fall tracks green-up and senescence, the pulse of an ecosystem.

Do it yourself — run it right here

NDVI is one line. Run it on a few surfaces, then edit the numbers — push the forest's NIR up and watch NDVI barely move (saturation):

editable · runs in your browser

On a real raster it's identical, just element-wise over arrays: ndvi = (nir - red) / (nir + red) with red = ds["B04"]; nir = ds["B05"] from an HLS/Landsat granule, then mask values outside −1…1.

The honest caveats

  • Saturation — in very dense canopy NDVI flattens near its ceiling, so it stops distinguishing "lush" from "extremely lush". (EVI adds the blue band to fix this.)
  • Soil & atmosphere — bright soil and haze nudge it; use surface-reflectance (atmospherically corrected) products and cloud masks.
  • It's a proxy — it measures greenness, not biomass or carbon directly; pair it with lidar (GEDI) for structure.