Contexte
Les sites intérieurs sont souvent documentés avec une caméra sur stabilisateur tenue à la main plutôt qu’avec un scanner de qualité topographique. L’objectif était de transformer ces vidéos en livrables 3D exploitables (nuage dense, maillage texturé, orthovues en plan et en élévation, scène Gaussian Splatting et exports web légers), sans aucune étape manuelle entre la captation et le résultat. La chaîne de traitement s’exécute nativement sous Windows sur une RTX 5090 (Blackwell, sm_120) partagée avec d’autres charges GPU de longue durée ; elle ne doit donc jamais les préempter.
Approche
Méthodes
- Sélection d’images clés guidée par le recouvrement. Un suivi KLT associé à une similitude estimée par RANSAC évalue le recouvrement avec la dernière image clé. Une image est émise lorsque le recouvrement descend sous 0,80, que le suivi est perdu ou qu’une limite de temps est atteinte. Le candidat le plus net (variance du laplacien) est celui retenu.
- SfM avec contrôle qualité explicite. Le mapper global de COLMAP est rapide mais non déterministe. Lors des essais, il a produit des reconstructions qui satisfaisaient les critères d’enregistrement et de reprojection tout en étant géométriquement incohérentes. Un contrôle de continuité de trajectoire (sauts supérieurs à 25 fois le pas médian de la caméra) déclenche un repli automatique sur le mapper incrémental. En dessous de 20 points par image, l’étape échoue.
- Fiabilisation du MVS. Le binaire Windows officiel d’OpenMVS ne contient que des noyaux sm_89 ; il a donc été recompilé pour sm_120. La ROI objet est désactivée pour les pièces car elle rognait le nuage. Le raffinement est abandonné lorsqu’il diverge, et le nivellement des coutures (qui noircissait des faces) est désactivé.
- Orthovues prêtes pour la métrique. L’axe vertical est déduit des orientations des caméras. Un plan de sol estimé par RANSAC fixe z = 0 et un histogramme des azimuts des normales aux murs (modulo 90°) fixe le lacet Manhattan. Une référence optionnelle à deux points fixe l’échelle. La transformation 4×4 est conservée afin d’être réappliquée au maillage et au splat.
- Gaussian Splatting. gsplat 1.6.0 a été compilé pour sm_120 avec CUDA 13 sous MSVC, ce qui a nécessité des correctifs locaux. L’entraînement utilise la stratégie MCMC avec un budget de gaussiennes et se replie sur la stratégie 3DGS par défaut lorsque MCMC diverge.
- Exploitation. Les projets démarrent en mode dossier surveillé dès qu’un fichier GO
apparaît. Les étapes peuvent être reprises ou refaites. Une garde GPU attend qu’une
quantité suffisante de VRAM soit libre pendant une période stable, sérialise les étapes
GPU via un fichier verrou et enregistre le pic de VRAM par étape dans
report.json. Un contrôle qualité dégradé produit un statutDONE_WITH_ALERTSplutôt qu’un succès silencieux.
Résultats
Premier déploiement réel : cinq emplacements dans un showroom commercial, une vidéo 4K tournée à la main par emplacement, traitée sans intervention en environ 30 minutes par emplacement.
| Emplacement | Images | SfM enregistrées / points / reproj. | Nuage dense | PSNR / SSIM du splat |
|---|---|---|---|---|
| 1 | 116 | 116/116 · 21 458 · 1,49 px | 1,40 M | 23,2 / 0,86 |
| 2 | 103 | 103/103 · 18 972 · 1,75 px | 1,23 M | 20,6 / 0,81 |
| 3 | 47 | 47/47 · 13 167 · 1,17 px | 1,26 M | 23,1 / 0,86 |
| 4 | 121 | 121/121 · 11 970 · 1,34 px | 1,99 M | 21,9 / 0,85 (stratégie par défaut) |
| 5 | 64 | 64/64 · 12 106 · 1,48 px | 0,91 M | 21,8 / 0,83 |
- Toutes les images ont été enregistrées pour chaque emplacement. L’erreur de reprojection était de 1,17–1,75 px.
- Pics de VRAM mesurés : SIFT +1,3 Go, appariement +1,6 Go, texturation +0,5 Go, Blender +5,4 Go, et splatting avec 3 M de gaussiennes à 1920 px +25,2 Go.
- Le build OpenMVS sm_120 a densifié le test de validation rapide synthétique en 17 s. Le repli CPU a pris environ 40 min.
- L’analyse des métadonnées a révélé des vitesses d’obturation de 1/50–1/100 s (environ
14 px de flou de bougé en 4K) ainsi qu’une sensibilité ISO et une balance des blancs
automatiques. La compensation d’exposition de gsplat (
ppisp) n’a apporté aucun gain (PSNR 20,5 contre 20,6). La limite de qualité tient à la captation, pas au solveur.
Limites & suite
- Un PSNR d’à peine plus de 20 reflète le flou de bougé et l’exposition automatique. Le protocole de captation impose désormais une vitesse d’obturation de 1/250–1/500 s, une exposition et une balance des blancs verrouillées, ainsi qu’un passage dédié au sol.
- La fusion de vidéos provenant d’emplacements différents a provoqué de faux appariements et un modèle incohérent ; chaque emplacement est donc traité séparément.
- Les sols carrelés sombres et brillants se reconstruisent mal. L’alignement Manhattan n’est pas encore fiable en présence de mobilier et de vitrages.
- Les étapes CPU constituent le goulot d’étranglement sur une machine virtuelle à 4 vCPU.
- Prévu : comparaison avec une suite de photogrammétrie commerciale sur les mêmes images, et nouvel essai du raffinement de maillage avec le build sm_120.
Stack technique
Python 3.11 · OpenCV · Open3D · NumPy · COLMAP 4.2.1 · OpenMVS 2.4 · gsplat 1.6.0 · PyTorch 2.14 (CUDA 13) · Blender 5.2 · FFmpeg · PotreeConverter · glTF-Transform · splat-transform