← All projects
Remote-sensing research

BIOMASS Demak — flood detection at 435 MHz

Can ESA's P-band BIOMASS mission see flooding in Javanese rice paddies? Scored honestly against ground water-level pipes and a label-shuffle null, mostly no — and the reasons why turned out to be the interesting part.

PythonRemote SensingResearchSAR
BIOMASS Demak — flood detection at 435 MHz

BIOMASS Demak

ESA's BIOMASS is the first spaceborne P-band SAR — 435 MHz, a wavelength long enough to see through canopy. This study asked whether it can detect flooding in the rice paddies at Demak, Central Java, scored against RIZE water-level pipes installed in the fields themselves.

The headline is a negative one

Flood detection here is hard, and most of the apparent skill is not real. Scored against a label-shuffle null that permutes within track and refits the cutoff on every permutation, only the unsupervised Matgen chain survives (M1 p=0.014, M3 p=0.034, M2 p=0.046). Every supervised row fails — because fitting a cutoff to shuffled labels already earns MCC 0.13–0.18. The best honest MCC is about 0.35, against a feature-imposed ceiling near 0.4.

Reporting that is the whole point. A number that does not survive its own null is not a result.

Two structural findings

The effect flips sign by track. Flooding brightens the signal by +1.66 dB in T007 and darkens it by −2.37 dB in T043 (p 0.047 and 0.042), while the dry-pipe baselines from the two tracks agree to 0.09 dB — so there is no calibration offset to blame it on. The practical consequence: stratify by track, do not standardise across them.

There is no dihedral signature at Demak. Not one of 165 co-pol covariance observations exceeds |arg γ| > 90°, so flooded paddies here are not behaving as corner reflectors. That explains why the amplitude-only HH−VV index has no skill, and why flooding shows up as specular darkening instead.

Repeat-pass coherence carries no water signal at all: |γ| 0.250 flooded against 0.249 dry, AUC 0.505 — chance.

How it is built

A library package of nouns that imports cleanly with no side effects, numbered scripts as the verbs of the pipeline (exp_* for experiments), and pytest over both. Every figure and every method is reproducible from the repository, including the findings that did not work out.