Short answer
Change detection for terrain projects means measuring what actually changed on the ground between two or more dates — and, just as importantly, proving the measured change is real rather than an artefact of misalignment, lighting or atmosphere. The method depends on the change you care about: DEM differencing for elevation and volume (erosion, deposition, excavation, slope failure), image differencing or post-classification comparison for land-cover change, and SAR coherence / InSAR for subtle, cloud-independent ground deformation. The non-negotiable first step is co-registration; the non-negotiable last step is comparing change against a defensible noise threshold.
Step zero: co-registration decides everything
The single largest source of false change is geometric misalignment. If two scenes are offset by even half a pixel, every edge — field boundary, ridge, road — produces a bright "change" halo that is pure artefact. Before any differencing:
- Optical: ensure both scenes share a CRS and grid. Sub-pixel co-registration via tie points or phase correlation (e.g. AROSICS in Python, or QGIS georeferencer for coarse cases) brings residual offset well below one pixel.
- DEMs: align with the Nuth & Kääb (2011) method, which solves the horizontal and vertical shift that minimises elevation differences over stable terrain — the standard before any DEM-of-Difference. Tools: the
demcoreg/pdemtoolsecosystem, or ArcticDEM-style co-registration scripts.
A useful check: difference the two inputs over stable ground (bedrock outcrop, paved areas). The residual should centre on zero with small spread. If it shows a systematic ramp or bias, co-registration is not done.
DEM differencing and level of detection
DEM differencing produces a DEM of Difference (DoD): DoD = DEM_late − DEM_early, positive for deposition/growth, negative for erosion/removal. In GDAL:
gdal_calc.py -A dem_2026.tif -B dem_2022.tif \
--calc="A-B" --outfile=dod.tif --type=Float32 --NoDataValue=-9999
The result is meaningless without a level of detection (LoD) — the smallest elevation change you can distinguish from noise. The standard spatially uniform form is:
LoD = t · sqrt(σ_early² + σ_late²)
where σ is each DEM's vertical uncertainty and t is a confidence multiplier (t ≈ 1.96 for ~95%). If both DEMs have σ ≈ 0.15 m, LoD ≈ 1.96 · √(0.15² + 0.15²) ≈ 0.42 m — so changes under ~0.4 m are not trustworthy and should be masked:
gdal_calc.py -A dod.tif --calc="A*(abs(A)>0.42)" \
--outfile=dod_thresholded.tif --type=Float32 --NoDataValue=0
Better still, use a spatially variable LoD that grows the uncertainty where slope is steep or point density is low (the Geomorphic Change Detection / fuzzy inference approach). Volumes then come from summing thresholded cells × cell area, and you should report error bounds, not a single number.
Optical change detection methods
For surface/land-cover change with clear imagery:
- Image differencing / ratioing: difference a band or index (e.g. ΔNDVI for vegetation loss, ΔNDWI for water). Simple and fast; sensitive to radiometric consistency, so use surface reflectance and similar acquisition geometry.
- Change Vector Analysis (CVA): treat each pixel as a vector in multi-band space; the magnitude of the difference vector is change intensity and its direction hints at change type.
- Post-classification comparison: classify each date independently, then compare the maps. It tolerates radiometric differences between dates but compounds the classification error of both dates, so accuracy is roughly the product of the two.
- Spectral indices for terrain context: dNBR for burn severity, ΔNDVI for clearing/regrowth.
Always start from atmospherically corrected surface reflectance — uncorrected scenes embed scene-dependent haze that masquerades as change.
SAR: all-weather and deformation
When clouds, smoke or darkness block optical sensors, or when you need millimetre-scale motion, Sentinel-1 SAR is the tool:
- Amplitude/intensity change flags surface disturbance (new construction, landslide scars, flooding) regardless of illumination.
- Interferometric coherence drops where the surface is disturbed between passes — sensitive to vegetation change, earthworks and disruption even when amplitude looks similar.
- InSAR / SBAS / PSInSAR measures line-of-sight ground deformation to the millimetre: subsidence over mining or groundwater extraction, slow landslides, volcanic inflation, infrastructure settlement. Processed in SNAP, ISCE, or platforms like the COMET LiCSAR/LiCSBAS chain.
SAR's geometry (layover, foreshadowing, shadow in steep terrain) and the need to handle atmospheric phase delay make it more specialised, but for monitoring it is unmatched.
A worked monitoring workflow
For a slope/erosion or excavation monitoring project:
- Acquire matched pairs: same sensor, similar sun angle and season where possible (optical), or a consistent Sentinel-1 track/orbit (SAR).
- Pre-process: optical → surface reflectance + cloud mask; DEMs → co-register with Nuth & Kääb; SAR → calibrate, terrain-correct.
- Reproject to a common metric grid:
gdalwarp -t_srs EPSG:32633 -tr 1 1 -r bilinear .... - Compute change: DoD for elevation, ΔindexNDVI/CVA for cover, coherence/InSAR for deformation.
- Apply LoD/threshold and mask sub-noise change.
- Quantify: volumes with error bounds, areas of change, deformation rates.
- Validate against field survey, GNSS, or an independent date, and report uncertainty.
Common pitfalls and why they happen
- Skipping co-registration. Sub-pixel misalignment makes every edge "change"; it is the dominant artefact source.
- No level of detection. Reporting every non-zero DoD cell mixes real change with noise and inflates volumes.
- Mismatched lighting/season. Different sun angle and phenology produce huge spurious optical change; match dates or use illumination-invariant ratios.
- Mixing atmospheric-correction methods across dates. The "change" then reflects processing, not ground.
- Compounding classification error in post-classification comparison without acknowledging that errors multiply.
- Ignoring SAR geometry in steep terrain, where layover and shadow create false coherence loss.
Quality and validation
- Difference stable ground first; residuals should centre near zero with small spread.
- Compute and report the LoD (or spatially variable LoD) and mask change below it.
- State CRS, resolution, dates, sensor and correction method for every input.
- Validate against an independent measurement (GNSS, total station, control date) and give uncertainty on volumes/rates.
- Inspect edges, steep slopes and scene borders, where artefacts concentrate.
Bathyl perspective
We treat change detection as a measurement with an error bar, not a difference image with pretty colours. Co-registration, a defensible level of detection, and matched radiometry are the steps that separate real terrain change from noise — and we report the uncertainty alongside the number so a decision-maker knows how far to trust it.
Related reading
- Atmospheric Correction for Geological Imagery
- Remote Sensing for Mine Site Screening
- Remote Sensing for Environmental Baselines
- Remote sensing and Earth data