algorithme robuste pour la reconstruction de surfaces à partir d'un nuage de points 3D ?

StackOverflow https://stackoverflow.com/questions/838761

Question

J'essaie de comprendre quels algorithmes existent pour effectuer la reconstruction de surface à partir de données de plage 3D.À première vue, il semble que le Algorithme de pivotement de la balle (BPA) et Reconstruction de la surface de Poisson sont les méthodes les plus établies ?

  • Quels sont les algorithmes établis et plus robustes dans le domaine autres que l'algorithme de reconstruction de surface BPA et Poisson ?
  • Publications de recherche recommandées ?
  • Existe-t-il un code source disponible ?
Était-ce utile?

La solution

Je suis confronté à ce dilemme depuis quelques mois maintenant et j'ai fait des recherches exhaustives.

Algorithmes

Il existe principalement 2 catégories d’algorithmes :géométrie de calcul et surfaces implicites.

Géométrie de calcul

Ils ajustent le maillage sur les points existants.

L’algorithme le plus connu de ce groupe est probablement croûte de puissance, parce qu'il est théoriquement bien établi, il garantit l'étanchéité du maillage.

Ball Pivoting est breveté par IBM.De plus, il ne convient pas aux nuages ​​de points dont la densité de points varie.

Fonctions implicites

On ajuste les fonctions implicites sur le nuage de points, puis on utilise un algorithme de type marche-cube pour extraire l'ensemble zéro de la fonction dans un maillage.

Les méthodes de cette catégorie diffèrent principalement par les différentes fonctions implicites utilisées.

Poisson, Hoppé, et Carte mère sont les algorithmes les plus connus de cette catégorie.Si vous êtes nouveau sur le sujet, je vous recommande de lire la thèse de Hoppe, elle est très explicative.

Les algorithmes de cette catégorie peuvent généralement être implémentés de manière à pouvoir traiter d'énormes entrées de manière très efficace, et il est possible d'adapter leur compromis qualité <-> vitesse.Ils ne sont pas dérangés par le bruit, la densité ponctuelle variable, les trous.Un inconvénient est qu'ils nécessitent des normales de surface orientées de manière cohérente aux points d'entrée.

Implémentations

Vous trouverez un petit nombre d’implémentations gratuites.Cependant, cela dépend si vous allez l'intégrer dans un logiciel libre (dans ce cas, la licence GPL est acceptable pour vous) ou dans un logiciel commercial (dans ce cas, vous avez besoin d'une licence plus libérale).Ce dernier est très rare.

L'un est dans VTK.Je soupçonne qu'il est difficile à intégrer (aucune documentation n'est disponible gratuitement), qu'il a une architecture étrange et trop compliquée et qu'il n'est pas conçu pour des applications hautes performances.Présente également certaines limitations pour les nuages ​​de points d'entrée autorisés.

Jeter un coup d'œil à ce Implémentation de Poisson, et après cela, partagez votre expérience avec moi s'il vous plaît.

Aussi:ici Il existe quelques algorithmes hautes performances, parmi lesquels la reconstruction de surface.

CGAL est une célèbre bibliothèque 3D, mais elle n'est gratuite que pour les projets gratuits.Laboratoire de mailles est une application célèbre sous GPL.

Aussi (Ajouté en août 2013) :La bibliothèque PCL a un module dédié à la reconstruction de surfaces et est en développement actif (et fait partie du Summer of Code de Google).Le module surface contient un certain nombre d’algorithmes différents pour la reconstruction.PCL également a la capacité pour estimer les normales de surface, au cas où vous ne les auriez pas fournies avec vos données de points, cette fonctionnalité se trouve dans les fonctionnalités module.PCL est publié selon les termes de la licence BSD et est un logiciel open source, il est gratuit pour une utilisation commerciale et de recherche.

Autres conseils

Si vous souhaitez expérimenter directement divers algorithmes de reconstruction de surface, essayez MeshLab , le système de traitement de maillage, il est open source et contient les implémentations de nombreux algorithmes de reconstruction de surface cités précédemment, tels que:

  • Reconnaissance de surface de Poisson
  • une ou deux approches basées sur la MLS,
  • une implémentation pivotante de la balle
  • une variante de l'approche basée sur le volume Curless
  • Techniques basées sur Delaunay (formes alpha et filtrage de Voronoï)
  • outils pour calculer les normales d’ensembles de points dispersés
  • et de nombreux autres outils pour comparer / mesurer / nettoyer / simplifier les maillages résultants.

Les sources étant protégées par la GPL, vous ne pouvez pas les utiliser dans un projet source fermé commercial, mais il est très important de connaître correctement les propriétés des différents algorithmes de reconstruction de surface (leur sensibilité au bruit, la la rapidité, la robustesse aux valeurs aberrantes, la façon dont elles conservent les détails les plus fins, etc., etc.) avant de commencer à mettre en œuvre l’une d’elles.

Vous pouvez commencer à regarder des travaux récents sur le terrain - actuellement quelque chose comme Reconstruction rapide MLS en streaming à faible mémoire pour les surfaces ponctuelles par Gianmauro Cuccuru, Enrico Gobbetti, Fabio Marton, Renato Pajarola et Ruggero Pintus. Ses citations peuvent vous permettre de parcourir assez rapidement la littérature.

Bien qu’il ne s’agisse pas d’une représentation maillée, un ancien collègue m’a recommandé ce lien. au code source d'une méthode Spline Plate Spline:

Lien

Quelqu'un a essayé?

Je ne sais pas si cela vous convient, car il semble étrange que vous l'ayez omis, mais en marche. les cubes sont couramment mentionnés dans de tels cas.

Ici sur GitHub, est une source ouverte Bibliothèque de traitement de maillage en C ++ par Dr. Hugues Hoppe , dans lequel le programme de reconstruction de surface Recon est une bonne option pour résoudre votre problème ...

Il existe un outil 3D Delaunay créé par Geometric Tools . Cet outil est utilisé DirecX et OpenGL. Malheureusement, vous devrez peut-être acheter un livre pour voir un exemple de code de la bibliothèque. Vous continuez à lire le code et à comprendre.

Matlab a également introduit un outil de reconstruction de surface utilisant Delaunay, de la classe delaunayTriangulation . .

Comme j'avais également ce problème, j'ai développé et implémenté mon propre algorithme de croûte de nuages ​​de points.Les sources ainsi que la documentation sont disponibles sur github.com : https://github.com/ricebean-net/PointCloudCrust.L'algorithme est implémenté en Java.

Peut-être que cela peut vous aider.Vous pouvez également trouver un court script python sur la page qui illustre comment utiliser la bibliothèque.Amusez-vous!

Vous pourriez être intéressé par les Formes alpha .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top