La Photogrammétrie

Définition

La photogrammétrie est une technique qui consiste à effectuer des mesures dans une scène, en utilisant la parallaxe obtenue entre des images acquises selon des points de vue différents. Recopiant la vision stéréoscopique humaine, elle a longtemps exploité celle-ci pour reconstituer le relief de la scène à partir de cette différence de points de vue. Actuellement, elle exploite de plus en plus les calculs de corrélation entre des images désormais numériques. Cette technique repose entièrement sur une modélisation rigoureuse de la géométrie des images et de leur acquisition afin de reconstituer une copie 3D exacte de la réalité.

Ce qui veut dire

Qu'on peut obtenir un modèle 3D à partir de photos.

Utilisation

A l'origine, cette technique a été développée pour permettre de retirer un modèle 3D à partir de données satellites. Ces données satellites couplées aux photos faites avec la Google Car permettent donc d'obtenir, par exemple, des photogrammétries telles que celles utilisées dans Google Maps :


Mais cela permet également d'obtenir des modèles 3D d'objets ou monuments si l'utilisation du logiciel le permet ou si les photos sont prises de façon à le permettre :


Il existe actuellement trois solutions qui sont principalement mises en avant pour la réalisation de photogrammétries. Les trois utilisent le processeur de la carte graphique pour réaliser les opérations. Cela veut surtout dire qu'il ne vous sera quasi plus possible de faire quelque chose nécessitant la carte graphique pendant que le calcul est en cours, même si vous ne voyez rien. :

  • PhotoScan : Logiciel propriétaire de la société Agisoft, très utilisé par les géomètres et les institutions.
    Windows uniquement.
    Très bon logiciel, le meilleur selon moi, qui fournit aussi bien un nuage de points qu'un modèle 3D texturé.
     
  • Reality Capture : Logiciel propriétaire de la société Autodesk, très utilisé dans la création de modèle 3D et pour une utilisation dans un cadre BIM.
    Windows uniquement.
    Pour les tests que j'ai pu effectuer, la qualité était moindre que celle de PhotoScan.
    Ce logiciel impose également d'être connecté à leurs services tout au long du processus. Celui-ci pouvant durer plusieurs heures, la moindre micro-déconnexion annulera le processus et vous serez obligé de tout recommencer…
    Il est possible de louer une licence mensuelle à 36,99€ sur Steam.
     
  • VisualSFM : Logiciel open-source, faisant appel à d'autres ressources open-source, orienté géométrie et cartographie.
    Windows, MacOS et Linux.
    Il fournit un nuage de points de très bonne qualité mais nécessitera le passage par un ou deux autres logiciels :
    • CloudCompare : Logiciel utilisé pour le traitement et le nettoyage de nuages de points et la création d'un modèle 3D.
    • MeshLab : Logiciel de traitement de fichiers 3D utilisé ici pour créer la texture.

L'orientation que prend ces différents logiciels va principalement faire changer la manière dont doivent être prises les photos.

Il existe d'autres logiciels, plus grand public ou encore en développement mais soit la qualité du modèle final sera de mauvaise, soit l'utilisation est beaucoup trop complexe pour un résultat n'atteignant, au mieux, pas celui proposé par VisualSFM.

Il vous faudra un ordinateur puissant doté de une ou plusieurs cartes graphiques puissantes.
VisualSFM utilise CUDA et impose donc une nVidia.
PhotoScan et RealityCapture utilisent OpenCL.
Même avec cela, il faudra compter plusieurs heures de calcul.

Appareil

L'appareil en lui-même importe peu. Un smartphone pourra donner de meilleurs résultats qu'un boitier Nikon milieu de gamme avec un mauvais objectif.


Résolution

Plus la résolution sera haute, plus il y aura des détails. Mais plus la résolution sera haute plus le temps de traitement sera long également. En fonction du besoin, il pourra parfois être utile de diminuer la résolution des photos.


Qualité

Il faut la meilleure qualité possible, tout simplement
Bien que la plupart des appareils photos sauvent en JPG et que ce format est celui utilisé par VisualSFM, je vous conseillerai de passer par le RAW afin de traiter par lot les photos si besoin est pour les exporter ensuite en JPG sans compression.

