Photogrammétrie avec Meshroom
Le principe
La photogrammétrie est une technique permettant de réaliser des mesures et d’obtenir un modèle 3D d’une scène, à partir de photos. Les applications sont par exemple :
- la réalisation de modèles numériques de terrains à partir de photos aériennes
- reconstitution 3D de sites archéologiques
- métrologie de pièces industrielles
- scan 3D de pièces
Le processus de réalisation est donc sur le principe relativement simple : on effectue une série de photos et on laisse la partie logicielle travailler… Pour chaque paire de photos le logiciel va chercher des points de concordance et réaliser un modèle 3D.
Matériel nécessaire
Un appareil de prise de vue : appareil photo reflex ou compact ou encore un smartphone. En toute logique c'est le reflex qui permettra d'obtenir un meilleur résultat par la qualité des photos obtenues et les réglages possibles : exposition, balance de blancs, ouverture, sensibilité, temps de pose…
Un ordinateur : la reconstruction est entièrement logicielle, il faut donc pouvoir bénéficier d'un ordinateur avec des capacités de calcul assez élevées en terme de CPU, RAM et GPU. Aussi la plupart des logiciels de reconstruction 3D s'appuient sur une technique de calcul par processeur graphique propriétaire nommée CUDA qui n'est possible que sur les cartes graphiques de marque NVIDIA.
La prise de vue
Il s’agit de prendre une série de photos en tournant autour de l’objet avec un taux de recouvrement assez important d’une photo à l’autre (~80%) depuis des angles de vue différents afin de ne laisser aucune zone non photographiée. Si la mise en œuvre paraît simple au premier abord, le matériel utilisé, la texture de l’objet et l’éclairage utilisé rentrent en compte dans la qualité du résultat final. Quelques conseils :
- utiliser un reflex permet d’obtenir une image avec un piqué (netteté) plus important et un bruit minimum ce qui permet de faciliter la recherche de points clefs en évitant les artefacts.
- utiliser un éclairage uniforme pour éviter les reflets et ombres sur l’objet. L’utilisation d’un flash direct est à proscrire car les ombres d’une photo à l’autre ne seront pas dirigées dans la même direction. La prise de vue en extérieur, avec un temps nuageux permet d’obtenir une lumière bien plus diffuse qu’un soleil estival qui va générer des ombres marquées.
- utiliser un objectif ayant peu de distorsion. Lors du process de recherche des points clefs le logiciel va devoir corriger la distorsion inhérente aux lentilles de l’objectif. Se reculer un peu et zoomer lorsque c’est possible permet de diminuer cet effet.
- utiliser la sensibilité ISO la plus basse possible (100) et une ouverture assez faible pour obtenir une grande profondeur de champ. Parfois il faudra donc envisager d'utiliser un trépied pour stabiliser l'appareil.
- régler la balance des blancs manuellement pour éviter un changement de teinte en cours de prise de vue.
- tourner autour de l’objet. Sauf en cas d’utilisation d’une chambre photo spécifique qui élimine tout décor superflu, le décor est souvent utilisé pour la reconstruction 3D de l'objet.
- ne pas bouger l’objet.
- éviter de prendre plusieurs photos du même point de vue.
Plus on a de photos de l'objet plus la reconstruction devrait être précise. Néanmoins le temps de calcul sera bien entendu plus long : pour n photos le nombre de paires à comparer est égal à n(n-1)/2. Ainsi pour un lot de 50 photos on obtient 1225 couples à comparer, pour 100 photos on arrive à un total de 4950 couples.
Les difficultés
Certains objets seront plus difficiles à reproduire :
- s'ils n'ont pas beaucoup de relief
- s'ils ont une texture trop uniforme
- s’ils sont transparents, réfléchissent la lumière, ont des parties brillantes. Dans ce cas l'utilisation d'un spray matifiant temporaire peut s'avérer utile.
Les grandes étapes du process
Feature extraction
Il s’agit d’extraire une large quantité de points clefs sur chaque image et en calculer les descripteurs qui les caractérisent indépendamment du zoom, taille du capteur, position, cadrage, angle de vue et exposition (luminosité). Ainsi 2 photos proches du même sujet auront toutes les chances de contenir une grande quantité de descripteurs identiques.
Image Matching
Lors de cette étape le logiciel va créer rapidement des paires de photos contenant des descripteurs similaires, partageant donc le même contenu.
Features Matching
L’objectif ici est de faire correspondre les caractéristiques entre toutes les paires de photos. Pour chaque descripteur d’une image A on recherche 2 descripteurs sur l’image B.
Structure From Motion
Ce procédé permet la reconstruction d’un nuage de points 3D tout en déduisant la position et l’orientation de l’appareil photo pour de chaque vue.
Depth Maps Estimation
Pour chaque vue le logiciel cherche à obtenir la valeur de profondeur de chaque pixel. Une valeur moyenne est obtenue depuis plusieurs photos par filtrage pour réaliser des cartes de profondeur.
Meshing
Les cartes de profondeurs sont fusionnées et une tétraédralisation permet de créer un maillage de surface qui sera ensuite simplifié, nettoyé.
Texturing
Par la technique de cartographie UV, les photos 2D sont projetées sur le maillage 3D pour créer sa texture.
Le flux de travail de Meshroom
Meshroom est un logiciel libre et gratuit de photogrammétrie développé par l’association AliceVision qui regroupe 18 membres issus principalement du monde de la recherche européenne.
À la création d’un projet de photogrammétrie le flux de travail suivant nous permet de paramétrer chaque nœud.
Les paramètres par défaut suffisent à une reconstruction correcte pour une majorité des modèles mais dans certains cas il sera nécessaire de modifier les paramètres de certains nœuds.
FeatureExtraction
- Describer Types : par défaut c’est l’algorithme dspsift qui est choisi, activer akaze et sift en complément va augmenter le nombre de points clefs.
- Describer Density : c’est le nombre maximum de points clefs par type de descripteur à récupérer par photo. Low = 5 000 / Medium = 10 000 / Normal = 20 000 / High = 50 000 / Ultra = 100 000
- Force CPU extraction : décocher cette option permet de solliciter, lorsque c’est possible, le processeur graphique (en utilisant CUDA, exclusivement sur cartes graphiques NVIDIA) qui est plus efficace.
MeshFiltering
- Keep Only The Largest Mesh : activer cette option permet de conserver uniquement le plus grand maillage et éliminer ainsi les petits éléments. Néanmoins parfois c’est le décor qui sera considéré comme le plus grand maillage et votre objet, s’il en est détaché, sera alors supprimé.
Texturing
- Texture Downscale : c’est le coefficient de réduction de l’échelle des images. Par défaut il est à 2, passer à 4 réduira le temps de calcul mais aussi la qualité de la texture.
- Mesh File Type : si d’autres formats de fichiers sont possibles pour le maillage final, le format obj semble être le plus pertinent pour avoir l’objet 3D texturé.
- Color Mapping > File Type : par défaut Meshroom utilise le format d’image exr. C’est un format qualitatif à haute dynamique mais qui produit donc des fichiers volumineux et que seuls quelques visualiseurs 3D sont capables de lire. Utiliser le png permet plus de souplesse en gardant un niveau de qualité supérieur au jpg qui lui est encore plus léger.
- Fill Holes : peut être coché pour forcer le remplissage de trous par une valeur la plus pertinente.
Le modèle texturé est alors stocké dans un répertoire de travail de Meshroom accessible en faisant un clic droit sur le nœud > Open Folder
Ajout de nœuds
D’autres nœuds peuvent être ajouté au pipeline standard pour ajouter des fonctionnalités. Parmi eux le nœud Publish permet d’exporter le modèle texturé dans le répertoire de son choix. Il suffit de lier les sorties Mesh/Material/Textures du nœud Texturing à l’entrée Input Files du nœud Publish puis d’indiquer le chemin du répertoire d’export Output Folder.
MultiReconstruction
Il est possible de réaliser un reconstruction en plusieurs étapes. On lance une première reconstruction à partir d’un lot de photos puis si par cliquer-glisser on rajoute des photos à la galerie, Meshroom propose un champ Augment reconstruction qui automatiquement créera un nouveau groupe d’images et modifiera le pipeline en conséquence comme ici avec 3 lots de photos.
Chaque nœud StructureFromMotionX reprend ainsi les informations du précédent grâce au nœud ImageMatchingMultiSFM et recrée une reconstruction. Le modèle final est disponible à la sortie du dernier nœud Texturing.
Mode Live Reconstruction
Meshroom propose également un mode de reconstruction live un peu sur le même principe. On indique le chemin d’un dossier de stockage de photos qui sera alimenté au fur et à mesure. Par défaut Meshroom lance une reconstruction pour chaque groupe de 4 photos qui arrivent dans le répertoire défini jusqu’à l’opération StructureFromMotion. Il faudra par la suite relier manuellement les sorties SFMData des nœuds StructureFromMotionX à l’entrée SFMData du nœud PrepareDenseScene et lancer le calcul du maillage global et sa texture. Le pipeline peut vite devenir très chargé…
Mode Draft
Si vous lancez une reconstruction qui échoue au nœud DepthMap avec des messages de type No CUDA-Enabled GPU
c’est que votre carte graphique n’est pas une carte NVIDIA ou alors que vous n’avez pas installé la partie logicielle CUDA nécessaire. Vous pouvez néanmoins utiliser le mode brouillon en créant un nouveau pipeline Photogrammetry Draft.
Le pipeline est plus réduit : les nœuds DepthMap et DehptMapFilter ont disparu.
Le modèle 3D reconstruit est bien moins détaillé, on remarque aussi la faible quantité de faces du modèle 3D brouillon à gauche par rapport au modèle normal à droite :
Utilisation de cibles codées
Meshroom permet l'utilisation de cibles codées de type CCTAG.
Ces cibles qui se présentent sous forme de 3 cercles concentriques, distinctes les unes des autres, sont placées de manière précise sur un plateau.
Meshroom peut les détecter lors de l'étape FeatureExtraction pour créer un référentiel géométrique précis. Il faudra également ajouter quelques nœuds supplémentaires au pipeline.
Cela permet de générer un modèle 3D respectant les dimensions de l'objet original ou encore une reconstruction totale d'un objet qui ne peut être faite en une fois.
Voici un exemple leur utilisation dans un cas concret de création modèles photogrammétriques de fragments statuaires archéologique à Delphes, et en plus l'article est en français !