问题描述
我的总体目标是在 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 等。非常简单,易于自己实现。