鲁棒的三维点云表面重buildalgorithm?

我正试图找出哪些algorithm可以从3D距离数据中进行曲面重build。 乍一看, Ball pivotingalgorithmBPA )和泊松曲面重build是比较成熟的方法吗?

  • 在BPA和泊松曲面重buildalgorithm以外,现有的更稳健的algorithm是什么?
  • 推荐研究出版物?
  • 有没有可用的源代码?

几个月来,我一直面临这个困境,做了详尽的研究。

algorithm

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

计算几何

它们适合现有点上的网格。

可能这组中最着名的algorithm是powercrust ,因为它在理论上是完善的 – 它保证了水密网格。

Ball Pivoting是IBM的专利。 另外,它不适合点密度不同的点云。

隐式函数

一个在点云上拟合隐式函数,然后使用类似marching-cube的algorithm将函数的零集提取到网格中。

这个类别中的方法主要与所使用的不同隐式函数有所不同。

Poisson , Hoppe和MPU是这一类中最着名的algorithm。 如果您对这个主题不熟悉,我build议阅读Hoppe的论文,这是非常具有说服力的。

这个类别的algorithm通常可以被实现,使得它们能够非常有效地处理巨大的input,并且可以缩放它们的质量 – 速度折衷。 它们不受噪音,不同点密度,孔的干扰。 它们的缺点是它们需要在input点处始终保持定向的表面法线。

实现

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

一个是VTK 。 我怀疑它很难集成(没有文档是免费的),它有一个奇怪的,过于复杂的架构,而不是为高性能应用而devise的。 对于允许的input点云也有一些限制。

看看这个泊松实现,然后与我分享你的经验。

另外: 这里有一些高性能algorithm,其中包括表面重build。

CGAL是一个着名的三维图书馆,但它是免费的,只有免费的项目。 Meshlab是一个与GPL着名的应用程序。

另外(2013年8月增加):图书馆PCL有一个专门用于表面重build的模块 ,并且正在积极开发(并且是Google的Summer of Summer代码的一部分)。 表面模块包含许多不同的重buildalgorithm。 PCL还具有估算曲面法线的能力 ,如果您没有提供点数据,则可以在function模块中find该function。 PCL是根据BSD许可条款发布的,并且是开源软件,可以免费用于商业和研究用途。

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

  • 泊松曲面运算
  • 几个基于MLS的方法,
  • 一个球枢转的实现
  • 基于Curless卷的方法的变体
  • 基于Delaunay技术(Alpha形状和Voronoi过滤)
  • 用于从分散点集计algorithm线的工具
  • 以及用于比较/测量/清洁/简化所得网格的许多其他工具。

来源受GPL保护,所以你不能在商业封闭源项目中使用它们,但是对各种表面重构algorithm的属性有正确的感觉是非常重要的(它们对噪声有多敏感,速度,对exception值的鲁棒性,如何保存精细的细节等等),然后开始实现其中的一个。

您可能会开始关注一些近期在该领域的工作 – 目前像Gianmauro Cuccuru,Enrico Gobbetti,Fabio Marton,Renato Pajarola和Ruggero Pintus的快速低内存streamMLS重build点采样曲面 。 它的引用可以让你快速浏览文献。

虽然不是一个网格表示,前同事推荐我这个链接到薄板样条线方法的源代码:

链接

有人试过吗?

不知道你的情况是否完全正确,因为你忽略了这一点似乎很奇怪,但是在这种情况下通常会提到行军立方体 。

在GitHub上, Hugues Hoppe博士在C ++中是一个开源的网格处理库 ,其中表面重build程序Recon是一个很好的select。

你可能会对Alpha Shapes感兴趣。

有几何工具3D Delaunay工具 。 这个工具是用DirecX和OpenGL的。 不幸的是,您可能需要购买一本书来查看库的实际示例代码。 您仍然阅读代码并找出答案。

Matlab还引入了一个使用Delaunay 类的 Delaunay 三angular网表面重构工具。

由于我也有这个问题,所以我开发并实现了我自己的点云壳algorithm。 这些资源以及文档可以在github.com上find: https : //github.com/ricebean-net/PointCloudCrust 。 该algorithm在Java中实现。

也许,这可以帮助你。 您还可以在页面上find一个简短的python脚本,说明如何使用该库。 玩的开心!