我试图找出从3D范围数据进行表面重建的算法。乍一看,似乎 Ball旋转算法( BPA )和 Poisson曲面重建是更成熟的方法?
答案 0 :(得分:88)
我几个月来一直面临着这种困境,并进行了详尽的研究。
主要有两类算法:计算几何和隐式曲面。
它们使网格适合现有点。
这一组中最着名的算法可能是powercrust,因为它在理论上已经很成熟 - 它保证了水密网格。
Ball Pivoting获得IBM专利。此外,它不适用于具有不同点密度的pointcloud。
一个在pointcloud上拟合隐式函数,然后使用类似行星 - 立方体的算法将函数的零集提取到网格中。
此类别中的方法主要区别在于使用的不同隐式函数。
Poisson,Hoppe's和MPU是此类别中最着名的算法。如果您是这个主题的新手,我建议您阅读Hoppe的论文,它非常具有说明性。
这类算法通常可以实现,以便它们能够非常有效地处理大量输入,并且可以扩展它们的质量速度权衡。它们不受噪声,不同点密度,孔洞的干扰。它们的缺点是它们在输入点需要一致定向的表面法线。
您会发现少量免费实施。但是,这取决于您是要将其集成到自由软件(在这种情况下,GPL许可证是否可以为您)或商业软件(在这种情况下,您需要更自由的许可证)。后者非常罕见。
一个在VTK。我怀疑它很难集成(没有免费的文档),它有一个奇怪的,过于复杂的架构,并不是为高性能应用程序设计的。对于允许的输入pointcloud也有一些限制。
看看this泊松实施,之后请与我分享您的经验。
此外: here是一些高性能算法,其中包括表面重建。
CGAL是一个着名的3D库,但它只对免费项目免费。 Meshlab是GPL的着名应用程序。
另外(2013年8月添加): 图书馆PCL有module专门用于表面重建,并且正在积极开发中(并且是Google的代码之夏)的一部分。表面模块包含许多用于重建的不同算法。 PCL还has the ability来估算曲面法线,如果你没有为它们提供点数据,可以在功能module中找到此功能。 PCL是根据BSD许可条款发布的,是开源软件,可免费用于商业和研究用途。
答案 1 :(得分:10)
如果你想用各种表面重建算法做一些直接的实验,你应该尝试 MeshLab ,网格处理系统,它是开源的,它包含许多以前的实现引用表面重建算法,如:
来源受GPL保护,因此您无法在商业闭源项目中使用它们,但是对各种表面重建算法的属性(对它们的噪声敏感程度,对它们有多敏感)非常重要。在开始实施其中之一之前,速度,对异常值的鲁棒性,它们如何保留精细细节等等)。
答案 2 :(得分:5)
你可能会开始关注这个领域最近的一些工作 - 目前像Gianmauro Cuccuru,Enrico Gobbetti,Fabio Marton,Renato Pajarola和Ruggero Pintus这样的Fast low-memory streaming MLS reconstruction of point-sampled surfaces。它的引用可以让你快速浏览文献。
答案 3 :(得分:4)
答案 4 :(得分:3)
不确定它是否完全适用于您的情况,因为您省略它似乎很奇怪,但在这类情况下通常会提到marching cubes。
答案 5 :(得分:1)
Here是Mesh Processing Library在C ++中的开源Dr. Hugues Hoppe,其中表面重建程序 Recon 是您的问题的一个很好的选择...
答案 6 :(得分:1)
有3D Delaunay tool by Geometric Tools。该工具使用DirecX和OpenGL。不幸的是,您可能需要购买一本书来查看库的实际示例代码。你仍然阅读代码并弄明白。
Matlab还使用Delaunay delaunayTriangulation class引入了表面重建工具。
答案 7 :(得分:1)
由于我也有这个问题,我确实开发并实现了自己的点云外壳算法。可以在github.com上找到源代码和文档:https://github.com/ricebean-net/PointCloudCrust。该算法以Java实现。
也许,这可以帮到你。您还可以在页面上找到一个简短的python脚本,说明如何使用该库。玩得开心!
答案 8 :(得分:0)
您可能对Alpha Shapes感兴趣。