=== versions === python 3.12.0 | pystac-client 0.9.0 | planetary-computer 1.0.0 | rasterio 1.5.2 | numpy 2.5.4 | scipy 1.18.1 | geopandas 1.2.0 === STAC search === 13 scene slices from relative orbit 110; dates covering the whole box: 2026-09-05, 2026-09-11, 2026-09-17, 2026-09-23, 2026-09-29, 2026-10-11 2026-10-11: S1C_IW_GRDH_1SDV_20261011T055745_20261011T055810_009833_01397D_rtc, S1C_IW_GRDH_1SDV_20261011T055720_20261011T055745_009833_01397D_rtc platform sentinel-1c | descending | polarisations ['VV', 'VH'] | ENL 4.4 | EPSG:32631 === land mask === grid 4860 x 5066 pixels at 10 m (48.6 x 50.7 km) WorldCover land 11.0%; open sea after a 250 m coastal buffer: 2,133 km² (86.6%) === CA-CFAR === Pfa 1e-06, ENL 4.4: threshold = 5.04 x local clutter mean (7.0 dB above it) background ring 410 m to 1010 m wide; expected false-alarm pixels over pure gamma speckle: 21 detected pixels: VV 9,984, VH 25,941 VV: sea clutter median -9.6 dB; isolated speckle hits (clusters < 4 px) 623 = 2.9e-05 of sea pixels VH: sea clutter median -25.1 dB; isolated speckle hits (clusters < 4 px) 892 = 4.2e-05 of sea pixels === targets === 1,251 connected blobs in VV or VH -> 208 targets after merging blobs within 250 m and dropping those under 4 pixels seen in both 144, VV only 19, VH only 45 median target-to-clutter ratio of targets seen in both: VV 16.6 dB, VH 23.2 dB === sidelobes and ambiguities === brightest target: VH 54.1 dB above clutter at row 602, col 4200 its sidelobe cross gives azimuth 9.2° and range 99.2° (grid bearings) azimuth ambiguity offset lambda*R*PRF/(2V) for IW: 4.0-6.5 km targets on the sidelobe cross of one >= 10 dB brighter: 35 targets at the ambiguity offset of one >= 10 dB brighter: 6 === persistence across dates === 5 other passes; main-date targets also found within 100 m on n other passes: {0: 94, 1: 18, 2: 7, 3: 7, 4: 6, 5: 76} class vessel 87 fixed structure 80 sidelobe 35 possible ambiguity 6 === OpenStreetMap check === 64 OSM wind turbines over open sea in the box; 100% have a target within 100 m (median offset 39 m) fixed structures within 100 m of an OSM turbine: 63 of 80 === result 2026-10-11 === 87 vessels written to output/ship_detections_2026-10-11.geojson (all 208 targets kept, with a class column) vessel extent median 152 m, largest 544 m; seen in VV 82%, in VH 79%, in both 61% class pixels blobs extent_m tcr_vv_db tcr_vh_db in_vv in_vh dates_seen lon lat vessel 376.0 1 544.5 48.7 54.1 True True 3 4.16453 52.24682 vessel 482.0 9 495.2 43.0 29.3 True True 1 3.99061 51.97583 vessel 280.0 3 374.8 41.8 22.5 True True 0 4.22320 52.20756 vessel 417.0 6 389.0 38.7 33.0 True True 1 3.57532 51.90549 vessel 227.0 9 330.2 35.9 31.8 True True 0 4.25611 52.19563 === vessel counts per pass === date platform targets fixed artefacts vessels 2026-09-05 sentinel-1c 239 79 48 112 2026-09-11 sentinel-1d 250 75 30 145 2026-09-17 sentinel-1c 258 79 48 131 2026-09-23 sentinel-1d 305 79 54 172 2026-09-29 sentinel-1c 349 78 103 168 2026-10-11 sentinel-1c 208 80 41 87 mean 136 vessels per pass, range 87-172 === figures === saved output/01-scene-vv-vh-land-mask.png saved output/02-cfar-window-and-threshold.png saved output/03-vv-vs-vh-anchorage.png saved output/04-detections-map.png saved output/05-sidelobes-and-turbines.png saved output/06-counts-and-sizes.png