鲁棒的三维点云表面重建算法?

时间:2009-05-08 08:17:13

标签: algorithm 3d computational-geometry

我试图找出从3D范围数据进行表面重建的算法。乍一看,似乎 Ball旋转算法 BPA )和 Poisson曲面重建是更成熟的方法?

  • BPA和Poisson曲面重建算法以外的领域中已建立的更稳健的算法是什么?
  • 推荐的研究出版物?
  • 是否有可用的源代码?

9 个答案:

答案 0 :(得分:88)

我几个月来一直面临着这种困境,并进行了详尽的研究。

算法

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

计算几何

它们使网格适合现有点。

这一组中最着名的算法可能是powercrust,因为它在理论上已经很成熟 - 它保证了水密网格。

Ball Pivoting获得IBM专利。此外,它不适用于具有不同点密度的pointcloud。

隐含功能

一个在pointcloud上拟合隐式函数,然后使用类似行星 - 立方体的算法将函数的零集提取到网格中。

此类别中的方法主要区别在于使用的不同隐式函数。

PoissonHoppe'sMPU是此类别中最着名的算法。如果您是这个主题的新手,我建议您阅读Hoppe的论文,它非常具有说明性。

这类算法通常可以实现,以便它们能够非常有效地处理大量输入,并且可以扩展它们的质量速度权衡。它们不受噪声,不同点密度,孔洞的干扰。它们的缺点是它们在输入点需要一致定向的表面法线。

实现

您会发现少量免费实施。但是,这取决于您是要将其集成到自由软件(在这种情况下,GPL许可证是否可以为您)或商业软件(在这种情况下,您需要更自由的许可证)。后者非常罕见。

一个在VTK。我怀疑它很难集成(没有免费的文档),它有一个奇怪的,过于复杂的架构,并不是为高性能应用程序设计的。对于允许的输入pointcloud也有一些限制。

看看this泊松实施,之后请与我分享您的经验。

此外: here是一些高性能算法,其中包括表面重建。

CGAL是一个着名的3D库,但它只对免费项目免费。 Meshlab是GPL的着名应用程序。

另外(2013年8月添加): 图书馆PCLmodule专门用于表面重建,并且正在积极开发中(并且是Google的代码之夏)的一部分。表面模块包含许多用于重建的不同算法。 PCL还has the ability来估算曲面法线,如果你没有为它们提供点数据,可以在功能module中找到此功能。 PCL是根据BSD许可条款发布的,是开源软件,可免费用于商业和研究用途。

答案 1 :(得分:10)

如果你想用各种表面重建算法做一些直接的实验,你应该尝试 MeshLab ,网格处理系统,它是开源的,它包含许多以前的实现引用表面重建算法,如:

  • Poisson Surface Recon
  • 基于MLS的几种方法,
  • 球转动实施
  • 基于Curless音量的方法的变体
  • 基于Delaunay的技术(Alpha形状和Voronoi过滤)
  • 用于计算散乱点集中法线的工具
  • 和许多其他工具,用于比较/测量/清洁/简化生成的网格。

来源受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)

虽然不是网状表示,但前同事推荐了我这个链接 要获得薄板样条方法的源代码:

Link

有人试过吗?

答案 4 :(得分:3)

不确定它是否完全适用于您的情况,因为您省略它似乎很奇怪,但在这类情况下通常会提到marching cubes

答案 5 :(得分:1)

GitHub上的

HereMesh 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感兴趣。