从 3D 点云进行表面重建的鲁棒算法?
-
22-07-2019 - |
题
我试图弄清楚有哪些算法可以根据 3D 范围数据进行表面重建。乍一看,似乎 球旋转算法 (双酚A) 和 泊松曲面重建 有更成熟的方法吗?
- 除了BPA和泊松曲面重建算法之外,该领域还有哪些已建立的、更鲁棒的算法?
- 推荐的研究出版物?
- 有可用的源代码吗?
解决方案
我已经面临这个困境几个月了,并进行了详尽的研究。
算法
主要有2类算法:计算几何和隐式曲面。
计算几何
他们将网格拟合到现有点上。
该组中最著名的算法可能是 动力地壳, ,因为它在理论上是完善的 - 它保证了网格的水密性。
球枢轴是 IBM 的专利。此外,它不适用于具有不同点密度的点云。
隐式函数
在点云上拟合隐式函数,然后使用类似行进立方体的算法将函数的零集提取到网格中。
此类方法的主要区别在于所使用的隐式函数不同。
泊松, 霍普的, , 和 微处理器 是这一类别中最著名的算法。如果您对这个主题不熟悉,我建议您阅读 Hoppe 的论文,它非常有解释性。
此类算法通常可以实现,以便它们能够非常有效地处理大量输入,并且可以缩放其质量<->速度权衡。它们不受噪声、变化的点密度、孔洞的干扰。它们的缺点是它们需要输入点处一致定向的表面法线。
实施
您会发现少量的免费实现。然而,这取决于您是否要将其集成到自由软件(在这种情况下,您可以接受 GPL 许可证)或商业软件(在这种情况下,您需要更自由的许可证)。后者非常罕见。
一个是在 VTK. 。我怀疑它很难集成(没有免费的文档),它有一个奇怪的、过于复杂的架构,并且不是为高性能应用程序设计的。对于允许的输入点云也有一些限制。
看一眼 这 泊松实现,然后请与我分享您的经验。
还:这里 是一些高性能算法,其中包括表面重建。
CGAL是著名的3d库,但仅对免费项目免费。网格实验室 是一个著名的GPL应用程序。
另外(2013 年 8 月添加):图书馆 聚己内酯 有一个 模块 致力于表面重建并且正在积极开发中(并且是 Google 代码之夏的一部分)。表面模块包含许多不同的重建算法。也有PCL 有能力 估计表面法线,如果您没有随点数据提供它们,则可以在功能中找到此功能 模块. 。PCL是根据BSD许可条款发布的,是开源软件,可免费用于商业和研究用途。
其他提示
如果您想使用各种表面重建算法进行一些直接实验,您应该尝试 网格实验室, ,网格处理系统,它是开源的,它包含许多先前引用的表面重建算法的实现,例如:
- 泊松表面侦察
- 一些基于 MLS 的方法,
- 球枢转实现
- Curless 基于体积的方法的变体
- 基于 Delaunay 的技术(Alpha 形状和 Voronoi 过滤)
- 用于计算分散点集法线的工具
- 以及许多其他用于比较/测量/清理/简化生成的网格的工具。
源代码受 GPL 保护,因此您不能在商业闭源项目中使用它们,但对各种表面重建算法的属性有正确的感觉非常重要(它们对噪声的敏感程度、速度、在开始实施其中之一之前,对异常值的鲁棒性,它们如何保留精细细节等)。
您可能会开始关注该领域最近的一些工作 - 目前类似于 点采样表面的快速低内存流 MLS 重建 作者:Gianmauro Cuccuru、Enrico Gobbetti、Fabio Marton、Renato Pajarola 和 Ruggero Pintus。它的引用可以让你很快地浏览文献。
不确定它是否完全适合您的情况,因为您省略它似乎很奇怪,但是 行进立方体 在此类情况下经常被提及。
有 Geometric Tools 的 3D Delaunay 工具. 。这个工具使用的是DirecX和OpenGL。不幸的是,您可能需要购买一本书才能查看该库的实际示例代码。你仍然阅读代码并弄清楚。
Matlab还推出了使用Delaunay的表面重建工具, delaunay三角测量类.
由于我也遇到了这个问题,我确实开发并实现了自己的点云地壳算法。源代码和文档可以在 github.com 上找到: https://github.com/ricebean-net/PointCloudCrust. 。该算法是用Java 实现的。
也许,这可以帮助你。您还可以在页面上找到一个简短的 python 脚本,其中说明了如何使用该库。玩得开心!
您可能感兴趣 阿尔法形状.