The short answer

An environmental baseline is a quantified, reproducible snapshot of conditions before a project or disturbance, built so that later change can be attributed rather than guessed at. Remote sensing makes baselines possible at scale: the Landsat archive reaches back to the 1980s, and Sentinel-2 adds 10 m detail since 2015. The hard part is not computing NDVI — it is designing the baseline so it captures natural variability (seasons, wet and dry years), harmonising data across sensors and dates, and expressing change against that variability instead of against a single lucky scene. A baseline that ignores those steps will flag drought as impact and rain as recovery.

What a baseline has to represent

A defensible baseline answers: what was normal here, and how much did "normal" itself vary? That means it is rarely one image. Vegetation greens and senesces seasonally; rivers and wetlands expand and contract; bare ground shifts with agriculture. If your baseline is a single June 2018 scene, every future comparison inherits that scene's particular tide, rainfall and phenology.

So a baseline is built from time series and summarised statistically — typically a per-pixel mean and standard deviation (or a trend) of each indicator over several years and matched seasons. Later observations are then judged in units of that variability ("NDVI fell 2.3 standard deviations below the dry-season baseline"), which is far more defensible to a regulator than a raw difference.

Choosing data and indicators

Landsat (5/7/8/9, 30 m, ~16-day revisit, archive to 1984) is the backbone for retrospective baselines — you can reconstruct conditions years before a project was conceived. Sentinel-2 (10-20 m, 5-day revisit since 2015) gives finer spatial detail and denser time series going forward. Many programmes use a harmonised product (e.g. NASA's HLS, Harmonized Landsat Sentinel-2) so both sensors sit on a common grid and reflectance scale.

Indicators map to the receptors you must protect:

  • NDVI (NIR − Red)/(NIR + Red) — vegetation vigour and extent.
  • NDMI / NDWI (vegetation) (NIR − SWIR1)/(NIR + SWIR1) — canopy water content / drought stress.
  • MNDWI (Green − SWIR1)/(Green + SWIR1) — open surface water extent.
  • NBR (NIR − SWIR2)/(NIR + SWIR2) — fire and disturbance; dNBR for severity.
  • Bare-soil / tasselled-cap components — exposed ground, a proxy for erosion or clearing.

Pick the minimum set that covers the impact pathways; resist adding indices you cannot interpret.

Building the baseline: a worked workflow

Assume a mine or infrastructure site, baseline period 2016-2020, using Google Earth Engine or a local Sentinel-2 + Landsat stack.

1. Define the period and area. Fix the baseline window before any disturbance, and a buffered AOI plus an unaffected reference (control) area with similar land cover — control areas let you separate site-specific change from regional climate signals.

2. Cloud and shadow masking. Apply the Sentinel-2 SCL band (and s2cloudless) or Landsat QA_PIXEL; drop snow, cloud, cirrus and shadow per pixel. This is the single biggest driver of false trends if skipped.

3. Surface reflectance and harmonisation. Use atmospherically corrected surface reflectance (Sentinel-2 L2A, Landsat Collection 2 L2). If mixing sensors, apply published cross-sensor coefficients so OLI and MSI NDVI are comparable.

4. Seasonal composites. Build per-season median composites (e.g. wet-season and dry-season medians per year). Medians reject residual cloud and outliers better than means.

5. Per-pixel statistics. Compute baseline mean and standard deviation, and a linear trend (slope) for each indicator across the period. The trend matters: a "stable" baseline and a "already-declining" baseline demand different interpretations later.

# Earth Engine sketch: dry-season NDVI baseline mean & stdDev, 2016-2020
baseline = (s2_l2a
  .filterDate('2016-01-01','2020-12-31')
  .filter(ee.Filter.calendarRange(6,9,'month'))   # dry season
  .map(mask_scl)
  .map(lambda im: im.normalizedDifference(['B8','B4']).rename('ndvi')))
ndvi_mean = baseline.select('ndvi').mean()
ndvi_sd   = baseline.select('ndvi').reduce(ee.Reducer.stdDev())

6. Document everything. Record scene IDs, processing level, masking rules, index formulas, CRS (e.g. EPSG:32630) and the baseline period so the study is reproducible years later — auditors will ask.

Detecting change against the baseline

Once a baseline exists, monitoring is comparison done honestly:

  • Z-score / anomaly maps(observation − baseline_mean) / baseline_sd, phenologically matched, so change is in variability units.
  • Trend tests — Mann-Kendall plus Theil-Sen slope on the continuing time series resists outliers and gives a defensible significance statement.
  • Breakpoint methods — algorithms like LandTrendr or BFAST detect the timing of abrupt change in long records, separating gradual drift from a step.
  • Control-area differencing — subtract the reference area's signal to remove regional climate, isolating project-attributable change.

Common pitfalls and why they happen

  • The single-date baseline. One scene cannot represent variability, so every later comparison confounds seasonality with impact.
  • Mismatched phenology. Comparing a spring scene to an autumn scene shows leaf-off as "vegetation loss." Always match season or use seasonal composites.
  • Sensor switch mid-record. Landsat 7 SLC-off gaps, or an un-harmonised jump from Landsat to Sentinel-2, create artefacts that look like real trends.
  • No control area. A regional drought then reads as project impact because nothing isolates the local signal.
  • Cloud/shadow leakage. Unmasked thin cloud lowers NDVI and fakes degradation; residual shadow does the same. The QA band is mandatory.
  • Raw differencing. A two-date difference with no variability context cannot say whether change is significant.

QA and validation

Cross-check the baseline against field vegetation surveys, water-level or flow gauges, and existing land-cover maps; verify masks by inspecting cloudy edges and water bodies; report per-index uncertainty (baseline SD, trend confidence intervals); and confirm the control area genuinely tracks the site under shared climate. Archive intermediate composites so any anomaly can be traced to its scenes.

Bathyl perspective

A baseline's value is measured years later, when someone has to prove what changed and what did not. We build baselines as documented, multi-year, variability-aware datasets with a control area and a clear processing trail, so that subsequent change detection is an attribution exercise a regulator will accept — not a two-image guess.

Related reading

Sources