diff --git a/lidar_pipeline/visualizations.py b/lidar_pipeline/visualizations.py index 596a0e9..7daaa83 100644 --- a/lidar_pipeline/visualizations.py +++ b/lidar_pipeline/visualizations.py @@ -1550,7 +1550,11 @@ def generate_anomaly_mask(dem_file, basename, vis_dir, resolution, shared=None, # With n_sigma=2.0 → 80th percentile: keep only the top 20% of signal. # This adapts to each tile's terrain instead of a fixed z-score cutoff. threshold_pct = max(50, min(95, 100 - n_sigma * 10)) - threshold_val = np.percentile(combined[~nan_mask], threshold_pct) + combined_valid = combined[~nan_mask] + if combined_valid.size == 0: + logger.warning(" ✗ Détection anomalies : tuile 100 % nodata") + return None + threshold_val = np.percentile(combined_valid, threshold_pct) combined = np.clip(combined - threshold_val, 0, None) # Rescale survivors to 0–1