Il faut également faire en sorte qu'il n'y ait pas le moindre grain à la photo et, donc, soit avoir une excellente luminosité soit photographier à basse sensibilité, sur pied, etc.


Luminosité/réflexion

Evitez par-dessus tout les ombres. Surtout celles provenant du soleil si celles-ci sont visibles sur les photos : le temps de la prise de photos l'ombre aura bougé et empêchera une analyse convenable des photos par les logiciels.
Le temps “idéal” pour la photogrammétrie est un temps nuageux mais à forte luminosité : il n'y a quasi pas d'ombre et le modèle est éclairé uniformément et suffisamment pour être pris en photo avec la qualité nécessaire.

Mauvaise luminositéBonne luminosité

Si déjà la lumière réfléchie naturellement pose problème, un objet amenant une réflexion directe peut être oublié : Les seuls moyens pour faire une photogrammétrie d'un tel objet sont de le recouvrir de talc ou poudre équivalente ou d'utiliser un spray matifiant


Focale

Quel que soit l'appareil photo utilisé il faudra que les photos soient prises avec le maximum de focale possible.

La focale, en gros, c'est le niveau de zoom de l'appareil.

Avec une focale inférieure à 40, l'image est déformée et tout ce qui est déformé ne sera pas, ou peu, pris en compte.
De 40 à 60, l'image n'est pas déformée et tous les détails devraient pouvoir être utilisés .
Au delà commence le zoom, ce qui est le plus proche des vues satellites.

Il est évident que plus la focale est haute et, donc, plus le niveau de zoom élevé, plus il faudra réaliser de photos.
Il faudra donc choisir le juste milieu entre focale, qualité voulue et “possibilité de terrain”.

Mauvais Moyen Bon
focale : 8 focale : 12 focale : 16 focale : 20 focale : 24
focale : 28 focale : 32 focale : 36 focale : 40 focale : 50
focale : 60 focale : 70 focale : 80 focale : 90 focale : 100

Cela est nettement plus visible si on s'éloigne de l'objet en augmentant la focale :

focale : 8 focale : 20 focale : 28 focale : 40 focale : 50

Bien que la différence semble peu marquée entre une focale de 28 et une de 50, elle est largement suffisante pour voir beaucoup de données ne pas être prises en compte. Faites donc toujours bien attention à cela lors de vos prises de photos.
Il sera parfois difficile, voire impossible de respecter une bonne focale, cela passera alors par un beaucoup plus grand nombre de photos à prendre et souvent un nuage de points qui demandera le nettoyage de plus de parasites.

La prise de photo est l'étape la plus importante de toute puisque c'est de celle-ci que dépendra la qualité de l'objet.

Généralités

Comme dit plus haut, à l'origine cette technique était utilisée pour retirer un modèle 3D de données satellites.
C'est dans le logiciel VisualSFM que cela se “ressent” le plus. Cela veut donc dire que les photos doivent être prises d'une certaine manière.
Cela est “moins” vrai avec Reality Capture et Photoscan mais il vaut mieux directement prendre de bonnes habitudes à ce niveau là que compter sur un algorithme pour rattraper le coup.

Il est préférable de faire des photos avec un zoom en étant le plus éloigné possible de l'objet afin qu'il n'y ait pas de déformation à traiter. VisualSFM étant un logiciel à l'origine fait pour traiter des données satellites, il ne prendra pas en compte les données trop déformées par l'objectif (contrairement à Reality Capture et Photoscan). Cela évitera également d'avoir un fond flou qui amènerait alors des parasites.

Objet

Il est important de réaliser un grand nombre de photos.
Plus il y aura de photos, meilleure la qualité sera.
La chose à retenir est que tout élément de l'objet à scanner doit se retrouver sur, au moins, trois photos.

Attention, s'il y a des petits détails sur l'objet à scanner, le fait que chaque élément ait à se retrouver sur trois photos obligera à prendre plus de photos à ces endroits :

Surface

Dans le cas de, par exemple, une façade, il faudra agir avec cette façade comme un satellite :

Bonne prise de photosMauvaise prise de photos

L'idéal pour obtenir une bonne texture et assurer un maximum de détails d'agir ainsi :

