Skip to content
AI360Xpert
Beta

Satellite Imagery Analysis

Satellite analysis turns calibrated orbital images into measurements of land, water, and human activity that repeat on every revisit.

Calibrated bands pass cloud masking into indices that separate vegetation from water
Calibrated bands pass cloud masking into indices that separate vegetation from water

Why Does This Exist?

Raw satellite counts mix sun angle, haze, and sensor gain with ground truth. A forest looks different morning versus noon without changing at all. Satellite analysis exists to remove those effects first: calibrate to surface reflectance, mask clouds and shadows, then compute stable indices and maps that compare across revisits. Without it, every weather shift reads as deforestation.

For overhead context see remote sensing and for masks see semantic segmentation.

Think of It Like This

Weighing fruit with the basket removed

You tare the scale for the basket before weighing apples, or every basket change looks like a harvest. Calibration tares sun and haze, cloud masks remove the basket entirely. Indices weigh the fruit. The analogy stops at scales: bands also need co-registration to the meter.

How It Actually Works

Level-1 counts convert to top-of-atmosphere reflectance with gain and sun geometry, then atmospheric correction yields surface reflectance. Cloud and shadow masks from bands plus temporal tests drop contaminated pixels. Indices combine bands: NDVI (NIR−Red)/(NIR+Red)(NIR - Red)/(NIR + Red) spans −1-1 to 11 with healthy vegetation near 0.60.6 to 0.90.9 and water negative. Thresholds plus learned heads map indices into water, vegetation, and urban layers.

Worked example

A pixel reads NIR 0.500.50 and Red 0.150.15. NDVI =(0.50−0.15)/(0.50+0.15)=0.35/0.65≈0.54= (0.50 - 0.15)/(0.50 + 0.15) = 0.35/0.65 \approx 0.54, sparse vegetation. After rain NIR rises to 0.600.60 and Red falls to 0.100.10, giving 0.50/0.70≈0.710.50/0.70 \approx 0.71, dense growth. A neighboring water pixel with NIR 0.050.05 and Red 0.080.08 gives −0.03/0.13≈−0.23-0.03/0.13 \approx -0.23, cleanly negative. One ratio separates three covers.

Code

This snippet computes NDVI for three covers.

import numpy as np

def ndvi(nir: np.ndarray, red: np.ndarray) -> np.ndarray:    return (nir - red) / (nir + red + 1e-8)

nir = np.array([0.50, 0.60, 0.05])red = np.array([0.15, 0.10, 0.08])print(np.round(ndvi(nir, red), 2).tolist())  # -> [0.54, 0.71, -0.23]

Positive high means vegetation, negative means water. Thresholds turn numbers into maps.

Watch Out For

Cloud shadows read as water

Shadows darken all bands and push indices toward water-like values, so a passing cloud draws a fake lake. The symptom is water that moves with clouds across revisits. Mask shadows with geometry plus temporal persistence before any water claim, and require repeat detection.

The Quick Version

  • Calibrate to surface reflectance before comparing revisits.
  • Mask clouds and shadows or they become fake land change.
  • NDVI separates vegetation from water with one ratio.
  • Thresholds plus learned heads produce stable layers.
  • Report per-band quality alongside every map.