嘈杂的 3D 点云到 python 中的插值表面网格

问题描述

我的总体目标是在 Python 中从描述表面的 嘈杂 点云到规则的表面网格。我找到了一些解决这个问题的方法,但没有一个适用于我的情况足够。我找到的最好的:

  • B-spline -> 采样 -> 获得新点。这会根据一组常规的 x、y 坐标计算函数的 z 值,这对于近垂直表面效果不佳,我有很多这样的表面。
  • 滚球/凸包算法。我的数据沿表面法线有噪声,所以我会得到一个“膨胀”的表面。我首先需要对其进行去噪,这本身需要计算样条曲线或类似的东西。

我觉得必须有一种“简单”的方法来做到这一点,但我只是不知道该寻找什么。有人能指出我正确的方向吗?

我最好的猜测是应该有一种方法可以相对于自身“定期”对样条曲面进行采样,但我不知道如何进行。

解决方法

您描述的问题名为 surface reconstruction。有许多算法和软件(独立程序或库)能够从一组样本点重建一个表面。根据您是否只有点的 XYZ 坐标,或者您有更多信息(如颜色或表面法线),存在重要差异。

命名一些示例,您可以使用:

  • Screened Poisson,作者 Kazhdan 和 Bolitho。这是在 meshlab 和许多其他 python 库中实现的。可能是您最好的选择。
  • PowerCRUST,作者:Nina Amenta、Sunghee Choi 和 Ravi Kolluri。
  • Ball Pivoting,作者:Bernardini、Mittleman 等。非常简单,易于自己实现。