<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Photogrammétrie on Boris Dupoux</title><link>https://borisdupoux.com/fr/categories/photogramm%C3%A9trie/</link><description>Recent content in Photogrammétrie on Boris Dupoux</description><generator>Hugo -- gohugo.io</generator><language>fr</language><lastBuildDate>Thu, 01 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://borisdupoux.com/fr/categories/photogramm%C3%A9trie/index.xml" rel="self" type="application/rss+xml"/><item><title>De la vidéo tournée à la main à la photogrammétrie et au Gaussian Splatting</title><link>https://borisdupoux.com/fr/research/photogrammetry-splatting/</link><pubDate>Thu, 01 Oct 2026 00:00:00 +0000</pubDate><guid>https://borisdupoux.com/fr/research/photogrammetry-splatting/</guid><description>&lt;h2 id="contexte"&gt;&lt;a href="#contexte" class="header-anchor"&gt;&lt;/a&gt;Contexte
&lt;/h2&gt;&lt;p&gt;Les sites intérieurs sont souvent documentés avec une caméra sur stabilisateur
tenue à la main plutôt qu&amp;rsquo;avec un scanner de qualité topographique. L&amp;rsquo;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&amp;rsquo;exécute nativement sous Windows sur une RTX 5090 (Blackwell, sm_120)
&lt;strong&gt;partagée avec d&amp;rsquo;autres charges GPU de longue durée&lt;/strong&gt; ; elle ne doit donc jamais les préempter.&lt;/p&gt;
&lt;h2 id="approche"&gt;&lt;a href="#approche" class="header-anchor"&gt;&lt;/a&gt;Approche
&lt;/h2&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart TB
 A["inbox/projet/vidéos + fichier GO"] --&gt; B["Extraction d'images clés&lt;br/&gt;recouvrement par flot optique + netteté"]
 B --&gt; C["SfM COLMAP 4.2.1&lt;br/&gt;SIFT, mapper global"]
 C --&gt; D{"Contrôle qualité : enregistrement, reprojection,&lt;br/&gt;continuité de trajectoire"}
 D -- échec --&gt; C2["Repli : mapper incrémental"] --&gt; D
 D -- succès --&gt; E["OpenMVS 2.4 (build sm_120)&lt;br/&gt;densification, maillage, raffinement, texture"]
 E --&gt; F["Alignement ortho&lt;br/&gt;gravité, sol par RANSAC, lacet Manhattan"]
 F --&gt; G["Rendus Blender&lt;br/&gt;orthos, axonométries, orbite"]
 E --&gt; H["Entraînement gsplat&lt;br/&gt;stratégie MCMC ou par défaut"]
 G --&gt; I["Exports web&lt;br/&gt;Potree, GLB, SOG"]
 H --&gt; I
 I --&gt; J["outbox : livrables, report.json, STATUS"]&lt;/pre&gt;&lt;h2 id="méthodes"&gt;&lt;a href="#m%c3%a9thodes" class="header-anchor"&gt;&lt;/a&gt;Méthodes
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sélection d&amp;rsquo;images clés guidée par le recouvrement.&lt;/strong&gt; 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&amp;rsquo;une limite de temps est atteinte. Le candidat le plus net (variance du laplacien)
est celui retenu.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SfM avec contrôle qualité explicite.&lt;/strong&gt; 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&amp;rsquo;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&amp;rsquo;étape échoue.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fiabilisation du MVS.&lt;/strong&gt; Le binaire Windows officiel d&amp;rsquo;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&amp;rsquo;il diverge,
et le nivellement des coutures (qui noircissait des faces) est désactivé.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Orthovues prêtes pour la métrique.&lt;/strong&gt; L&amp;rsquo;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&amp;rsquo;échelle. La transformation 4×4 est conservée afin d&amp;rsquo;être réappliquée au
maillage et au splat.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gaussian Splatting.&lt;/strong&gt; gsplat 1.6.0 a été compilé pour sm_120 avec CUDA 13 sous
MSVC, ce qui a nécessité des correctifs locaux. L&amp;rsquo;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.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exploitation.&lt;/strong&gt; Les projets démarrent en mode dossier surveillé dès qu&amp;rsquo;un fichier GO
apparaît. Les étapes peuvent être reprises ou refaites. Une garde GPU attend qu&amp;rsquo;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 &lt;code&gt;report.json&lt;/code&gt;.
Un contrôle qualité dégradé produit un statut &lt;code&gt;DONE_WITH_ALERTS&lt;/code&gt; plutôt qu&amp;rsquo;un succès silencieux.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="résultats"&gt;&lt;a href="#r%c3%a9sultats" class="header-anchor"&gt;&lt;/a&gt;Résultats
&lt;/h2&gt;&lt;p&gt;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.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Emplacement&lt;/th&gt;
					&lt;th&gt;Images&lt;/th&gt;
					&lt;th&gt;SfM enregistrées / points / reproj.&lt;/th&gt;
					&lt;th&gt;Nuage dense&lt;/th&gt;
					&lt;th&gt;PSNR / SSIM du splat&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;1&lt;/td&gt;
					&lt;td&gt;116&lt;/td&gt;
					&lt;td&gt;116/116 · 21 458 · 1,49 px&lt;/td&gt;
					&lt;td&gt;1,40 M&lt;/td&gt;
					&lt;td&gt;23,2 / 0,86&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;2&lt;/td&gt;
					&lt;td&gt;103&lt;/td&gt;
					&lt;td&gt;103/103 · 18 972 · 1,75 px&lt;/td&gt;
					&lt;td&gt;1,23 M&lt;/td&gt;
					&lt;td&gt;20,6 / 0,81&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;3&lt;/td&gt;
					&lt;td&gt;47&lt;/td&gt;
					&lt;td&gt;47/47 · 13 167 · 1,17 px&lt;/td&gt;
					&lt;td&gt;1,26 M&lt;/td&gt;
					&lt;td&gt;23,1 / 0,86&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;4&lt;/td&gt;
					&lt;td&gt;121&lt;/td&gt;
					&lt;td&gt;121/121 · 11 970 · 1,34 px&lt;/td&gt;
					&lt;td&gt;1,99 M&lt;/td&gt;
					&lt;td&gt;21,9 / 0,85 (stratégie par défaut)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;5&lt;/td&gt;
					&lt;td&gt;64&lt;/td&gt;
					&lt;td&gt;64/64 · 12 106 · 1,48 px&lt;/td&gt;
					&lt;td&gt;0,91 M&lt;/td&gt;
					&lt;td&gt;21,8 / 0,83&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;Toutes les images ont été enregistrées pour chaque emplacement. L&amp;rsquo;erreur de reprojection était de 1,17–1,75 px.&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;L&amp;rsquo;analyse des métadonnées a révélé des vitesses d&amp;rsquo;obturation de 1/50–1/100 s (environ
14 px de flou de bougé en 4K) ainsi qu&amp;rsquo;une sensibilité ISO et une balance des blancs
automatiques. La compensation d&amp;rsquo;exposition de gsplat (&lt;code&gt;ppisp&lt;/code&gt;) n&amp;rsquo;a apporté aucun gain
(PSNR 20,5 contre 20,6). La limite de qualité tient à la captation, pas au solveur.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="limites--suite"&gt;&lt;a href="#limites--suite" class="header-anchor"&gt;&lt;/a&gt;Limites &amp;amp; suite
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Un PSNR d&amp;rsquo;à peine plus de 20 reflète le flou de bougé et l&amp;rsquo;exposition automatique. Le
protocole de captation impose désormais une vitesse d&amp;rsquo;obturation de 1/250–1/500 s, une
exposition et une balance des blancs verrouillées, ainsi qu&amp;rsquo;un passage dédié au sol.&lt;/li&gt;
&lt;li&gt;La fusion de vidéos provenant d&amp;rsquo;emplacements différents a provoqué de faux appariements
et un modèle incohérent ; chaque emplacement est donc traité séparément.&lt;/li&gt;
&lt;li&gt;Les sols carrelés sombres et brillants se reconstruisent mal. L&amp;rsquo;alignement Manhattan
n&amp;rsquo;est pas encore fiable en présence de mobilier et de vitrages.&lt;/li&gt;
&lt;li&gt;Les étapes CPU constituent le goulot d&amp;rsquo;étranglement sur une machine virtuelle à 4 vCPU.&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="stack-technique"&gt;&lt;a href="#stack-technique" class="header-anchor"&gt;&lt;/a&gt;Stack technique
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Python 3.11&lt;/code&gt; · &lt;code&gt;OpenCV&lt;/code&gt; · &lt;code&gt;Open3D&lt;/code&gt; · &lt;code&gt;NumPy&lt;/code&gt; · &lt;code&gt;COLMAP 4.2.1&lt;/code&gt; · &lt;code&gt;OpenMVS 2.4&lt;/code&gt; · &lt;code&gt;gsplat 1.6.0&lt;/code&gt; · &lt;code&gt;PyTorch 2.14 (CUDA 13)&lt;/code&gt; · &lt;code&gt;Blender 5.2&lt;/code&gt; · &lt;code&gt;FFmpeg&lt;/code&gt; · &lt;code&gt;PotreeConverter&lt;/code&gt; · &lt;code&gt;glTF-Transform&lt;/code&gt; · &lt;code&gt;splat-transform&lt;/code&gt;&lt;/p&gt;</description></item></channel></rss>