Vision from Space
Seeing plant health.
From a satellite, or a drone, you can see a whole orchard at once. But the most useful light isn't one that we can see. Healthy leaves reflect near infrared light strongly, and they absorb red. A sick plant loses that ability, weeks before it looks any different to us.

- See a whole orchard at once
- The useful light is invisible
- Sick plants show up weeks early
NDVI
NDVI is a simple formula from the nineteen seventies. Take near infrared minus red, and divide by their sum. It gives a health score between minus one and one. We simulate three surfaces. Run it. Healthy trees score about point seven. Stressed trees fall to point three six. Bare soil is about point one. One line of arithmetic, on each pixel, and you've got a map of plant health across thousands of hectares. Farmers use it to decide exactly where to water, and where to spray. Free satellite data from programmes like Sentinel lets anybody try this.
import numpy as np
rng = np.random.default_rng(0)
healthy = (rng.normal(.50, .03, 2000), rng.normal(.08, .01, 2000))
stressed = (rng.normal(.30, .03, 2000), rng.normal(.14, .01, 2000))
soil = (rng.normal(.25, .03, 2000), rng.normal(.20, .01, 2000))
for name, (nir, red) in [("Healthy trees", healthy), ("Stressed trees", stressed), ("Bare soil", soil)]:
print(f"{name:<15} NDVI {((nir - red) / (nir + red)).mean():.2f}")Healthy trees NDVI 0.72 Stressed trees NDVI 0.36 Bare soil NDVI 0.11
Working with overhead images
Overhead images have their own rules. Objects can point in any direction, so rotation augmentation is safe. Images can be gigantic, so you have to cut them into tiles, with some overlap. Clouds hide everything, so you combine several passes. And the number of colour bands can go far beyond three. Most of your CNN knowledge carries straight across.
Summary
A simple ratio reveals plant health from space. Next, images where brightness has a physical meaning.
Key takeaways- Plants reflect near-infrared
- NDVI scores health
- Tile huge images