Skip to content

NDVI and What a Vegetation Index Actually Measures

9 min read · updated August 11, 2026

NDVI is one subtraction and one division. Almost every explanation stops after quoting it, which leaves the two questions people actually arrive with unanswered: why the ratio rather than the raw bands, and why the number came out negative.

The formula, and what the two bands see

The Normalised Difference Vegetation Index is NDVI = (NIR − Red) / (NIR + Red), computed per pixel from surface reflectance in a near-infrared band and a red band. It comes from Rouse and colleagues working on ERTS-1 imagery in 1974, and the definition has not changed since.

It works because the two bands sit on opposite sides of a very sharp feature in the reflectance spectrum of a leaf. Chlorophyll absorbs strongly in the red, around 660 nm, so a healthy canopy reflects very little of it. Just past 700 nm the absorption stops and the internal air-to-cell-wall interfaces of the leaf’s mesophyll scatter light back out efficiently, so near-infrared reflectance jumps. That step is called the red edge, and NDVI is a crude but robust measure of how tall it is. NASA’s Earth Observatory describes the same mechanism in its Measuring Vegetation explainer, and the USGS publishes NDVI as a standard product from Landsat surface reflectance.

Four worked surfaces

Reflectance is a unitless fraction between 0 and 1. Take four plausible pixel pairs and turn the handle:

dense canopy   NIR 0.50  Red 0.04  ->  (0.50-0.04)/(0.50+0.04) = 0.46/0.54 =  0.85
dry bare soil  NIR 0.28  Red 0.22  ->  (0.28-0.22)/(0.28+0.22) = 0.06/0.50 =  0.12
open water     NIR 0.02  Red 0.05  ->  (0.02-0.05)/(0.02+0.05) = -0.03/0.07 = -0.43
fresh snow     NIR 0.50  Red 0.90  ->  (0.50-0.90)/(0.50+0.90) = -0.40/1.40 = -0.29

Two things fall straight out. Vegetation is the only surface where the numerator is large and positive, because it is the only common surface with a big gap between the two bands in that direction. And water and snow are negative for the same reason in reverse: liquid water absorbs near-infrared almost completely, and snow, which is bright white to the eye, is a comparatively poor near-infrared reflector.

Why a ratio and not a difference

This is the part worth keeping. Suppose the same canopy sits on a north-facing slope in partial shade and receives a fraction k of the irradiance the flat pixel next to it receives. Both bands are scaled by the same k, because shading is broadly achromatic across these wavelengths. Substitute:

NDVI' = (k*NIR - k*Red) / (k*NIR + k*Red)
      = k(NIR - Red) / k(NIR + Red)
      = (NIR - Red) / (NIR + Red)
      = NDVI

The k cancels exactly. The raw difference NIR − Red does not: at k = 0.5 it halves, and a shaded forest would read as half a forest. That single algebraic property is why the normalised form is used instead of the band difference, and it is also why NDVI is comparatively insensitive to sun elevation, sensor gain drift and topographic shading — all of which are approximately multiplicative.

The corollary is the important caveat: it cancels multiplicative terms only. Atmospheric path radiance is additive — scattered light that never touched the ground, and much stronger in the blue and red than in the near-infrared. Adding a constant to the red band alone drags NDVI down, and no ratio removes it. That is why NDVI is computed from atmospherically corrected surface reflectance products rather than top-of-atmosphere radiance, and why cloud and cloud-shadow masking has to happen before the index, not after it.

Why the range is −1 to +1 and negatives are normal

The bound is arithmetic, not empirical. For non-negative reflectances, |NIR − Red| ≤ NIR + Red always holds, so the quotient lies in [−1, +1]. The endpoints are only reached when one band is exactly zero. In practice, land surfaces occupy a narrow slice of it: bare rock and soil sit roughly between 0 and 0.2, sparse or stressed vegetation around 0.2 to 0.5, and closed healthy canopy from about 0.6 up. Water, snow, ice and cloud tops go negative or hover near zero.

Two operational consequences follow. First, a negative NDVI is a classification signal, not an error: it is one of the cheapest water masks available, though NDWI, which uses green and near-infrared, is the purpose-built one. Second, the denominator can be zero — deep shadow, a sensor fill value, or a nodata pixel that survived as 0 rather than as NaN. Guard it explicitly rather than letting the division produce an infinity that then poisons a mean.

Where NDVI stops discriminating

NDVI saturates. As leaf area index rises past roughly 3, red reflectance is already close to its floor — there is no more red light left to absorb — so the numerator and denominator both converge on the near-infrared value and NDVI flattens out near 0.9. A dense tropical canopy and a much denser one return nearly the same number, which makes NDVI a poor biomass proxy at the high end even though it is a good one at the low end.

The two standard responses both change the algebra rather than the bands. SAVI adds a soil-adjustment constant, SAVI = ((NIR − Red) / (NIR + Red + L)) × (1 + L) with L = 0.5 as the usual mid-density value, to damp the soil background that dominates sparse cover. EVI, distributed as a standard MODIS product alongside NDVI, brings in the blue band to correct residual aerosol effects and adds a canopy-background term: EVI = 2.5 × (NIR − Red) / (NIR + 6×Red − 7.5×Blue + 1). EVI is the one to reach for when the scene is closed canopy; NDVI is fine when it is a rangeland or a crop field before canopy closure.

Band choice, and the two arithmetic traps

“Near-infrared” is not one band. On Landsat 8 and 9 OLI it is band 5, roughly 0.85–0.88 µm, paired with band 4 in the red, both at 30 m. On Sentinel-2 MSI you have a choice: B8, a wide NIR band centred near 842 nm at 10 m, or B8A, a narrow band near 865 nm at 20 m that avoids a water-vapour absorption feature. B4 is the red band at 10 m. NDVI from B8 and NDVI from B8A are both correct and are not the same number, so a time series must pick one and stay with it; the same caution applies when splicing Landsat and Sentinel-2 into one series, which is what change detection over a long record usually needs.

  • Do not average NDVI of averaged reflectance. NDVI is nonlinear, so the index of the mean is not the mean of the index. If you downsample a scene from 10 m to 100 m, compute NDVI at 10 m and aggregate the index, or accept a bias you cannot sign in advance.
  • Resample deliberately. Pairing a 10 m red band with a 20 m NIR band means one of them is being invented by interpolation. Nearest-neighbour preserves the original values and aliases edges; bilinear smooths and creates reflectances that were never measured. Neither is wrong, but the choice shows up at field boundaries, which is exactly where people look.
Band centres and spatial resolutions are instrument specifications and are stable for a mission’s lifetime, but processing baselines are not: Sentinel-2 reflectance has been reprocessed with an offset applied to L1C digital numbers, and a pipeline that hard-codes the old scaling will silently shift every NDVI value. Check the current processing baseline notes for whichever collection you read.