通过保留点位置进行 3D 表面重建

3D surface reconstruction by preserving point position

我有 3D 点云,想要重建表面。我在 Meshlab 中尝试了各种技术来找到最适合我的特定云类型的算法。

泊松曲面重建很有前途,但它不保留原始点位置。在云中的特定位置进行重建和测量后发现,与现实世界中对象的测量值相比,测量值的误差超过 1.5 倍。

球旋转算法更好。它保留了点的位置,并且测量值也在预期范围内。但是这个算法在美国获得了专利,所以我不能将它用于商业项目。

研究了其他算法后,我没有发现任何像球旋转一样保留点位置的算法可以在商业环境中使用。你知道满足这两个标准的算法吗?我可以在我的点云上尝试在实施它们之前看看它们是否运行良好?

如有任何帮助,我们将不胜感激。

对于插值表面重建(保留数据点),两种算法表现相当好(地壳和共锥)。

结壳算法:

想法是首先计算点集的 Voronoi 图,然后 select 从 Voronoi 顶点中那些与中轴(称为极点)非常近似的顶点,然后计算 3D Delaunay输入点的三角剖分 + 极点,最后提取连接四面体中三个输入点的三角形,其中第四个顶点是极点。

更多参考资料:

http://web.cs.ucdavis.edu/~amenta/pubs/crust.pdf

http://web.mit.edu/manoli/crust/www/crust.html

  • 加:实现起来很简单,如果输入数据是一个好的采样,一些理论上的保证

  • 减号:需要计算两个 Delaunay 三角剖分

共锥算法:

想法是计算点集的 Voronoi 图,然后在每个 Voronoi 单元中计算表面法线的良好近似值(作为连接极点的向量,即距离最远的两个 Voronoi 顶点数据点)。然后在每个 Voronoi 单元格中,考虑以数据点为中心并以法线为轴的锥体(共锥体)的补集。如果三个共锥与 Voronoi 边有非空交点,则这三个数据点用一个三角形连接。请注意,不需要显式构造共锥体对象(只需比较角度以测试是否存在交集)。

更多参考资料:

http://web.cse.ohio-state.edu/~tamaldey/surfrecon.htm

  • Plus:需要单个 Delaunay 三角剖分(与 Crust 的 2 个三角剖分相比),如果输入数据是 "good sampling"

  • ,则有一些理论上的保证
  • 缺点:比地壳复杂一点(但我认为值得付出努力)

最后的话:

如果点集实现了良好的采样(即密度与厚度和曲率成正比,称为 "local feature size" = 到中轴的距离),这些算法将构建一个良好的(即流形)表面。在实践中,输入数据不满足此条件,因此该方法的输出将是一个 "soup of triangles",这在很大程度上是可以的,但需要一些 post 处理来修复一些局部缺陷。

编辑 03/21/16 您也可以尝试我自己的算法 (Co3Ne),在我的软件库 Geogram 中实现(http://alice.loria.fr/software/geogram/doc/html/index.html) and my software Graphite (http://alice.loria.fr/software/graphite/doc/html/). Graphite can be downloaded there: http://gforge.inria.fr/frs/?group_id=1465(可移植源代码和Windows64 可执行)。它是 Co-cone 的一种形式,具有各种优化和并行实现。