Principes de base et prises de vue
Notions générales
Les principes de base de la photogrammétrie numérique peuvent être résumés de manière simple: en multipliant les clichés photographiques d'un même objet et en les traitant, il devient possible d'obtenir un modèle 3D de cet objet dont les dimensions sont restituées de façon relative. Sans entrer dans les détails techniques qui sont bien mieux expliqués dans la documentation indiquée en annexe, c'est par la multiplication des points de vue d'une même scène qu'il est possible de mesurer cette scène. Cette technique est basée sur la notion de parallaxe, c'est-à-dire l'impact que le changement de point de vue apporte à une scène. Par exemple, la perception de la profondeur pour la vision humaine est due à la stéréoscopie, au fait que nous avons deux yeux.
Reconstitution d'une géométrie dans l'espace
Pour reconstituer une géométrie dans l'espace, les logiciels vont analyser les clichés un par un pour repérer des ensembles de pixels remarquables. Ces ensembles de pixels sont autant de fragments de matrices1 qui pourront correspondre à d'autres fragments présents sur d'autres images. Deux points considérés comme représentant la même chose sur deux images sont appelés des points homologues. Cette analyse est effectuée entre toutes les prises de vue et un réseau de correspondance est établi. Ce réseau de correspondance et ces liens entre chaque prise de vue abouti à l'alignement des caméras, c'est-à-dire l'emplacement dans l'espace probable des prises de vue en fonction de la correspondance des images.
1. Une photographie numérique est composée de pixels, il s'agit d'une image de type raster. Les pixels sont des cases qui contiennent des valeurs numériques comme l'intensité de rouge, de vert ou de bleu (le code RVB ou RGB en anglais) que l'ordinateur va figurer sous la forme d'une couleur. Le logiciel de photogrammétrie analyse l'organisation de ces valeurs numériques. ↩
Cette première étape du traitement produit un nuage de points qui correspondent aux points homologues des différentes photographies. Les points dans un modèle 3D sont appelés vertices.
Reconstitution d'une surface
Les caméras et les points positionnés dans l'espace, l'étape suivante du traitement est la reconstitution de la surface de notre objet d'intérêt. Il faut garder à l'esprit que la photogrammétrie est une technique qui permet seulement de reconstituer ce qui est vu par l'appareil photographique. On ne peut donc modéliser qu'une surface avec une face extérieure. L'orientation de cette surface est donnée par la normale. Pour créer cette surface, les logiciels de photogrammétrie créent des cartes de profondeur (un peu comme pour un modèle numérique de terrain) pour chaque image. En associant les cartes de profondeur avec l'emplacement des prises de vue, les logiciels peuvent reconstituer des surfaces.
Cette surface est constituée de triangles qui forment un maillage (mesh en anglais).
Ce maillage peut contenir de la couleur, mais on ne peut avoir qu'une seule couleur par vertice (les points qui constituent les sommets des angles), d'où un rendu pas toujours fifou...
Enfin, pour aboutir à un modèle 3D photoréaliste, on peut créer une phototexture. C'est une image reconstituée à partir de l'ensemble des prises de vue et dont les pixels sont associés à des coordonnées sur le modèle 3D.
Formats et détails techniques
PLY
Le format PLY (pour PoLYgon file format) a été développé à Stanford en 1994. Il est est fait pour stocker des géométries 3D et peut intégrer beaucoup d'autres paramètres. Un Ply est composé d'un en-tête qui indique l'organisation du fichier, notamment le nombre d'entité qu'il contient et les colonnes qui le composent. Il s'agit ensuite d'un tableau, un peu à la manière d'un CSV, d'où la possibilité d'ajouter des colonnes dans lesquelles on peut stocker d'autres informations comme la qualité du point, par exemple.
ply --> Format
format ascii 1.0 --> Le type de format
comment VCGLIB generated --> La façon dont il a été généré
element vertex 40002 --> Le nombre de vertices (qui est aussi le nombre de lignes)
property float x --> Les colonnes ==> ici la coordonnée X
property float y ==> coordonnée Y
property float z ==> coordonnée Z
property float nx ==> normale X
property float ny ==> normale Y
property float nz ==> normale Z
property uchar red ==> Rouge
property uchar green ==> Vert
property uchar blue ==> Bleu
property uchar alpha ==> Alpha (transparence)
end_header _ --> fin de l'entête
0.01346934 0.0204971 -0.001384109 3.231161 -0.001085499 -3.14787 145 147 158 255
-0.006155781 -0.007138619 -0.002369496 0.1826076 0.09423474 -6.279827 139 140 148 255
0.01353719 0.02193273 -0.001360599 1.689062 1.517579 -1.50666 145 147 158 255
0.01313684 0.01346191 -0.001499356 3.226933 -0.1308138 -3.133287 144 147 156 255
0.007270654 0.02223181 -0.001538333 0.2434989 3.184588 -3.087842 144 145 154 255
0.01340087 0.02046175 0.0009717987 6.225433 -0.02884221 0.7278272 144 147 158 255
coord. X | coord. Y | coord. Z |normale X| normale Y | normale Z| R | V | B | alpha
C'est un format pratique et qui peut être ouvert avec beaucoup de logiciels. Il est surtout utilisé pour conserver les vertices et les facettes et est peu pratique si le fichier contient des textures ou si les matériaux (les rendus de lumière) ont été travaillés.
OBJ
Le format Wavefront .obj est un autre type de fichier 3D qui est plus adapté au travail sur les matériaux et les textures. En général, il est accompagné d'un fichier de texture (une image en format jpeg ou png) et d'un fichier .mtl (pour material) qui permet de décrire l'aspect des éléments qui composent sa surface. Il faut veiller à toujours conserver les trois (ou plus) fichiers ensemble.
Fichier de texture
Un fichier de texture est un fichier externe à celui des géométries (comme un ply ou obj). Comme indiqué précédemment, c'est un fichier image (comme un jpeg ou un png) dont les pixels sont associés à des emplacements du modèle (ces emplacements sont signalés dans le fichier de géométries). Il permet de donner aux modèles un aspect de résolution plus importante que la coloration par les vertices. Il doit être de format carré avec un nombre de pixels de carré de deux (comme 1024x1024 ou 4096x4096). Pour des questions de compatibilité avec d'autres logiciels, il vaut mieux ne pas dépasser 4096. Il est possible d'avoir plusieurs fichiers de textures si on veut augmenter la résolution de la texture sans avoir un fichier qui possède trop de pixels.
Terminologie 3D
Avant d'aller plus loin, revenons rapidement sur la terminologie employée.
Géométries 3D
- Vertice (ou sommet) : Vertex (en anglais) est un point qui possède des coordonnées propres dans un espace 3D défini. Il possède aussi une normale mesurée à partir par rapport aux trois axes du système de coordonnées.
- Arête : Edge en anglais, c'est une droite qui relie deux vertices et qui constitue l'un des bords d'une facette.
- Face (ou facette): En anglais, face, il s'agit d'une surface délimitée par des arêtes et dont les commets sont composés par les vertices.
- Voxel : De façon un peu rapide, il s'agit d'un pixel en volume. Les élément définis au-dessus ne permettent que de constituer des surface et les modèles obtenus ne sont pas des volumes à proprement parler (ils sont vides). Le voxel, lui, peut stocker une information en tant que volume.
Coordonnées et normales
Une vertice possède des coordonnées dans un espace tridimensionnel. Pour mesurer ces coordonnées, on part du point 0 puis on mesure la distance qui sépare une vertice le long des trois axes du système de référence.
En plus des coordonnées qui leur attribuent un emplacement, les vertices possèdent aussi des normales qui permettent d'en désigner l'orientation. Comme cela a été dit précédemment, les géométries utilisées la 3D ne permettent de créer que des surfaces (à l'exception des voxels mais nous ne les utilisons pas ici). Les faces sont donc orientées avec un devant (du côté où la lumière est réfléchie) et un revers (qui reste sombre puisqu'il ne réfléchit pas la lumière). Les normales vont notamment indiquer le comportement de la lumière aux logiciels de visualisation 3D (comme l'angle de réflexion de la lumière). Pour aller un peu plus loin, il est possible de générer une carte des normales (comme pour une texture) qui permet de simuler un comportement lumineux de façon plus complexe et surtout avec une résolution plus dense que le maillage initial.
Prises de vue
Paramètres de la scène
Ce qui compte pour la photogrammétrie, c'est de multiplier les points de vue et ainsi les déformations de perspective. Il est donc recommandé de se déplacer le plus possible entre les prises de vue et ne pas rester sur place en changeant uniquement l'orientation de l'appareil photographique. Il faut aussi garder à l'esprit que les photos doivent se ressembler le plus possible. Pour résumer, la façon dont le logiciel procède, c'est d'aller observer des ensembles de pixels puis de les comparer entre photographies. Quand le logiciel estime que deux ensembles de pixels sur des clichés différents correspondent à un même élément dans une scène, il considère qu'il s'agit de points analogues. En multipliant les points analogues entre photos, le logiciel estime ensuite la position probable des prises de vues, ce qui lui permet de restituer une géométrie dans l'espace et de reconstituer la scène en 3D.
C'est pour cette raison que rien dans la scène ne doit être modifier entre les prises de vues, sinon, le logiciel observera des points analogues incohérents qui ne permettent pas de restituer une géométrie de la scène.
Utilisation de l'appareil photographique
Pour garantir les meilleurs clichés possibles (des images à peu près identiques), le mieux reste de mettre l'appareil photographique en mode manuel (au moins de fixer la balance des blans et l'ISO). Internet est plein de ressources pour expliquer comment utiliser un appareil photographique, mais nous allons tout même rappeler quelques fondamentaux du réglage d'un appareil photographique.
Les principaux paramètres à régler pour un appareil photographique sont la sensibilité (l'ISO), l'ouverture (du diaphragme), le temps d'exposition et la balance des blancs.
- ISO : La sensibilité du capteur d'un appareil numérique est donnée en ISO (à cause de l'organisme international). Plus la valeur est haute, plus l'appareil captera de la lumière, mais cela génèrera du bruit, notamment des aberrations chromatiques (comme sur les photos de soirées, quand on zoom sur des zones noires et qu'il y a des taches vertes et violettes bizarres). Pour éviter les aberrations, il vaut mieux rester dans des valeurs basses (entre 100 et 400 ISO), mais cela dépend de votre appareil (globalement, plus un appareil est sophistiqué, plus on peut augmenter la sensibilité sans risque de trop de parasites). L'amplitude des ISO dépend de l'appareil. Un réflex un peu entrée de gamme peut avoir un ISO qui s'étend de 100 à 25600 (c'est ce que j'ai constaté globalement au moment d'écrire ce texte).
- Ouverture : Le diaphragme d'un objectif peut être plus ou moins ouvert, ce qui laisse entrer plus ou moins de lumière à la fois. L'idée générale, c'est qu'un diaphragme ouvert donne des clichés plus lumineux, mais réduit la profondeur de champs. En photogrammétrie, on a besoin d'une profondeur de champ qui couvre l'intégralité de notre objet d'intérêt et il faut souvent l'augmenter au maximum. L'ouverture est donnée en fraction de "F" ("F" étant la distance focale positive de l'image). L'idée est que plus le nombre est grand, plus le quotient est faible et donc plus le diaphragme est fermé. L'amplitude de l'ouverture du diaphragme est liée directement à l'objectif. Pour un objectif un peu entrée de gamme, l'ouverture peut être faite en F4 et F22.
- Temps d'exposition : Le temps d'exposition est donné en fractions de secondes ou en secondes si le temps d'exposition est long. Plus le temps d'exposition est long, plus le cliché est lumineux, en revanche, il sera plus flou (on bouge toujours un peu quand on tient un appareil photo). Sans pied photographique, il est difficile d'obtenir un cliché net avec une vitesse plus lente que 1/40 (même en retenant sa respiration).
- Balance des blancs : Elle est donnée en Kelvins. Sans entrer dans les détails techniques, ce paramètre corrige la couleur des photographies. La lumière environnante a un impact très fort sur le rendu photographique des objets. Le plus simple est souvent de déterminer la balance de blancs avant le premier cliché puis de ne plus y toucher durant l'ensemble des prises de vue.
Il faut garder à l'esprit que les images doivent être nettes avec une bonne profondeur de champ et qu'il faut aussi une bonne luminosité pour bien identifier les surfaces des éléments que nous voulons enregistrer. L'information principale, c'est la lumière, mais les réglages pour obtenir une photographie nette sont ceux qui justement réduisent la luminosité des clichés. Il faut donc s'entraîner un peu avec son appareil pour trouver le bon équilibre.
Il faut aussi penser à casser le cadre. On a tendance à prendre des photographies à peu près propres et cadrées à peu près correctement. La donnée d'origine pour la photogrammétrie, c'est le pixel. Il faut donc utiliser la surface du capteur de l'appareil au maximum en prenant des angles de vue bizarres, mais qui sont concentrés sur ce que nous voulons relever. En général, avec un bon relevé pour la photogrammétrie, aucun cliché n'est exploitable individuellement (tout est très moche).
Bien sûr, il faut aussi penser à dépasser un peu de la scène que nous voulons enregistrer. Les bords du modèle 3D sont toujours de moins bonne qualité et il faudra retirer cette partie du modèle final, donc autant que ce ne soit pas sur votre objet d'intérêt.
Les trucs en plus
Les choses dont il faut se méfier :
- Les ombres portées (qui se déplacent avec nous)
- Les reflets (qui se déplacent aussi avec vous)
- Les matériaux transparents : Les points à la surface d'un objet sont difficiles à percevoir et la diffraction de la lumière crée des déformations irrégulières entre les différents points de vue.
- Les surface lisses : Le logiciel aura plus de mal à identifier des points analogues. Par exemple, si vous avez un objet poli en os, tous les pixels de la surface de l'objet sont identiques donc on ne peut pas deviner lesquels sont analogues.
- les textures répétitives : Par exemple, lors d'un relevé en forêt, rien ne ressemble plus à une feuille qu'une autre feuille et le logiciel peut, au final, créer une très belle feuille unique et rien de la structure que vous enregistriez (je parle d'expérience).
- Les contextes trop "propres" : Avoir un environnement direct à notre objet d'intérêt un peu sale, cela fournit autant de nouveaux points homologues remarquables pour le logiciel de traitement. => Attention tout de même, pour des prises de vue sur une table tournante, il faut au contraire que rien ne puisse accrocher le logiciel en dehors de notre objet.
Stratégies de prises de vue
Il y a deux choses à garder à l'esprit (en plus de ne rien modifier dans une scène entre la première et la dernière prise de vue), les photographies doivent se recouvrir suffisamment, entre 60% et 80% et si vous tournez autour de l'objet, avoir une différence d'angle de 30° au maximum. Pour qu'un point soit représenté, il faut au minimum qu'il soit présent sur trois clichés (dans la pratique, un peu plus).
Relevé d'une surface (sol ou bâti)
Pour une surface comme un mur, le plus simple est de rester parallèle à l'objet d'intérêt et de veiller à ce que les photos soient suffisamment superposées. Toujours penser à prendre des photographies qui dépassent de votre objet d'intérêt. Pour une surface, le nombre de photographies nécessaires varie grandement. Il faut retenir que plus on prend de photos, plus on aura de détails, mais aussi plus le temps de traitement sera long. Par exemple, si on possède un objectif grand angle, qu'on a un petit mur de 10 mètres de long et qu'on ne s'intéresse pas à une précision subcentimétrique, une vingtaine de clichés peut suffire. En revanche, le même mu, avec des détails qui nous intéressent particulièrement (comme des gravures ou des reliefs particuliers), avec un besoin de plus de précision et un objectif moins déformant comme un 50mm (ce n'est pas toujours gênant pour le relevé mais ça peut impacter la qualité visuelle de la phototexture), il faudra probablement tripler le nombre de clichés.
Relevé d'un objet
Pour un objet, on peut tourner autour. À ce moment, il faut veiller à ce que les angles entre les points de vue soient suffisamment proches.
--> de bonne photographies
Des clichés corrects sont nets, avec suffisamment de lumière pour observer les détails qui nous intéressent. Ils sont aussi positionnés de façon proches et se recoupent bien. Les légères différences d'éclairages visibles ne sont pas spécialement gênantes pour obtenir un modèle.
--> de mauvaises photographies