Remote Sensing Change Detection

Purpose

Remote Sensing Change Detection identifies areas where spectral, thermal, or structural properties have changed between two or more satellite, aerial, or SAR image acquisitions. Applications include urban growth mapping, vegetation dynamics assessment, post-disaster impact analysis, and environmental monitoring.

This tool is designed for:

  • Bi-temporal analysis — Comparing two image acquisitions to isolate change
  • Multi-temporal stacking — Analyzing 3+ images in temporal sequence
  • Multi-sensor comparison — Detecting changes across different sensor modalities (optical, thermal, SAR)
  • Threshold-based and statistical methods — Flexible detection algorithms tuned to application requirements

Typical Questions This Tool Helps Answer

  • Where has significant land surface change occurred between these two acquisition dates, and how large is the affected area?
  • Which change classes — vegetation gain or vegetation loss — dominate the scene, and what is their spatial distribution and relative fraction across the study area?
  • Does the detected change pattern match known event footprints such as fire perimeters, flood extents, harvest units, or construction boundaries?

Background

Change detection leverages the principle that unchanged areas remain spectrally or radiometrically similar between acquisitions, while changed areas show measurable differences. Key methodological approaches include:

Differencing (Absolute Change)

$$\Delta I = I_{t_2} - I_{t_1}$$

Simple subtraction identifies magnitude of change but is sensitive to illumination and atmospheric differences.

Ratio (Relative Change)

$$R = \frac{I_{t_2}}{I_{t_1}}$$

Reduces atmospheric effects and sensor calibration bias; particularly effective for vegetation indices.

Normalized Difference Index (NDI)

For multispectral data with Red and Near-Infrared bands: $$\text{NDI} = \frac{\text{NIR} - \text{Red}}{\text{NIR} + \text{Red}}$$

Then compute change as: $$\Delta \text{NDI} = \text{NDI}{t_2} - \text{NDI}{t_1}$$

Reduces atmospheric and illumination variation while emphasizing vegetation dynamics.

Spectral Angle Mapper (SAM)

For hyperspectral or multispectral data, compute the spectral angle between two pixels: $$\theta = \arccos\left(\frac{\mathbf{s}_1 \cdot \mathbf{s}_2}{|\mathbf{s}_1| |\mathbf{s}_2|}\right)$$

Smaller angles indicate spectral similarity (no change); larger angles indicate spectral difference (change).

Statistical Testing

For time series analysis, hypothesis tests (e.g., t-test, Mann-Whitney) determine if differences are statistically significant or within expected noise.

Inputs

ArgumentTypeRequiredGeometry / Type ConstraintsDescription
baseline_bundleMultiband rasterYesMust be a readable multiband raster with accessible red and NIR bands.Baseline scene bundle.
change_bundleMultiband rasterYesMust be a readable multiband raster with accessible red and NIR bands.Change-date scene bundle.
intermediate_ndviSingle-band rasterNoMust be a readable raster. If provided, it is harmonized to the baseline NDVI grid.Optional intermediate-date NDVI for temporal validation.

Parameters

ArgumentTypeRequiredDefaultDescription
baseline_red_band_indexIntegerNo0Zero-based red-band index in baseline_bundle.
baseline_nir_band_indexIntegerNo1Zero-based NIR-band index in baseline_bundle.
change_red_band_indexIntegerNo0Zero-based red-band index in change_bundle.
change_nir_band_indexIntegerNo1Zero-based NIR-band index in change_bundle.
profileStringNobalancedaggressive, balanced, or conservative.
high_confidence_thresholdFloatNo0.85Threshold used for high-confidence summary counts. Must be in [0, 1].
outputStringNochange_detectionOutput prefix for generated artifacts.

Parameters baseline_red, baseline_nir, change_red, and change_nir are not part of this workflow and are rejected.

Outputs

Output artifact keys below are runtime outputs, not input parameters.

ArtifactRuntime Output KeyTypeWhat It Contains
Change map (${prefix}_change.tif)change_mapGeoTIFF rasterSigned NDVI change surface.
Confidence map (${prefix}_confidence.tif)confidenceGeoTIFF rasterConfidence score raster in [0, 1].
Class-area table (${prefix}_class_area_table.csv)class_area_tableCSVPer-class area accounting for vegetation_loss, vegetation_gain, and unchanged with fractions over valid pixels.
Summary contract (${prefix}_summary.json)summaryJSONSummary contract including workflow metadata, profile, inputs, parameters, summary statistics, interpretation, outputs, and a timings_ms block.
Optional report (${prefix}_report.html)html_reportHTMLHTML rendering of the summary JSON.

Important summary fields

