Recaler les lignes de balayage des passes et accélérer le rendu

Troisième passe du calage vertical : chaque ligne de balayage (décalage et
inclinaison due au roulis) est recalée contre le consensus des autres
faisceaux, à toutes les échelles, avec un profil d'étalonnage par faisceau
et par degré d'angle qui retire les écarts non linéaires en travers de la
fauchée. Les lignes sans recouvrement sont corrigées contre leur propre
faisceau. Efface les lignes en creux et la marche au bord de fauchée
mesurées sur LHD_FXX_0999_6882 (validé sur des blocs jamais vus). Calcul
vectorisé, CuPy si GPU ; la gigue par fenêtres de temps devient inutile
quand scan_angle existe.

Rendu plus rapide : encodage AVIF speed 9 (0,6 s au lieu de 4 s par dalle),
classification IGN par extraction directe laspy au lieu de PDAL (4,9 s au
lieu de 13,5 s), comblement des trous et gradients sur GPU, cache numba
persistant dans l'image.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Antoine Jacquin
2026-09-27 01:57:04 +02:00
parent 31645a42e8
commit d32502b74e
9 changed files with 712 additions and 13 deletions

View File

@ -30,6 +30,7 @@ TILE_MAX_NATIVE_Z = 19 # 0,2 m/px ≈ résolution du z19 à la latitude
TILE_DIRNAME = "index_xyz" # cache disque, sous le dossier de sortie
WEBP_QUALITY = 78
AVIF_QUALITY = 60
AVIF_SPEED = 9 # encodage rapide (cf. rendering.AVIF_SPEED : ×7, +3 % de taille)
# PNG palettisé (PNG8 + alpha) : ~5× plus léger (170 → 32 Ko sur une dalle
# réelle) pour un écart moyen de ~4 niveaux sur une rampe de couleur. Laissé
# DÉSACTIVÉ par défaut : le PNG canonique reste sans perte, la fidélité prime
@ -727,7 +728,7 @@ def _encode(img, fmt):
elif fmt == "webp":
img.save(buf, format="WEBP", quality=WEBP_QUALITY)
elif fmt == "avif":
img.save(buf, format="AVIF", quality=AVIF_QUALITY)
img.save(buf, format="AVIF", quality=AVIF_QUALITY, speed=AVIF_SPEED)
else:
raise ValueError(f"format de tuile inconnu : {fmt}")
return buf.getvalue()