Landsat / Sentinel-2: bands, NDVI, false color
Optical Earth observation 101 with the two most-used civilian sensors: NASA's Landsat (50 years of continuous coverage) and ESA's Sentinel-2 (10-meter, 5-day repeat).
If you wanted to know how much vegetation is on Kauaʻi's south shore right now, do you ask someone — or do you ask a satellite?
Both are valid. The satellite (Sentinel-2 or Landsat) computes NDVI from optical bands and tells you the answer pixel-by-pixel in 10 m squares. This week you'll learn how.
Learning objectives
- Identify the major bands of Landsat 9 and Sentinel-2
- Compute NDVI from NIR and red bands
- Build a false-color composite for vegetation
- Use rasterio + numpy to load and operate on multi-band rasters
Primer
Landsat and Sentinel-2 are the two great open civilian Earth-observation programs. Landsat (NASA + USGS) has flown continuously since 1972 — 50+ years of consistent imagery — and Sentinel-2 (ESA) provides 10-meter, 5-day-revisit coverage of the entire globe. Together they are the workhorses of every academic, NGO, and commercial Earth observation workflow.
Landsat 9: the heritage program
Landsat 9 launched in 2021 and is the operational US Earth-observation flagship. Key specs:
- Orbit: sun-synchronous, 705 km, ~99° inclination, 10:00 AM mean local time descending node.
- Revisit: 16 days (the same orbit returns over a given point every 16 days). With Landsat 8 also in orbit, the combined revisit is 8 days.
- Sensors: OLI-2 (Operational Land Imager 2) and TIRS-2 (Thermal Infrared Sensor 2).
- Bands: 11 spectral bands ranging from coastal aerosol (0.443 µm) to thermal IR (12 µm).
- Resolution: 30 m for most bands, 15 m for the panchromatic band, 100 m for thermal.
Sentinel-2: the European twin-pair
Sentinel-2A (launched 2015) and Sentinel-2B (launched 2017) fly the same orbit on opposite sides of the planet, giving a 5-day revisit at the equator and 2–3 days at mid-latitudes. Specs:
- Orbit: sun-synchronous, 786 km, ~98.6° inclination.
- Sensor: MSI (Multi-Spectral Instrument).
- Bands: 13 spectral bands.
- Resolution: 10 m for the visible + NIR bands (Bands 2, 3, 4, 8), 20 m for red-edge and SWIR bands, 60 m for atmospheric correction bands.
NDVI: the most-used vegetation index
NDVI (Normalized Difference Vegetation Index) is:
NDVI = (NIR - Red) / (NIR + Red)
Healthy vegetation reflects NIR strongly (chlorophyll's mesophyll layer is highly reflective at ~0.85 µm) but absorbs visible red (which is what chlorophyll uses for photosynthesis). The difference between NIR and Red, normalized by their sum, is high for vegetation (0.4–0.9), low for bare soil (0.1–0.2), and near zero or negative for water and built surfaces.
import rasterio
import numpy as np
with rasterio.open('s2_b08_nir.tif') as src:
nir = src.read(1).astype(float)
with rasterio.open('s2_b04_red.tif') as src:
red = src.read(1).astype(float)
ndvi = (nir - red) / (nir + red + 1e-10)
False-color composites
A natural-color image puts R=Red, G=Green, B=Blue — what your eye would see. A "false-color" composite swaps in NIR. The classic false-color infrared (R=NIR, G=Red, B=Green) renders healthy vegetation as bright red, water as black, and bare soil as gray-blue. It's the fastest way to scan a scene for vegetation patterns.
Where to get the data
Both Landsat and Sentinel-2 are freely available from multiple cloud-native catalogs:
- AWS Open Data — Landsat:
s3://usgs-landsat/collection02/; Sentinel-2:s3://sentinel-s2-l2a/(free, requester-pays). Both serve Cloud-Optimized GeoTIFF (COG) format, so you can range-request just the bands and tiles you need without downloading entire scenes. - Microsoft Planetary Computer — a STAC catalog with both datasets, free access with a free account.
- Google Earth Engine — both datasets indexed, but tied to the Earth Engine compute platform.
Where the data lives
Optical Earth observation is one of the great open-data success stories. You can pull production-quality Landsat and Sentinel-2 scenes for free in five different ways:
- Microsoft Planetary Computer (
planetarycomputer.microsoft.com) — free STAC API over Sentinel-1/2/3, Landsat 8/9, NAIP, MODIS, and more. No quota for read access. Best default for most Python workflows;pystac-client+planetary-computer.sign()and you're streaming COGs. - AWS Open Data — Sentinel-2 (
s3://sentinel-cogs, no-sign-request) — Element 84's COG-friendly Sentinel-2 L2A archive, with a sibling STAC API atearth-search.aws.element84.com/v1. Region:us-west-2. Same data ESA distributes, just pre-tiled for cloud-native access. - AWS Open Data — Landsat (
s3://usgs-landsat, requester-pays for some collections) — USGS-hosted full Landsat 8/9 archive. STAC API atlandsatlook.usgs.gov/stac-server. - USGS EarthExplorer (
earthexplorer.usgs.gov) — the canonical web UI for the entire Landsat archive back to 1972. Free account, browser download. Use this when you want to eyeball-browse decades of one location. - Copernicus Browser / Data Space (
browser.dataspace.copernicus.eu) — ESA's official portal for Sentinel-1/2/3/5p. Free account. Use this for Sentinel-3 ocean and atmospheric products that aren't on the AWS mirror.
For lab work in Python the lookup is essentially always: STAC search by bbox + datetime + cloud-cover threshold → signed_url = pc.sign(item.assets[band].href) → rasterio.open(signed_url) with a windowed read. You don't have to download the whole scene; COG + HTTP range requests means you fetch just the bytes that intersect your area of interest. Week 26 returns to this in depth.
The lab
You'll query Microsoft Planetary Computer for a recent Sentinel-2 L2A scene over Cape Canaveral (Florida) with cloud cover under 10 percent — 5-day-revisit means you can almost always find one within the past month. Compute NDVI from the red and NIR bands. Mask out cloudy pixels using the L2A Scene Classification Layer (ships with the scene). Output a styled PNG showing vegetation cover around the launch facilities, with the Kennedy and Cape Canaveral pads annotated.
This is the same workflow used for environmental impact monitoring around launch sites — a topic that gets significant attention as Starbase, in particular, expands operations into ecologically sensitive Texas Gulf Coast wetlands.
Connecting to Hawaiʻi: Sentinel-2 over the Hawaiian Islands
Sentinel-2 (ESA, two satellites in orbit) passes over Hawaiʻi every 5 days at 10:30 AM local time. Each pass produces a 290 km swath of 10-meter-resolution imagery, free and public via AWS Open Data. The Hawaiʻi Statewide GIS Program uses Sentinel-2 data for vegetation-cover mapping, invasive-species detection, and post-storm assessment. The NDVI you compute this week is the same metric they use.
Hands-on lab: NDVI map of a launch site
Download a Sentinel-2 scene over Cape Canaveral. Compute NDVI. Mask cloud pixels. Output a styled PNG showing vegetation cover around the launch facilities.
Quiz — click an answer to check it
No grade, no shame. Tap any option; you'll see if it's right plus the answer if not. The point is to notice what you already know and what's still settling.
- (NIR - Red) / (NIR + Red)
- (Red - NIR) / (Red + NIR)
- NIR / Red
- Red - NIR
- 1 m
- 10 m
- 30 m
- 100 m
- Green
- Red
- Blue
- Yellow
- 3
- 7
- 11
- 16
- A C library
- A Python interface to GDAL for raster IO
- A QGIS plugin
- Database engine
Reflection
Take five minutes with this. Write your answer somewhere. Carry it into next week.