Skip to main content

NDVI

What the Normalized Difference Vegetation Index measures and how to interpret values from 0 to 1.

Agronomist
Farmer

NDVI — Normalized Difference Vegetation Index — is the single most useful number for digital agronomy. The portal uses it everywhere: as the input to zone clustering, as the basis for the layer-toggle overlay, as the Avg / Min / Max NDVI statistics in the Zone Editor.

This page explains what NDVI is, what it isn't, and how to read it.

The formula

NDVI is computed from two bands of light reflected off a plant or surface:

NDVI = (NIR - Red) / (NIR + Red)
  • NIR (Near-Infrared, ~700–1300 nm) is strongly reflected by healthy plant leaves.
  • Red (~650–700 nm) is strongly absorbed by chlorophyll.

The ratio is bounded in [-1, +1]. In practice, agricultural surfaces sit in [0, 1].

Reading the values

The portal's NDVI legend uses four categories:

NDVI rangeCategoryWhat it means in the field
< 0.2Bare soil / Severe stressSoil, asphalt, dead vegetation, or extremely stressed plants.
0.2 – 0.4Moderate stressSparse crop, early growth, mild water/nutrient stress.
0.4 – 0.6Good vegetationHealthy crop in active growth. The typical mid-season value.
> 0.6Optimal vegetationDense, vigorous canopy. Mid-late season corn / soybean at peak.

These thresholds aren't laws of nature. They're calibrated to typical US row crops. For different crops you may shift them. The portal lets you set Lower and Upper thresholds in the Zone Editor for exactly this reason.

What NDVI is good at

  • Detecting stressed pockets within an otherwise healthy field.
  • Tracking canopy development over the season.
  • Highlighting soil-pattern artifacts that predict yield (drainage, compaction, depressions).
  • Comparing relative vigor across a single field at a single point in time.

What NDVI is not

  • It is not a yield estimate. NDVI saturates at high vigor — a "great" field and a "really great" field can both read 0.85. Other indices (e.g., NDRE) help here.
  • It is not a nutrient prescription. NDVI tells you something is off in a low-vigor area, not what. Confirm with tissue / soil sampling before prescribing.
  • It is not comparable across fields, dates, or sensors without normalization. A 0.45 NDVI on satellite Sentinel-2 isn't the same as 0.45 on a drone multispectral camera.

Seasonal pattern

For a typical Midwest corn crop:

Growth stageExpected NDVI
Pre-emergence (bare soil)0.10 – 0.20
VE – V30.20 – 0.30
V4 – V60.30 – 0.50
V7 – V120.50 – 0.70
VT – R30.70 – 0.85
R4 – R60.65 – 0.80 (slowly declining)
Senescence0.30 – 0.50

Use these as a sanity check. A V8 corn field reading 0.30 is way out of pattern — go look at it.

Drone vs. satellite NDVI

Both sources produce NDVI, but with very different characteristics:

Satellite (Sentinel-2)Drone (multispectral camera)
Resolution10 m / pixel2–10 cm / pixel
CalibrationAtmospherically correctedDepends on the camera + sun calibration
RepeatabilityHigh across datesDepends on solar conditions
Field-edge effectMixed pixels at boundaryPixel-perfect at boundary

For prescription purposes, both work. Satellite is faster and free; drone is sharper and works under clouds.

Sentinel-2 specifics

The portal pulls Sentinel-2 scenes by default. Some quirks:

  • Revisit time: 5 days at the equator, shorter at higher latitudes. With two satellites (S2A + S2B), you get a fresh scene every ~3 days in the US.
  • Cloud cover: any cloud ruins the NDVI in that pixel. The portal's info card surfaces the scene's overall cloud cover; below 20% is usable.
  • Shadowed pixels: terrain shadows or building shadows distort NDVI. Most agricultural fields are flat enough that this isn't an issue.

When to use NDVI in the GTRV portal

You'll see NDVI in three places:

  1. Map Prescription wizard → Satellite source: as a layer toggle and as the basis for the legend.
  2. Map Prescription wizard → Drone source: same, but computed from your uploaded orthomosaic.
  3. Zone Editor → Statistics: Avg, Min, Max NDVI within the plot — useful for sanity checks.

Was this page helpful?

Edit this page on GitHub

Last updated Oct 20, 2018