76

我试图弄清楚有哪些算法可以从 3D 范围数据进行表面重建。乍一看,Ball pivoting algorithm ( BPA ) 和Poisson 曲面重建似乎是更成熟的方法?

  • 除了 BPA 和泊松曲面重建算法,该领域还有哪些成熟的、更稳健的算法?
  • 推荐的研究出版物?
  • 有可用的源代码吗?
4

9 回答 9

108

我已经面临这个困境几个月了,并进行了详尽的研究。

算法

主要有两类算法:计算几何和隐式曲面。

计算几何

它们将网格拟合到现有点上。

该组中最著名的算法可能是powercrust,因为它在理论上是完善的——它保证了不透水的网格。

Ball Pivoting is patented by IBM. Also, it is not suitable for pointclouds with varying point density.

Implicit functions

One fits implicit functions on the pointcloud, then uses a marching-cube-like algorithm to extract the zero-set of the function into a mesh.

Methods in this category differ mainly by the different implicit functions used.

Poisson, Hoppe's, and MPU are the most famous algorithms in this category. If you are new to the topic, i recommend to read Hoppe's thesis, it is very explanatory.

The algorithms of this category usually can be implemented so that they are able to process huge inputs very efficiently, and one can scale their quality<->speed trade-off. They are not disturbed by noise, varying point-density, holes. A disadvantage of them is that they require consistently oriented surface normals at the input points.

Implementations

You will find small number of free implementations. However it depends on whether You are going to integrate it into free software (in this case GPL license is acceptable for You) or into a commercial software (in this case You need a more liberal license). The latter is very rare.

One is in VTK. I suspect it to be difficult to integrate (no documentation is available for free), it has a strange, over-complicated architecture, and is not designed for high-performance applications. Also has some limitations for the allowed input pointclouds.

Take a look at this Poisson implementation, and after that share your experience about it with me please.

Also: here are a few high-performance algorithms, with surface reconstruction among them.

CGAL is a famous 3d library, but it is free only for free projects. Meshlab is a famous application with GPL.

Also (Added August 2013): The library PCL has a module dedicated to surface reconstruction and is in active development (and is part of Google's Summer of Code). The surface module contains a number of different algorithms for reconstruction. PCL also has the ability to estimate surface normals, incase you do not have them provided with your point data, this functionality can be found in the features module. PCL is released under the terms of the BSD license and is open source software, it is free for commercial and research use.

于 2009-05-26T20:16:08.130 回答
14

If you want make some direct experiments with various surface reconstruction algorithms you should try MeshLab, the mesh-processing system, it is open source and it contains implementations of many of the previously cited surface reconstruction algorithms, like:

  • Poisson Surface Recon
  • a couple of MLS based approach,
  • a ball pivoting implementation
  • a variant of the Curless volume based approach
  • Delaunay based techniques (Alpha shapes and Voronoi filtering)
  • tools for computing normals from scattered point sets
  • and many other tools for comparing/measuring/cleaning/simplifying the resulting meshes.

Sources are protected by GPL, so you could not use them in a commercial closed source project, but it is very important to get the right feeling about the properties of the various surface reconstruction algorithms (how sensitive to noise they are, the speed, the robustness to outliers, how they preserve fine details etc etc) before starting to implement one of them.

于 2010-01-02T02:40:12.757 回答
5

您可能会开始查看该领域的一些最新工作 - 目前例如Gianmauro Cuccuru、Enrico Gobbetti、Fabio Marton、Renato Pajarola 和 Ruggero Pintus对点采样表面的快速低内存流式 MLS 重建。它的引文可以让你快速浏览文献。

于 2009-05-11T05:03:13.513 回答
4

While not a mesh representation, an ex-colleague recommended me this link to source code for a Thin Plate Spline method:

Link

Anyone tried it?

于 2009-05-28T13:49:08.430 回答
3

不确定它是否完全适合您的情况,因为您省略了它似乎很奇怪,但是在这种情况下通常会提到行进立方体。

于 2009-05-08T08:20:07.370 回答
3

As I had this problem too, I did develop and implement my own point cloud crust algorithm. The sources, as well as the documentation, can be found on github.com: https://github.com/meixxi/PointCloudCrust. The algorithm is implemented in Java.

Maybe, this can help you. You can find also a short python script on the page which illustrates how to use the library. Have fun!

于 2017-01-25T22:56:04.363 回答
1

Here on GitHub, is a open source Mesh Processing Library in C++ by Dr. Hugues Hoppe, in which the surface reconstruction program Recon is a good option for your problem...

于 2016-09-13T13:18:40.397 回答
1

There is 3D Delaunay tool by Geometric Tools. This tool is used DirecX and OpenGL. Unfortunately, you may need buy a book to see actual example code of the library. You still read the code and figure out.

Matlab also introduced a surface reconstruction tool using Delaunay, delaunayTriangulation class.

于 2016-09-19T20:44:43.420 回答
0

您可能对Alpha Shapes感兴趣。

于 2009-05-08T17:14:43.083 回答