Table des matières

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 :

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 :

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 :

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

MeshFiltering

Texturing

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 !

Postproduction

Une fois votre modèle 3D reconstitué il sera souvent nécessaire de le retoucher : boucher les trous, re-sculpter, lisser…. pour cela l'excellent logiciel libre Blender est tout à fait adapté. Pour certaines opérations, le logiciel Meshlab pourra disposer d'outils intéressants.