algoritmo robusto na reconstrução da superfície de nuvem de pontos 3D?
-
22-07-2019 - |
Pergunta
Eu estou tentando descobrir o que algoritmos existem para fazer reconstrução da superfície a partir de dados de alcance 3D. À primeira vista, parece que o Ball giro algoritmo ( BPA ) e Poisson reconstrução da superfície são os métodos mais tradicionais?
- O que o estabelecido, o algoritmo mais robusto no campo diferente do BPA e Poisson algoritmo de reconstrução da superfície?
- As publicações de pesquisa recomendada?
- Existe código fonte disponível?
Solução
Eu têm vindo a enfrentar este dilema há alguns meses, e fez uma pesquisa exaustiva.
Algoritmos
Principalmente, existem 2 categorias de algoritmos:. Geometria computacional e superfícies implícitas
Computação Geometria
Eles se encaixam a malha sobre os pontos existentes.
Provavelmente o algoritmo mais famoso deste grupo é powercrust , porque é teoricamente bem estabelecida -. garante estanque malha
Ball Pivoting é patenteada pela IBM. Além disso, ele não é adequado para pointclouds com densidade variável ponto.
funções implícitas
funções se encaixa implícitos na pointcloud, em seguida, usa uma marcha-cube-como algoritmo para extrair a-ponto zero da função em uma malha.
Métodos nesta categoria diferem principalmente pelas diferentes funções implícitas utilizadas.
Poisson , Hoppe, e MPU são os mais famosos algoritmos nesta categoria. Se você é novo para o tópico, eu recomendo ler a tese de Hoppe, é muito explicativo.
Os algoritmos nesta categoria geralmente podem ser implementadas de modo que eles são capazes de processar entradas enormes de forma muito eficiente, e pode-se dimensionar a sua qualidade <-> velocidade trade-off. Eles não são perturbados pelo ruído, variando de ponto-densidade, buracos. A desvantagem deles é que eles exigem consistentemente orientada normais de superfície nos pontos de entrada.
Implementações
Você vai encontrar pequeno número de implementações livres. No entanto, depende se você estiver indo para integrá-lo em software livre (neste caso de licença GPL é aceitável para você) ou em um software comercial (neste caso, você precisa de uma licença mais liberal). Este último é muito raro.
Uma delas é em VTK . Eu suspeito que ele seja difícil de integrar (nenhuma documentação está disponível gratuitamente), tem uma arquitetura estranha, sobre-complicada, e não é projetado para aplicações de alto desempenho. Também tem algumas limitações para os pointclouds de entrada permitidos.
Dê uma olhada este implementação Poisson, e depois disso share sua experiência sobre isso comigo, por favor.
Além disso: aqui alguns algoritmos de alto desempenho, com reconstrução da superfície entre eles.
CGAL é uma biblioteca 3D famoso, mas é livre somente para projetos livres. MeshLab é uma aplicação famoso com GPL.
Além disso (Adicionado agosto 2013): A biblioteca PCL tem um módulo dedicada à reconstrução da superfície e está em desenvolvimento ativo (e faz parte do Verão do Google de Código). O módulo de superfície contém um número de diferentes algoritmos de reconstrução. PCL também tem a capacidade de estimar normais de superfície, no caso de você não tê-los fornecido com o seu dados de ponto, esta funcionalidade pode ser encontrado nas características módulo . PCL é liberado sob os termos da licença BSD e é um software de código aberto, é livre para uso comercial e pesquisa.
Outras dicas
Se você quiser fazer algumas experiências diretas com vários algoritmos de reconstrução de superfície que você deve tentar MeshLab , o sistema de processamento de malha, que é open source e contém implementações de muitos dos algoritmos de reconstrução de superfície anteriormente citados, como:
- Poisson Superfície Recon
- um par de MLS com base abordagem,
- a implementação de giro bola
- uma variante da abordagem baseada em volume Curless
- técnicas baseadas Delaunay (formas alfa e Voronoi filtragem)
- ferramentas para normais de conjuntos de pontos dispersos de computação
- e muitas outras ferramentas para comparar / medição / limpeza / simplificando as malhas resultantes.
As fontes são protegidos pela GPL, para que você não poderia usá-los em um projeto de código fechado comercial, mas é muito importante para obter a sensação de direito sobre as propriedades dos vários algoritmos de reconstrução de superfície (como sensíveis ao ruído que são, a velocidade, a robustez a outliers, como eles preservar detalhes finos etc etc) antes de começar a implementar um deles.
Você pode começar a olhar para alguns trabalhos recentes no campo - atualmente algo como rápido de pouca memória streaming de reconstrução MLS de superfícies por Gianmauro Cuccuru, Enrico Gobbetti, Fabio Marton, Renato Pajarola e Ruggero Pintus amostrados pontos. Suas citações pode você ir através da literatura muito rapidamente.
Apesar de não ser uma representação de malha, um ex-colega me recomendou este link ao código-fonte de um método Placa Spline Fina:
Qualquer um tentou fazê-lo?
Não tenho certeza se é exatamente certo para o seu caso, uma vez que parece estranho que você omitiu, mas marcha cubos é comumente citados em casos como estes.
Aqui no GitHub, é uma fonte aberta Biblioteca de processamento de malha em C ++ por Dr. Hugues Hoppe , em que o programa de reconstrução de superfície Recon é uma boa opção para o seu problema ...
Há ferramenta 3D Delaunay por Ferramentas geométricas . Esta ferramenta é usada DirecX e OpenGL. Infelizmente, você pode precisar comprar um livro para ver o código exemplo real da biblioteca. Você ainda ler o código e descobrir.
Matlab também introduziu uma ferramenta de reconstrução da superfície usando Delaunay, Triangulação de Delaunay classe .
Como tive esse problema também, eu desenvolver e implementar o meu próprio algoritmo crosta ponto nuvem. As fontes, bem como a documentação podem ser encontradas no github.com: https://github.com/ricebean -net / PointCloudCrust . O algoritmo é implementado em Java.
Talvez, isso pode ajudá-lo. Você pode encontrar também um script python curta na página que ilustra como usar a biblioteca. Divirta-se!
Você pode estar interessado em Alpha Shapes .