Nous annonçons la création de BESTREMA, un bureau d'études structure basé à Paris, spécialisé dans les monuments anciens. Un des objectifs de cette société est de participer à la diffusion des connaissances sur la structure des monuments anciens auprès du grand public.

Les nouveaux articles que nous écrirons seront désormais mis en ligne sur bestrema.fr. Les anciens articles qui ont déjà été publiés ces deux dernières années resteront à votre disposition sur Combien ça porte. Nous vous remercions d'avoir suivi ce blog, et nous remercions tout particulièrement les lecteurs qui ont partagés avec nous leurs observations sur les structures des monuments anciens.


15 février 2013

Calcul du volume d'un maillage

1  Introduction

En préparation d'un futur article sur le poids des statues en pierre, nous revenons aujourd'hui sur l'utilisation de la photogrammétrie pour créer des maillages. En effet une fois le maillage d'une statue créé, il est possible d'obtenir rapidement son volume avec Meshlab. Nous allons montrer ci-dessous comment obtenir cette valeur, en partant de photos.
Nous profiterons de cet exemple pour donner quelques illustrations de l'effet des paramètres des filtres qui permettent l'obtention du maillage. Notre objectif n'est pas de détailler le fonctionnement des algorithmes en jeu, mais simplement de partager quelques observations simples sur un exemple, pour aider au choix de ces paramètres pour les personnes qui ne sont pas familières avec ces algorithmes.
La statue prise considérée ici est l'Ecoute de Henri de Miller (1986), située au Jardin des Halles à Paris. Cette statue serait en grès de Bourgogne, et pèserait entre 50 et 70 tonnes selon les sources (insecula.com, paris.fr).
Nous utilisons dans la suite VisualSFM pour la création du nuage de point et Meshlab pour la création du maillage et le calcul du volume (voir notre article d'introduction à la photogrammétrie avec ces logiciels).
Fig 1: L'Ecoute - Henri de Miller - 1986
photo du CMP - IS-3D

2  Préparation des photos

Les photos utilisées dans cet exemple sont issues du projet IS-3D du CMP.
Les photos d'origine mesurent 2816x2112 pixels de côtés. Nous avons redimensionné ces photos et travaillé à partir de photos mesurant 800x600 et 1600x1200 pixels, afin d'accélérer les temps de calcul.

3  Nuage de points

La procédure pour la création du nuage de point à partir de VisualSFM est la suivante :
  1. Ouverture des photos 800x600 et recherche des feature matches avec SfM / Pairwise Matching / Compute Missing Match
  2. Enregistrement des couples de photos trouvées (SfM / Pairwise Matching / Export Feature Matches) pour accélérer la recherche des couples de photos pour le cas avec photos 1600x1200 traité ensuite. Le fichier obtenu est un fichier texte.
  3. Modifier ce fichier texte pour ne conserver à chaque ligne que les couples de photos (noms avec chemins d'accès, séparés par un espace). Nous nous servirons de ce fichier un peu plus tard.
  4. VisualSFM : SfM / Reconstruct 3D
  5. VisualSFM : SfM / Run CMVS/PMVS
On obtient alors un nuage de points de 40000 points après nettoyage. Ce premier nuage de points est suffisant dans le cas présent compte tenu de l'imprécision sur la masse volumique du grès que nous verrons plus loin. Cependant, si on souhaite obtenir un nuage de point plus dense, il faut alors procéder comme suit.
  1. Relancer visualSFM, en ouvrant cette fois-ci les photos 1600x1200, et appliquer SfM / Pairwise Matching / Compute Specified Match en choisissant le fichier texte contenant les couples de photos.
  2. VisualSFM : SfM / Reconstruct 3D
  3. VisualSFM : SfM / Run CMVS/PMVS
On obtient un nuage de points d'environ 160000 points après nettoyage.
Nettoyage   Ouverture du nuage de point obtenu, et nettoyage à la main des points qui ne concernent pas la statue. Il faut également nettoyer les artefacts créés par le ciel, les ombres, les surfaces trop inclinés par rapport au plan de la photo comme le sommet de la tête etc. Utiliser éventuellement Point set / Estimate radius from density puis Selection / Conditional Vertex Selection en ajustant la valeur de rad afin de sélectionner les points isolés.

4  Création du maillage

Dans la suite, nous réalisons toujours la suite d'opérations suivante sur le nuage de points obtenus avec les photos 1600x1200 :
  1. Meshlab : Sampling / Poisson-disk Sampling Base mesh subsampling pour obtenir un sous-échantillonage de $X$ points.
  2. Meshlab : Point Set / Compute Normals for Point Set, en laissant la case Flip normals w.r.t. viewpoint décochée
  3. Meshlab : Filters /Remeshing, simplification and reconstruction / Surface Reconstruction : Poisson avec Octree Depth égal à $OD$, Solver Divide égal à 6, et Samples per node égal à $SN$
Les exemples suivants montrent les résultats obtenus en faisant varier un paramètre à la fois parmi $X$, $OD$ et $SN$
Samples per node  
Fig 2: $N$=10000 $OD$=8 $SN$=1 2 3 5 de gauche à droite
Les points colorés correspondent au nuage de points. Les points blancs correspondent aux points du maillage. On note ici qu'augmenter la valeur de samples per node $SN$ valeur a pour effet ici de resserrer le maillage sur le nuage de point, alors qu'un offset existe pour la valeur $SN$ = 1
Octree depth  
Fig 3: $N$=30000 $OD$=6 7 8 9 $SN$=5
Augmenter Octree Depth de 6 à 7 permet d'améliorer le détail du nez, mais les augmentations suivantes n'ont pas d'effet marqué sur le volume obtenu. Le maillage s'affine.
Nombres de points du sous-échantillonnage  
Fig 4: $X$=10000 30000 60000 de gauche à droite $OD$=8 $SN$=5
Augmenter le nombre de points du sous-échantillonnage a deux effets antagonistes du point de vue du calcul du volume :
  • cela améliore la précision du maillage dans les zones où il existe suffisamment de points pour définir des détails. Le nez et les yeux par exemple sont mieux définis.
  • cela dégrade le rendu des zones pour lesquelles il n'y a pas de points dans le nuage de points (appui sur le sol et sommet de la tête de la statue, partie cachée par la main : zones qui ne sont pas ou mal visibles sur les photos).
Fig 5: nuage de point à gauche et maillage $N$=10000 $OD$=8 $SN$=1 à droite
perte des détails

5  Calcul du volume

Le modèle suivant a été obtenu à partir d'un sous-échantillonage de $X$=30000 points et $SN$=5 . Le maillage a été raffiné avant le transfert des propriétés de couleur du nuage de point de départ sur le maillage pour obtenir une texture la plus proche possible de la réalité (mais sans aucun intérêt pour le calcul qui va suivre). Les zones blanches correspondent à des zones où nous n'avons pas de point de départ, et où l'algorithme de reconstruction de poisson a "inventé" une surface, qui semble proche de la surface réelle.
Fig 6: Modèle final avant orientation
Après avoir orienté1 correctement la tête pour que l'axe z corresponde à la verticale, et que l'axe x soit placé dans l'axe du plus grand côté, nous avons mis à l'échelle le modèle de manière à ce que la tête face 3m00 de haut2. Pour cette mise à l'échelle, la statue fait 4m87 de long et 3m30 de large, pour un volume de 22,2m3. Pour trouver ces informations, il suffit d'appliquer le filtre de meshlab Quality mesures and computations / Compute geometric mesures au maillage. Si on avait simplement appliqué la formule du volume d'un ellipsoïde - $\frac{4}{3}\pi{}abc$ - on aurait trouvé beaucoup plus rapidement l'approximation suivante : 25m3.
Le grès que l'on peut trouver en Bourgogne pèse entre 2049kg/m3 (grès de Senargent) et 2704 kg/m3 (grès de Treigny), et on peut donc estimer le poids de la tête seule de la statue (sans la main) entre 45 et 60 tonnes. Il est à noter que ce calcul ne prend pas en compte la structure en béton armé interne qui uni les différents blocs, cependant le poids volumique du béton armé étant de 2500 kg/m3 les résultats obtenus seraient proches.

6  Conclusion

La statue que nous avons pris pour exemple ici a une géométrie relativement régulière, ce qui simplifie grandement l'obtention d'un maillage acceptable pour le calcul du volume. Pour des situations plus complexes, l'utilisation basique de VisualSFM que nous proposons peu ne pas suffire. Il existe d'autres logiciels de photogrammétrie pour obtenir des nuages de points, et en particulier un logiciel français, MicMac (version pour windows). Ce dernier permettrait probablement d'obtenir des nuages de points plus denses, cependant son utilisation est beaucoup plus complexe que celle que nous faisons ici avec visualSFM.
Nous reviendrons plus longuement sur le sujet du calcul du poids des statues dans un prochain article.
 
Article mis en ligne le : 15/02/2013.


Notes:

1 Pour l'orientation du maillage, on peut utiliser l'outil Manipulator - voir le tutorial vidéo - et le filtre Rotate : transform to fit to a plane.
2 La dimension exacte de la statue n'étant pas connue, nous avons noté que chaque assise de la statue mesure environ 1m00, la statue étant constituée de 3 assises.