Planting index
Counting cropping cycles: 1Γ, 2Γ, 3Γ per year
π English Β· Bahasa Indonesia β
The idea
The planting index (cropping intensity, indeks pertanaman) answers how many times a field is planted in one agricultural year. We derive it directly from the VH time series with a data-driven cycle counter: no fixed calendar, no absolute-dB threshold.
Each rice cycle is a flood trough β canopy peak swing. A per-pixel state machine walks the time series and counts a cycle whenever VH rises by at least a minimum amplitude (β4 dB) above a running minimum, then re-arms after it falls back down. The number of complete cycles is the planting index for that pixel (reported 1 / 2 / 3+).
Counting periods a pixel βlooks like paddyβ over-counts (transient look-alikes inflate it). Requiring a full floodβcanopy amplitude swing is physically grounded and rejects those artefacts.
Step 1 β Validate the counter (optional)
cropping_intensity.py can sanity-check its vectorized counter against an independent rice map (single/double/triple classes) before running on your stack:
python cropping_intensity.py --mode validate \
--stack data/sample/klambu_vh_2024.tif # or your own multi-year stackThe mean detected cycles should increase monotonically from the single- to the triple-crop reference class β evidence the counter tracks real intensity. Verified output on the full Java stack:
Open-SEA CI=1: n=400 mean detected=1.77
Open-SEA CI=2: n=400 mean detected=2.06
Open-SEA CI=3: n=400 mean detected=2.31
Step 2 β Compute cropping intensity on the AOI
Run the full mode on your AOI stack. The candidate mask makes the result rice-specific β use your paddy consensus (recommended) or a baku-sawah/cadastre layer; without one, use --no-candidate (cycles only, less specific).
python cropping_intensity.py --mode full \
--stack <your-multi-year-vh-stack.tif> \
--candidate-mask consensus_sample/consensus_paddy_map.tif \
--output cropping_intensity_sample--mode full counts cycles over the MT 2024/25 agricultural-year window, which the script reads from bands 25β56 of the combined 2024β2026 stack. The small single-year sample AOI (18 bands) does not cover that window β point --stack at your full multi-year stack, or edit MT_BANDS in the script for a different band range. The --mode validate step above does run on the sample.
On the small single-year sample, the within-year consensus mask (few periods, strict thresholds) can be nearly empty, so the cropping-intensity map here is sparse and illustrative only β it shows the mechanics, not a representative product. For a meaningful map, use more periods and the full multi-year stack.
Outputs:
cropping_intensity_sample/
βββ cropping_intensity.tif # uint8: 0 non-paddy, 1 / 2 / 3(=3+) crops
βββ paddy_mask.tif # 1 where β₯1 cycle
βββ statistics.txt # area per class + aggregate index
statistics.txt reports the aggregate cropping index (mean cycles over paddy) and the ha in each class.
- Anomalous ~0 dB bands (acquisition/processing gaps) are auto-detected and interpolated β two such bands otherwise fake an extra canopy swing and inflate the index.
- Pixel area at 50 m β 0.25 ha; the script uses this, so areas are correct.
What the full study shows
On Java for MT 2024/25, the aggregate index is β1.62 on the stable-consensus footprint, with a clear spatial pattern β triple-cropping concentrates along water-secure corridors (Pantura, Bengawan Solo).

An inter-annual comparison on identical pixels rose from IP 1.45 (MT 2023/24) β 1.63 (MT 2024/25) β the planted area barely changed, but intensity went up (more double- and triple-cropping), consistent with post-El-NiΓ±o water recovery. That signal β climate variability driving cropping intensity β is the scientifically interesting part of the multi-year record.
Choosing the footprint
The cropping-intensity extent depends on the candidate mask you pass:
- your consensus mask β the map nests inside your paddy map (recommended, coherent);
- a cadastre/baku-sawah mask β the map is clipped to the official footprint;
--no-candidateβ cycles over all land (rejects nothing non-rice β use with care).
Keep the footprint consistent with the paddy map so the two products tell one story.
Next: convert phenology into water demand and compute irrigation performance β Irrigation performance.