KeyMeaning
inputs.input_descriptionBundle-mode description including selected band indices.
inputs.intermediate_ndviPath to the optional intermediate NDVI raster, or null.
parameters.min_change_thresholdProfile-specific minimum NDVI change threshold.
parameters.magnitude_scaleProfile-specific magnitude scaling value.
parameters.high_confidence_thresholdThreshold used for summary counts.
parameters.temporal_validation_enabledtrue when intermediate_ndvi was provided.
summary.valid_pixelsNumber of valid analyzed pixels.
summary.pixels_with_changeNumber of changed pixels.
summary.change_fraction_of_imagePercent-string fraction of the image showing change.
summary.vegetation_loss_pixelsCount of loss pixels.
summary.vegetation_gain_pixelsCount of gain pixels.
summary.unchanged_pixelsCount of valid pixels below the profile change threshold.
summary.vegetation_loss_fraction_of_valid_pixelsFraction of valid pixels in the vegetation_loss class.
summary.vegetation_gain_fraction_of_valid_pixelsFraction of valid pixels in the vegetation_gain class.
summary.unchanged_fraction_of_valid_pixelsFraction of valid pixels in the unchanged class.
summary.high_confidence_changePercent-string share of changed pixels above the high-confidence threshold.
summary.high_confidence_change_pixelsCount of high-confidence changed pixels.
summary.mean_confidenceMean confidence over valid pixels.
summary.mean_temporal_consistencyMean temporal consistency over valid pixels.
class_definitionsExplicit class rules for vegetation_loss, vegetation_gain, and unchanged.
class_area_accountingReconciliation block ensuring class totals equal valid pixels.
output_semanticsMachine-readable semantics tags per output key.
confidence_contractStandardized confidence method and low-confidence summary fields.
interpretation_warningsExplicit warning statements about class and confidence interpretation constraints.
interpretationContains dominant_trend, confidence_assessment, and temporal_consistency.
outputsContains change_map, confidence, and class_area_table.
timings_ms.step5g_write_summaryTest-required timing key present in the timing block.

Returned payload keys

The workflow returns these output keys:

  • change_map
  • confidence
  • class_area_table
  • summary
  • html_report

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
env.remote_sensing_change_detection(
    baseline_bundle="baseline_scene.tif",
    baseline_red_band_index=0,
    baseline_nir_band_index=1,
    change_bundle="change_scene.tif",
    change_red_band_index=0,
    change_nir_band_index=1,
    intermediate_ndvi="intermediate_ndvi.tif",
    profile="balanced",
    high_confidence_threshold=0.85,
    output="forest_change_2026",
)

References

  • Bovolo, F., & Bruzzone, L. (2005). Unsupervised change detection based on change vector analysis. IEEE Transactions on Geoscience and Remote Sensing.
  • Zhu, Z., & Woodcock, C. E. (2014). Continuous change detection and classification using Landsat data. Remote Sensing of Environment.

Parameter Interaction Notes

  • The four band-index parameters are part of the core contract; wrong indices will produce wrong NDVI change even if the workflow runs successfully.
  • profile changes the minimum change threshold and the weighting of magnitude versus temporal consistency, so it materially affects confidence scoring.
  • high_confidence_threshold changes summary counts only; it does not reclassify the confidence raster itself.
  • Adding intermediate_ndvi can substantially change temporal consistency and the narrative in the interpretation block.

QA and Acceptance Criteria

  1. Verify baseline_bundle and change_bundle are treated as required inputs.
  2. Verify the example uses bundle-mode arguments exactly.
  3. Verify the summary JSON contains the documented keys, including interpretation and timings_ms.
  4. Verify the returned payload contains change_map, confidence, summary, and html_report.
  5. Verify timings_ms.step5g_write_summary exists in the summary.
  6. If intermediate_ndvi is supplied, verify parameters.temporal_validation_enabled=true.

The workflow fails if unsupported per-band parameters are used, if required bundles are missing, if rasters cannot be read, if harmonization requires missing CRS EPSG metadata, if a band index is out of range, if profile is invalid, or if high_confidence_threshold falls outside [0, 1].

Advanced Operational Guidance

  • Treat the band indices as part of the deliverable record; they are essential for auditability.
  • Use intermediate_ndvi when seasonality or cloud contamination could make two-date comparison ambiguous.
  • Review the confidence raster together with the change raster before field or regulatory use.
  • Use distinct output prefixes for scenario comparison runs.

Implementation Patterns

  • Two-date screening run: baseline and change bundles only.
  • Three-date validation run: add intermediate_ndvi for stronger temporal support.
  • Profile sensitivity run: compare aggressive, balanced, and conservative.
  • Delivery run: publish change, confidence, summary, and HTML report together.
  • multi_sensor_fusion_monitoring
  • time_series_change_intelligence
  • sar_analysis_readiness

When To Use This Workflow

Use this workflow when you need a repeatable NDVI change package from multiband scene bundles and you want confidence-aware reporting instead of a generic menu of change methods.

What this workflow helps you do:

  • Compare two multiband scenes with explicit red/NIR band control.
  • Add optional temporal validation from an intermediate NDVI surface.
  • Deliver both signed change and confidence outputs with a report-ready summary.

Results Delivery Checklist

  1. Deliver the change raster, confidence raster, summary JSON, and HTML report together.
  2. Record the exact band indices used for both bundles.
  3. State whether intermediate_ndvi was used.
  4. Review the interpretation block before operational or regulatory use.
  5. Confirm timings_ms and summary keys are present before handoff.

Common Questions

Q: Why can confidence stay low even when the signed change looks strong?
A: Because confidence is not based on magnitude alone. It also reflects spectral quality and temporal consistency.

Q: What is the main misinterpretation risk here?
A: Treating this as a generic change-detection engine. The implementation is specifically bundle-based NDVI change detection with explicit red/NIR indexing.

Q: Which setting matters most for scenario sensitivity?
A: profile, because it changes the minimum change threshold and the weighting between magnitude and temporal consistency.

Q: When should operations add intermediate_ndvi?
A: Add it when seasonal effects, clouds, or transient disturbance could otherwise make a two-date comparison ambiguous.