我正在试图找出有哪些算法可以从三维范围数据中进行表面重建。乍一看,Ball pivoting algorithm (BPA) 和 Poisson surface reconstruction 看起来是更为成熟的方法?
- 除了BPA和Poisson表面重建算法之外,在该领域中还有什么已建立、更健壮的算法吗?
- 推荐的研究出版物是什么?
- 是否有可用的源代码?
我正在试图找出有哪些算法可以从三维范围数据中进行表面重建。乍一看,Ball pivoting algorithm (BPA) 和 Poisson surface reconstruction 看起来是更为成熟的方法?
我已经面临这个困境已有几个月了,并进行了详尽的研究。
主要有两类算法:计算几何和隐式表面。
它们通过适合现有点上的网格来完成任务。
这个组中最著名的算法可能是powercrust,因为它在理论上很成熟-它保证网格无漏洞。
Ball Pivoting由IBM拥有专利。此外,它不适用于点密度不同的点云。
该类算法在点云上拟合隐式函数,然后使用类似Marching Cube的算法将零集提取为网格。
该类方法主要区别在所使用的不同隐式函数上。
Poisson、Hoppe's和MPU是该类别中最著名的算法。如果您对这个主题还不熟悉,我建议您阅读Hoppe的论文,它非常详细。
这一类算法通常可以实现为能够非常高效地处理巨大输入的方式,并且可以缩放其质量和速度之间的平衡。它们不受噪声、不同的点密度、孔洞等影响。它们的一个缺点是需要在输入点处具有一致的表面法线。
您将找到少量的免费实现。然而这取决于您是否要将其集成到自由软件中(在这种情况下,GPL许可证对您是可接受的)或商业软件中(在这种情况下,您需要更自由的许可证)。后者非常罕见。
其中一个在VTK中。我怀疑它很难集成(没有可免费获得的文档),它的架构奇怪而且过于复杂,并且不适用于高性能应用程序。此外,还有一些对允许的输入点云的限制。
看看这个泊松实现,然后请与我分享您的经验。
另外:这里有一些高性能算法,其中包括表面重建。
CGAL是一个著名的3D库,但仅适用于免费项目。 Meshlab是一款带有GPL的知名应用程序。
此外(添加于2013年8月): 库PCL有一个专门用于表面重建的模块,并正在积极开发中(是Google的Summer of Code的一部分)。表面模块包含许多不同的重建算法。 PCL还有能力估计表面法线,以防数据没有提供它们,这种功能可以在特征模块中找到。 PCL按照BSD许可条款发布,并且是开源软件,可以免费用于商业和研究用途。
如果您想对各种表面重建算法进行直接实验,可以尝试MeshLab,它是一个网格处理系统,是开放源代码的,并包含了许多之前提到的表面重建算法的实现,例如:
这些资源受GPL保护,因此您不能在商业闭源项目中使用它们,但在开始实现其中任何一种算法之前,了解各种表面重建算法(它们对噪声的敏感度,速度,对异常值的鲁棒性,如何保留精细细节等等)的属性非常重要。
您可以开始查看该领域的一些最新工作 - 目前类似于 Gianmauro Cuccuru、Enrico Gobbetti、Fabio Marton、Renato Pajarola 和 Ruggero Pintus 的Fast low-memory streaming MLS reconstruction of point-sampled surfaces。它的引用可以让您快速浏览文献。
因为我自己也遇到了这个问题,所以我开发并实现了自己的点云外壳算法。源代码和文档都可以在github.com上找到:https://github.com/meixxi/PointCloudCrust。这个算法是用Java实现的。
也许这能帮到你。在网页上还有一个简短的Python脚本,说明如何使用库。祝你玩得开心!
不确定它是否完全适用于你的情况,因为你似乎省略了一些信息,但是在这种情况下常常提到的是Marching cubes算法。
这里有一个Geometric Tools开发的3D Delaunay工具,它使用了DirecX和OpenGL。不幸的是,你可能需要购买一本书来查看该库的实际示例代码。但你仍然可以阅读代码并弄清楚。
Matlab也引入了一个使用Delaunay的表面重建工具,delaunayTriangulation类。
这里是一个开源的C++网格处理库,由Hugues Hoppe博士编写,在其中,表面重建程序Recon是解决您问题的不错选择...