SAR Interferogram and Coherence

Purpose

SAR Interferogram and Coherence computes spatial and temporal coherence from SAR image pairs, quantifying phase stability for interferometric analysis. High coherence indicates reliable phase information; low coherence suggests volume scattering or temporal decorrelation.

Typical Questions This Tool Helps Answer

  • Which areas of the scene have stable coherence suitable for surface displacement mapping or subsidence monitoring?
  • Where is temporal or volumetric decorrelation too severe to produce reliable interferometric phase, and should those zones be masked?
  • Are the coherence values consistent with the expected land-cover behavior — strong in urban areas, lower in vegetated and agricultural zones?

When To Use This Workflow

Use SAR Interferogram and Coherence when:

  • You have a registered (or registerable) SAR pair and need coherence and/or interferogram products
  • You need embedded acceptance gates in your deliverable for governance or QA purposes
  • You want a compact inline pipeline that handles coregistration and coherence in a single step

For best results, run sar_analysis_readiness on the pair before this tool to confirm scene compatibility.

Background

Coherence quantifies phase stability between two SAR acquisitions:

$$\gamma = \frac{\left|E[s_1 s_2^*]\right|}{\sqrt{E[|s_1|^2]E[|s_2|^2]}}$$

With $\gamma\in[0,1]$, high values indicate stable scattering and reliable interferometric support, while low values suggest decorrelation or poor registration/support.

Physical Decorrelation Components

Observed coherence is often interpreted as the product of multiple effects:

$$\gamma_{obs} \approx \gamma_{geom},\gamma_{temp},\gamma_{vol},\gamma_{snr},\gamma_{proc}$$

Where geometric baseline, temporal change, volumetric scattering, SNR, and processing quality each contribute to coherence loss.

Estimation Trade-Offs

Coherence is estimated over finite windows (or multilook neighborhoods). Larger windows reduce variance but blur fine features; smaller windows preserve detail but increase estimator noise. Production choices should match the scale of the decision task.

Methodological Considerations

  • Enforce strong coregistration before coherence estimation to avoid artificial decorrelation.
  • Use consistent windowing/multilook settings when comparing scenarios or dates.
  • Interpret coherence jointly with land-cover and geometry context; low coherence is not a single-cause diagnosis.

Practical Interpretation Pitfalls

Common errors include using fixed coherence thresholds across heterogeneous terrain, confusing low SNR effects with true temporal change, and over-interpreting isolated high-coherence patches without neighborhood continuity.

Inputs

ArgumentTypeRequiredDescription
reference_sarString pathConditionalReference SAR raster (direct mode).
moving_sarString pathConditionalMoving SAR raster (direct mode).
reference_sar_realString pathConditionalReference real component (complex mode).
reference_sar_imagString pathConditionalReference imaginary component (complex mode).
moving_sar_realString pathConditionalMoving real component (complex mode).
moving_sar_imagString pathConditionalMoving imaginary component (complex mode).
reference_sar_bundleString pathConditionalReference SAR bundle root or archive (bundle mode).
moving_sar_bundleString pathConditionalMoving SAR bundle root or archive (bundle mode).
reference_measurement_keyStringNoMeasurement key within reference bundle.
moving_measurement_keyStringNoMeasurement key within moving bundle.
input_demString pathNoOptional DEM for terrain-context masking.

Parameters

ArgumentTypeDefaultDescription
auto_coregister_pairBoolfalseRun built-in coregistration before coherence.
assume_prealigned_pairBoolfalseAssert pair is on matching grids; skip coregistration.
coreg_modeStringtranslationCoregistration mode for handoff: translation, affine, local_offset_grid.
coreg_max_offset_pxInteger24Max offset searched during auto-coregistration.
coreg_decimationInteger4Sampling stride during auto-coregistration.
coreg_min_overlap_fractionFloat0.20Minimum valid overlap fraction during auto-coregistration.
coherence_windowInteger7Odd-valued estimation window (px).
coherence_decimationInteger1Coherence sampling stride; > 1 uses coarser grid.
performance_profileStringbalancedbalanced or fast.
acceptance_min_valid_fractionFloat0.25Acceptance gate: min valid-sample fraction.
acceptance_min_mean_coherenceFloat0.20Acceptance gate: min mean coherence.
acceptance_max_coreg_residual_mae_pxFloat2.0Acceptance gate: max coreg residual MAE (px).
write_interferogramBooltrueWrite interferogram raster.
write_coherenceBooltrueWrite coherence raster.
write_valid_maskBooltrueWrite valid-sample mask.
write_html_reportBooltrueWrite HTML report.
output_layoutStringstandardGeoTIFF layout: standard or cog.
output_compressionStringnoneGeoTIFF compression: none or deflate.
output_tile_sizeInteger512Tile size for COG layout.
output_prefixStringsar_interferogram_coherenceFile name prefix for output artifacts.

Outputs

OutputTypeDescription
interferogramRasterPhase difference raster.
coherenceRaster (Float32)Per-pixel coherence (0–1).
valid_maskRaster (UInt8)Binary valid-sample mask.
summaryJSONRun metadata, acceptance gates, spatial statistics.
html_reportHTMLHuman-readable coherence report.

Runtime output keys (returned in ToolRunResult.outputs):