Attention!

Les photos doivent être prises en “se suivant”, comme si la scène était filmée, et comme le ferait un satellite : un satellite ne “saute” pas d'un lieu à l'autre, il suit une trajectoire :

Bonne prise de photosMauvaise prise de photos

Chaque image est comparée aux précédentes. Si à un moment donné, le logiciel ne trouve plus de correspondances dans une photo, il est logique pour lui de penser qu'il n'y en aura aucune dans les photos précédentes et il s'arrêtera là.

Cela rend également important le fait de créer des “ponts” entre vos points de vue, par exemple si vous voulez capter plus de détails d'un objet ou d'une surface :

Il est important aussi d'y penser lors des “changements de trajectoire comme ici :

Principalement avec VisualSFM, il sera important que la rotation passe par plusieurs photos :

Attention! VisualSFM est particulièrement sensible aux courbes et ne prendra pas les détails au-delà d'une certaine courbure. Par exemple, cette prise de vue :

Prise de vue Nuage de points PhotoScan Nuage de points VisualSFM

Les points rouges sont les points ne pouvant être calculés.

C'est à la fois une bonne et une mauvaise chose car si ces points ne peuvent être calculés c'est car ils ne sont pas bien visibles sur la photo.
PhotoScan aura moins de problème à vous construire un modèle 3D mais c'est au moment du texturage que l'on verra le problème puisque la texture créée utilisera une image fortement déformée par la courbure, amenant à une pixellisation ou à des zones de moins bonne qualité au sein de la texture.

Installation

VisualSFM est une interface graphique faisant appel à trois ressources différentes, nécessaires à la réalisation d'une photogrammétrie:

  • SiftGPU : Utilisé pour aligner les photos.
  • PBA : Utilisé pour créer un nuage de points léger.
  • CMVS-PMVS : Utilisé pour créer un nuage de points dense.

Théoriquement, il vous faudrait donc installer VisualSFM, charger une version de chacune de ces trois ressources, les installer (voire les compiler),…

On va donc zapper cette étape et plutôt cliquer sur le lien suivant qui lancera le chargement d'une archive comprenant déjà le logiciel et toutes ses dépendances :

Télécharger VisualSFM (version Windows 64bits - carte graphique nVidia avec drivers CUDA mis à jour).

Il n'y a rien à installer, décompressez simplement l'archive dans un dossier.

Utilisation

Ouverture des images et configuration

Une fois le logiciel ouvert, voici l'écran qui devrait apparaître :

La première chose que nous allons faire est ouvrir les photos que nous allons utiliser. Vous trouverez vingt-deux photos pouvant être utilisées à la fin de cette page et qui nous serviront également pour cet exemple.

Pour cela, rendez-vous dans File, choisissez Open+ Multi Images et ouvrez toutes les photos.
Après quelques secondes, celles-ci devraient apparaître :

Attention! L'étape suivante sera à réaliser à chaque ouverture du logiciel.
Il faut maintenant configurer VisualSFM pour qu'il utilise bien la carte graphie et non le CPU.
Pour cela, rendez-vous dans Tools, puis dans Enable GPU et sélectionnez Match using CUDA.

Retournez dans ce menu et sélectionner maintenant Set Maximum Sift. Il s'agit du nombre de points de reconnaissance qui pourront être repérés dans une photo. Vous pouvez sans problème mettre une beaucoup plus grande valeur. En général je met 65535 mais le logiciel arrive rarement à trouver plus de 12000 points.

Retournez une dernière fois dans ce menu pour sélectionner Set Maximum DIM. Il s'agit de la dimension maximale des photos à traiter.
Par défaut cette valeur est à 3200. Cela veut dire que toutes les photos dont la résolution en hauteur est supérieure à 3200 seront redimensionnées à cette valeur.
Nos photos ont une dimension de 3240, nous indiquons donc cette valeur.

Alignement des photos

Maintenant que le logiciel est configuré, nous pouvons lancer l'alignement des photos.
Pour cela, rendez-vous dans SfM, puis dans Pairwise Matching et sélectionner Compute Missing Match.

Cette étape dure quelques minutes et vous pouvez en voir l'évolution dans la fenêtre console :

Reconstruction légère

