从 3D 点云进行表面重建的鲁棒算法?
我试图弄清楚有哪些算法可以根据 3D 范围数据进行表面重建。 乍一看,似乎球旋转算法(BPA)和泊松曲面重建是更成熟的方法?
- 除了BPA和泊松曲面重建算法之外,该领域还有哪些成熟的、更鲁棒的算法?
- 推荐的研究出版物?
- 有可用的源代码吗?
I am trying to figure out what algorithms there are to do surface reconstruction from 3D range data. At a first glance, it seems that the Ball pivoting algorithm (BPA) and Poisson surface reconstruction are the more established methods?
- What are the established, more robust algorithm in the field other than BPA and Poisson surface reconstruction algorithm?
- Recommended research publications?
- Is there available source code?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
我已经面临这个困境几个月了,并进行了详尽的研究。
算法
主要有两类算法:计算几何和隐式曲面。
计算几何
它们将网格拟合到现有点上。
该组中最著名的算法可能是 powercrust,因为它是理论上很完善——它保证了网格的防水。
球枢轴是 IBM 的专利。 此外,它不适用于具有不同点密度的点云。
隐式函数
在点云上拟合隐式函数,然后使用类似行进立方体的算法将函数的零集提取到网格中。
此类方法的主要区别在于所使用的隐式函数不同。
泊松,Hoppe 的,以及 MPU 是这一类别中最著名的算法。 如果您对这个主题不熟悉,我建议您阅读 Hoppe 的论文,它非常有解释性。
通常可以实现这一类别的算法,以便它们能够非常有效地处理大量输入,并且可以缩放它们的质量与速度权衡。 它们不受噪声、变化的点密度、孔洞的干扰。 它们的缺点是它们需要输入点处一致定向的表面法线。
实施
您会发现少量的免费实施。 然而,这取决于您是否要将其集成到自由软件(在这种情况下,您可以接受 GPL 许可证)或商业软件(在这种情况下,您需要更自由的许可证)。 后者非常罕见。
其中之一位于 VTK 中。 我怀疑它很难集成(没有免费的文档),它有一个奇怪的、过于复杂的架构,并且不是为高性能应用程序设计的。 对于允许的输入点云也有一些限制。
看看这个泊松实现,然后分享您的经验请跟我一起。
还:
这里是一些高性能算法,其中包括表面重建。
CGAL是著名的3d库,但仅对免费项目免费。
Meshlab 是一个著名的 GPL 应用程序。
另外(2013 年 8 月添加):
库 PCL 有一个 模块专用于表面重建,正在积极开发中(并且是 Google 代码之夏的一部分)。 表面模块包含许多不同的重建算法。 PCL 还能够估计表面法线,以防您的设备中没有提供它们。点数据,此功能可以在功能模块中找到。 PCL是根据BSD许可条款发布的,是开源软件,可免费用于商业和研究用途。
I have been facing this dilemma for some months now, and made exhaustive research.
Algorithms
Mainly there are 2 categories of algorithms: computation geometry, and implicit surfaces.
Computation Geometry
They fit the mesh on the existing points.
Probably the most famous algorithm of this group is powercrust, because it is theoretically well-established - it guarantees watertight mesh.
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.
如果您想使用各种表面重建算法进行一些直接实验,您应该尝试 MeshLab,网格处理系统,它是开源的,并且包含许多先前引用的表面重建算法的实现,例如:
源代码受 GPL 保护,因此您不能在商业闭源项目中使用它们,但对各种表面重建算法的属性有正确的感觉非常重要(它们对噪声的敏感程度、速度、在开始实施其中之一之前,对异常值的鲁棒性,它们如何保留细节等)。
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:
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.
您可能会开始查看该领域最近的一些工作 - 目前类似于 点采样表面的快速低内存流式 MLS 重建,作者:Gianmauro Cuccuru、Enrico Gobbetti、Fabio Marton、Renato Pajarola 和 Ruggero Pintus。 它的引用可以让你很快地浏览文献。
You might start looking at some recent work in the field - currently something like Fast low-memory streaming MLS reconstruction of point-sampled surfaces by Gianmauro Cuccuru, Enrico Gobbetti, Fabio Marton, Renato Pajarola, and Ruggero Pintus. Its citations can get you going through the literature pretty quickly.
虽然不是网格表示,但一位前同事向我推荐了这个链接
薄板样条方法的源代码:
链接
有人尝试过吗?
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?
不确定它是否完全适合您的情况,因为您省略它似乎很奇怪,但是 行进立方体 在此类情况下经常被提及。
Not sure if it's exactly right for your case, since it seems weird that you omitted it, but marching cubes is commonly mentioned in cases like these.
由于我也遇到了这个问题,我确实开发并实现了自己的点云地壳算法。 源代码以及文档可以在 github.com 上找到: https://github.com/meixxi /点云地壳。 该算法是用Java实现的。
也许,这可以帮助你。 您还可以在页面上找到一个简短的 python 脚本,其中说明了如何使用该库。 玩得开心!
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!
这里在 GitHub 上,是一个开源的C++ 中的网格处理库,作者:
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...
有 Geometric Tools 的 3D Delaunay 工具。 这个工具使用的是DirecX和OpenGL。 不幸的是,您可能需要购买一本书才能查看该库的实际示例代码。 你仍然阅读代码并弄清楚。
Matlab 还引入了使用 Delaunay 的表面重建工具,delaunayTriangulation 类。
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.
您可能对Alpha 形状感兴趣。
You might be interested in Alpha Shapes.