KeyPoints to
interferogramInterferogram raster (only present when write_interferogram=true)
coherenceCoherence raster (only present when write_coherence=true)
valid_maskValid-sample mask raster (only present when write_valid_mask=true)
summarySummary JSON artifact
html_reportHTML report (only present when write_html_report=true)

Summary JSON Schema (summary)

Top-level keys:

  • workflow: "sar_interferogram_coherence"
  • schema_version: "1.0.0"
  • acceptance_gates:
    • valid_fraction, valid_fraction_threshold, valid_fraction_pass
    • mean_coherence, mean_coherence_threshold, mean_coherence_pass
    • coreg_residual_gate_applicable, coreg_residual_mae_px, coreg_residual_mae_threshold_px, coreg_residual_mae_pass
    • overall_pass (bool)
  • summary: rows, cols, valid_fraction, mean_coherence
  • coregistration: performed, residual_mae_px, search_best_score
  • parameters: echo of all runtime parameter values

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
env.working_directory = "/data/sar_project"

# Pre-aligned pair
result = env.earth_observation_sar.sar_interferogram_coherence(
    reference_sar="s1_20260401_vv.tif",
    moving_sar="outputs/s1_aligned.tif",
    assume_prealigned_pair=True,
    coherence_window=7,
  output_prefix="outputs/coherence_run"
)

import json
s = json.loads(open(result.outputs["summary"]).read())
print(s["acceptance_gates"]["overall_pass"])
print(s["summary"]["mean_coherence"])

Inline Coregistration Example

result = env.earth_observation_sar.sar_interferogram_coherence(
    reference_sar="s1_20260401_vv.tif",
    moving_sar="s1_20260413_vv.tif",
    auto_coregister_pair=True,
    coherence_window=9,
  output_prefix="outputs/coherence_run"
)

References

  • Rosen, P. A., et al. (2000). Synthetic aperture radar interferometry. Proc. IEEE, 88(3), 333–382.
  • Bamler, R., & Hartl, P. (1998). Synthetic aperture radar interferometry. Inverse Problems, 14(4), R1–R54.
  • Touzi, R., et al. (1999). Coherence estimation for SAR imagery. IEEE TGRS, 37(1), 135–149.

Parameter Interaction Notes

  • auto_coregister_pair=true and assume_prealigned_pair=true are mutually exclusive — setting both is an error.
  • coherence_window and coherence_decimation: large window + decimation > 1 saves runtime at the cost of local spatial detail.
  • acceptance_min_mean_coherence should be adjusted for land cover context: vegetated or water-heavy scenes will naturally report lower values.
  • write_interferogram=false suppresses the interferogram output — use when only coherence is needed.

QA and Acceptance Criteria

  1. Input readiness: use sar_analysis_readiness to confirm scene compatibility first.
  2. Acceptance gate: summary["acceptance_gates"]["overall_pass"] must be true before delivering coherence products.
  3. Mean coherence plausibility: values < 0.2 are expected over vegetation/water; > 0.7 expected over stable urban surfaces.
  4. Valid fraction: if valid_fraction < 0.25, check terrain masking extent and DEM/scene overlap.
  5. Visual review: coherence map should show spatial gradients aligned with land cover; uniform blobs indicate artifacts.

Advanced Operational Guidance

  • For deformation monitoring, use complex component mode for true interferometric phase.
  • Archive summary.json per pair as the canonical processing record.
  • Fix coherence_window and output_compression across all pairs in a multi-date stack to ensure comparability.

Implementation Patterns

  • InSAR prep: sar_analysis_readinesssar_coregistrationsar_interferogram_coherence (with assume_prealigned_pair=true)
  • Inline pipeline: sar_interferogram_coherence with auto_coregister_pair=true
  • Coherence-only: write_interferogram=false to skip interferogram output
  • COG delivery: output_layout=cog, output_compression=deflate
  • sar_coregistration — dedicated coregistration step for full per-burst QA record
  • sar_analysis_readiness — scene pair compatibility validation
  • time_series_change_intelligence — multi-date coherence-stack change analysis

Results Delivery Checklist

  • acceptance_gates.overall_pass=true confirmed
  • coherence raster delivered and visually inspected
  • summary.json archived per pair as processing record
  • valid_fraction reviewed to confirm masking is not excessive
  • HTML report reviewed and attached to project record

Common Questions

Q: What does overall_pass: false mean for my deliverable? A: One or more acceptance gates failed. Check valid_fraction_pass (excessive masking?), mean_coherence_pass (expected for vegetation/water?), and coreg_residual_mae_pass (alignment quality). Each has its own threshold value in the summary for diagnosis.

Q: Mean coherence is 0.12 — is the processing wrong? A: Not necessarily. Values below 0.2 are normal over dense vegetation, agricultural land, or scenes spanning seasonal change. Check valid_fraction to confirm enough valid samples are present, then consider whether low coherence is physically meaningful given the land cover.

Q: Should I run sar_coregistration first, or use auto_coregister_pair=true? A: Use the standalone sar_coregistration tool when you need the per-burst diagnostic transform JSON as a separate QA record. Use auto_coregister_pair=true for a compact pipeline when only the coherence product and summary JSON are needed.

Q: What does coherence_window=7 mean for my spatial resolution? A: Coherence is estimated over a 7×7 pixel neighborhood. Larger windows produce smoother maps at the cost of spatial detail. For Sentinel-1 IW (10 m pixels), the effective resolution of the coherence estimate is ~70 m.