Cette étape est obligatoire, il faut toujours passer par une reconstruction légère pour pouvoir faire la reconstruction dense.
Pour cela, rendez-vous à nouveau dans SfM et sélectionnez Reconstruct Sparse.

Vous verrez alors un nuage de points se créer, montrant également l'emplacement de la prise de chacune des photos :

Attention! Il se peut à ce moment là que vous vous retrouviez avec plusieurs modèles car des correspondances qui vous sembleront pourtant évidentes n'auront pu être calculées par le logiciel.

Il va falloir alors recommencer l'alignement des photos en indiquant des paramètres d'utilisation personnalisés pour SiftGPU.
Pour cela, allez dans Tools, puis dans Enable GPU et cliquez sur Customized params.

Dans la fenêtre qui apparaît, indiquez les paramètres suivants :

-v 1 -fo -1 -tc2 16000 -s -lm 16384 -maxd 3240

Relancez maintenant l'alignement des photos et la création du nuage léger.

Et n'hésitez pas à monter plus haut si vous voulez plus de détails :

-v 1 -fo -1 -tc2 65535 -s -lm 65535 -maxd 3240

Le processus d'alignement sera beaucoup plus long car beaucoup plus de repères seront cherchés. Il en va de même pour la création du nuage léger mais celui-ci sera beaucoup plus détaillé.

La création du nuage dense ne prendra pas beaucoup plus de temps mais sera de meilleure qualité également.

Attention! Bien que le processus ne soit pas spécialement plus long, il demandera beaucoup plus de ressources.

Si vous utilisez des paramètres personnalisés, ne dépassez pas les 100 photos si vous n'avez “que” 16go de RAM.
A ce niveau là, c'est quasi la même chose dans VisualSFM et PhotoScan.
PhotoScan fait une analyse AVANT de lancer le processus là où VisualSFM lancera tout et indiquera au bout de deux heures qu'il n'a plus assez de mémoire.
Par contre, le résultat obtenu par VisualSFM jusque là sera exploitable, il faut donc voir si ce qui a déjà été calculé est suffisant pour le besoin ou non.

Reconstruction dense

Rendez-vous une nouvelle fois dans SfM et sélectionnez Reconstruct Dense.
Il vous demandera alors où sauvegarder le projet, indiquez le dossier que vous voulez…

Cette étape est la plus longue et en fonction du nombre de photos, de la résolution, du nombre de détails présent sur chaque photo, etc… cela peut aller de la demi-heure à plusieurs heures.
Prenez votre mal en patience car rien n'indique combien de temps ça prendra et où il en est dans le processus.
PhotoScan et Reality Capture ont des barres d'avancement mais pour ces deux logiciels elles indiquent à quel étape ils en sont du processus : on arrive donc très vite à 50% et la suite augmente à vitesse aléatoire les heures suivantes…

Au moins, dans VisualSFM, ils sont clairs : This may take a little more time, waiting… ^^

Une fois la reconstruction dense terminée, il vous suffira d'appuyer sur la touche tabulation pour passer de la vue légère à la vue dense :

Il n'y a rien à sauvegarder, tout se trouve déjà dans le dossier que vous aurez indiqué à l'étape précédente.

Ouverture et nettoyage du nuage de points

Ce logiciel va nous permettre de nettoyer si besoin notre nuage de points et créer un modèle 3D.
Voici la fenêtre principale sur laquelle vous devriez arriver :

Dans le dossier que vous avez indiqué pour la reconstruction dense, vous trouverez un fichier dont l'extension est PLY.
Ouvrez ce fichier dans CloudCompare et dans la fenêtre qui apparaît, sélectionner Apply All. Cela fera apparaître votre objet :

Nous allons utiliser l'outil “ciseau” pour nettoyer le modèle des points dont nous n'avons pas besoin :

Nettoyez votre modèle jusqu'à ne plus avoir que les points qui représentent le modèle voulu :

Création du modèle 3D

Rendez-vous dans Plugins et sélectionnez Poisson Surface Reconstruction.
Il s'agit d'une librairie open-source utilisée par un très grand nombre de logiciel pour construire un modèle “solide”.
Elle est utilisée aussi bien par CloudCompare que MeshLab ou encore des logiciels professionnels tels que Artec Studio, logiciel propriétaire créé pour être utilisé avec la gamme de scanner à main créé par Artec (Eva, Spider, …).

