Published October 4, 2026 | Version v1

Detectability of orangutan nests at satellite resolution (Pleiades Neo, 30 cm) - simulation code and results

Authors/Creators

  • 1. ROR icon Université de Strasbourg
  • 2. ROR icon Université Catholique de Lille

Description

Detectability of orangutan nests at satellite resolution (Pleiades Neo, 30 cm) - simulation code and results

- sim.py: sensor degradation model (Gaussian optics + detector integration, MTF ~0.15 at Nyquist; 1 % noise;
  products: colour, panchromatic, pansharpened 30 cm / 1.2 m)
- expB2.py: paired implant design (32 real nests rescaled to 0.8-1.3 m and inserted into nest-free canopy chips
  from the PeerJ "Without_nest" frames; the same chip without the nest is the control)
    BLEND=alpha|poisson python3 expB2.py frozen   -> frozen ResNet50 features + logistic regression
    BLEND=alpha|poisson python3 expB2.py cnn      -> small CNN trained at satellite pixel size
  Five-fold cross-validation grouped by nest; AUC with 95 % bootstrap CI over nests; recall at 5 % and 1 % false-positive rate.
- nestloc.json: centre and diameter (px) of each nest in the "nests pictures" folder
- res_*.json: results
- make_figure2.py: Figure 2 (AUC versus resolution)
- make_figure3.py: Figure 3 (dedicated network AUC, nests found vs false-alarm rate, individuals relocated)
Assumption: native GSD 3.5 cm (Canon S100, f = 5.2 mm, ~100 m above the canopy).

Additional analyses (from nests to individuals)
- run_strict.py: recall at strict false-alarm rates (21 000 held-out nest-free chips) -> res_strict.json
- reg_test.py + run_twodate.py: co-registration of consecutive frames and two-date change detection -> res_twodate.json
- sim_spatial.py, sim_lift.py: forest blocks of 1 km2, nests along travel paths, block flagging -> res_spatial*.json, res_lift.json

Published detector and Grad-CAM (Sections 3.1 and 3.2)
- detect.py, detect_sizes.py: detector of Wich et al. (2025) applied to the PeerJ frames (tiles, and whole frames at 640/1280/1920 px) -> dets_native.json, dets_sizes.json
- tm.py: template matching of the 32 close-up nest photographs against the drone frames -> tm.json
- gradcam.py: retrains the dedicated CNN on the same chips and computes Grad-CAM maps on held-out nests -> gradcam_chips.csv, gradcam_examples.npy (not included, regenerated by the script)
- make_figure_gradcam.py: Figure 2 (Grad-CAM); make_figure2.py now draws Figure 3 and make_figure3.py Figure 4

Statistical analyses (R)
- export_for_R.py: writes the per-chip CSV files used by R
- stats_R/analysis.R: all statistical tests (pROC: AUC with DeLong CI; lme4: mixed-effects logistic regression, odds ratios;
  Wilcoxon, Fisher, McNemar and binomial tests). Open stats_R/nest_stats.Rproj in RStudio and run source("analysis.R").
  Output: stats_R/results_R.txt (R 4.3.3, pROC 1.18.5, lme4 1.1.35.1).

Sensitivity to sensor sharpness (Section 4.2)
- sim.py now reads SIGMA_K (default 0.542, MTF at Nyquist ~0.15; 0.391 gives ~0.30)
- SIGMA_K=0.391 BLEND=mtf30 python3 mtf_sensitivity.py -> res_B2_cnn_mtf30.json

Files

block_flagging.csv

Files (1.4 MB)

Name Size Download all
md5:6e82852f2e8b4029be5eabf5d9e40367
5.9 kB Download
md5:a4f17ddeb69cc78540724ca26ec352ec
1.0 kB Preview Download
md5:46f34ca3a637d83222403aae21324473
669.0 kB Preview Download
md5:35d8562a6a332f8b484e7da4fb6ba326
1.1 kB Download
md5:1b9b63b01209fd2c9a0646da8c819c18
744 Bytes Download
md5:869b3c293ca6374072aa55338a796adf
21.6 kB Preview Download
md5:7db92c661ac50bbd1c4c41e8f6817017
104.3 kB Preview Download
md5:7e4556baa5d25aa9ddb8e37978453e7e
8.6 kB Download
md5:4bee7284e9b9a80a8ab09562f40a6401
3.6 kB Download
md5:c58883e557931368ba02b85397c5a314
6.8 kB Download
md5:f334919e6f2f72aa44c63340729c53ee
236.9 kB Preview Download
md5:a08bda4bfc35e24e35d40b26c90f8717
2.6 kB Download
md5:82f7beea26a2d092878f2dd38b56c9bd
3.5 kB Download
md5:6bb4d358f899befb85e8b3ff5e5adf77
2.4 kB Download
md5:85ebab77dd157f5b9e83f97edcb1dc56
520 Bytes Download
md5:c82387e551bd6098ec0d8bcf3e9c22c7
92 Bytes Download
md5:c2863cc2ffef36b2e7cb646c6bb8f672
5.9 kB Preview Download
md5:8088d618932d04360dca62fd051d887c
27.5 kB Preview Download
md5:6e8d400d420c1280698653efdd10925a
2.8 kB Preview Download
md5:55c3f97494ea5534405dd3ad7a099ccf
1.4 kB Download
md5:76dd44b63721213435c4db4168650aa6
833 Bytes Preview Download
md5:f36f3a0cf87f2d7caedc5e7017ba8659
505 Bytes Preview Download
md5:b4b932a2817c0b22e562d117a3380198
836 Bytes Preview Download
md5:2c9ee0969b53673a1e1216b887b32c7d
3.2 kB Preview Download
md5:39f42e1a2e6379e18aa769d16bb4ed10
3.1 kB Preview Download
md5:bc7138b699f7f57d58401084071d85ed
2.5 kB Preview Download
md5:fa674ee8fc3e672df099a7b5ad413b33
1.2 kB Preview Download
md5:4e37af51e0b14daa2e71bea787a1c5b0
573 Bytes Preview Download
md5:83fa4d05d1181edce1f3eb5e3579f009
577 Bytes Preview Download
md5:4394f7b9a6a7db6d17c274be4c68de66
802 Bytes Preview Download
md5:95b2e1efbb7165405b92cbf7a14df3fe
5.0 kB Preview Download
md5:c96014968dac220609506e1a7050c36f
3.8 kB Download
md5:0bec14e174bbe1b24b36d744f930f20e
6.7 kB Download
md5:da643633f9bb2f0631ddfe919ac5def0
2.0 kB Download
md5:c481a4128e77a2c632a5c383f9b6fccb
708 Bytes Download
md5:5c538a7293efe6009433453ec35f310c
3.6 kB Download
md5:fe36a952ff8776bd8ed1e686e635a925
163.1 kB Preview Download
md5:4a137b9853010d01dd5fc73d3db80515
7.3 kB Preview Download
md5:1e499238ee52a9d2c7a4509dc2a4fbdc
891 Bytes Download
md5:8f9f3924077dea3cdbf56ea02e34a868
67.4 kB Preview Download