Une fenêtre de paramètre va s'ouvrir :

Octree DepthReprésente la qualité générale et la taille des faces.
Plus ce nombre sera élevé, plus la qualité sera bonne.
Mais il ne sera, bien entendu, pas possible d'aller au-delà de la qualité du nuage de points.
Valeurs utilisées en général : de 6 à 11.
Samples per nodeIl s'agit, en gros, de l'indicateur de parasites.
S'il y en a peu comme ici, laissez à 1.
Sinon, augmentez la valeur.
Full depthIl s'agit de “l'indicateur de détails”.
Plus ce nombre sera élevé, plus il tentera de créer des détails.
Cela peut donner de très mauvais résultats si nuage de points parasité.
Point weightIndique, en gros, le “poids” d'un point, c'est à dire son importance en fonction des autres…

Tous ces paramètres peuvent être compliqué à comprendre, voici donc une représentation de leurs significations :

Octree Depth

6
7
8
9
10
11

A partir du moment où les photos ont été bien réalisées, les autres paramètres ne doivent pas être changés. Nous pouvons voir qu'avec un octree depth de 8, nous avons déjà un excellent résultat que nous utiliserons pour la suite.

Attention!
Le modèle réalisé avec un octree depth de 8 pèse environs 16Mo pour environs 200.000 faces là où celui de 11 pèse près de 610Mo pour environs 7 millions de faces.

Néanmoins, si l'on prend le modèle réalisé avec un octree depth de 11 et que nous décimons (réduire le nombre de faces) le modèle jusqu'à obtenir exactement le même nombre de faces que le modèle réalisé avec un octree depth de 8, le résultat sera de bien meilleure qualité :

OD 8 : 200k faces OD 11 : 7M → 200K faces

En fonction des capacités de votre ordinateur, trouvez les paramètres qui correspondront le mieux à vos besoins…

Une fois votre modèle créé, sélectionnez le dans la fenêtre DB Tree et exportez le au format OBJ.

MeshLab

MeshLab est un logiciel qui a évolué énormément ces derniers mois et qui a vu quelques changements se faire au niveau de son interface ainsi que dans la manière dont les filtres étaient classés et nommés.
Il se peut donc qu'au moment où vous lirez ces lignes l'interface ait encore évolué mais, en principe, vous devriez vous y retrouver.

Voici l'interface face à laquelle vous devriez vous retrouver une fois le logiciel ouvert :

Ouverture des fichiers

VisualSFM, en plus de créer un fichier PLY, contenant le nuage de points, a créé un fichier NVM, présent dans le dossier que vous avez indiqué lors de la création du nuage de points dense.

Ouvrez le en vous rendant dans File et en choisissant Open Project, ce qui fera apparaître le nuage de point léger.
Il vous faudra sans doute sélectionner la vue des nuages de points dans la série d'outil présente au-dessus de la visualisation du modèle 3D :

Nous pouvons voir qu'une colonne est apparue à droite où l'on retrouve toutes les photos utilisées dans VisualSFM.
Celles-ci seront utilisées pour créer la texture du modèle 3D.

Ouvrez maintenant le modèle 3D créé dans CloudCompare en vous rendant dans File puis en sélectionnant Import Mesh :

Création de la texture

Maintenant que nous avons ouvert tous les fichiers utiles, rendez-vous dans Filters, sélectionnez Texture et choisissez Parameterization + texturing from registered rasters, ce qui fera apparaître la fenêtre suivante :

Les seuls paramètres important sont la dimension et le nom donné.

Attention!
Plus le nombre de faces est grand plus il faudra du temps pour créer la texture et cela peut durer plusieurs heures pour un modèle comprenant plusieurs millions de faces.

Après quelques minutes, votre modèle sera créé et il ne vous restera plus qu'à le sauvegarder au format OBJ en vous rendant dans File puis en sélectionnant Export mesh.
ATTENTION a bien sélectionner OBJ dans le type de fichier

Voici vingt-deux photos que vous pourrez utiliser pour faire des tests :