【学习笔记】泊松表面重建探讨
泊松重建在表面产生类似“气泡”的异常面片,根本原因在于:它假设点云是“封闭、均匀、带内外方向”的,而实际数据往往不满足这三点。当输入点云存在缺口、密度不均、法向翻转或离群点时,指示函数会把“外部”误判为“内部”,于是等值面在本来不该有曲面的地方鼓出一个个封闭的小囊泡,看上去像气泡。
泊松重建的核心思想
- 隐式场表示:泊松重建首先从一个点云构建一个指示函数(Indicator Function),这个函数在物体内部的值大于0,在物体外部的值等于0。物体的表面就是这个函数的等值面(通常为0的等值面)。
- 求解泊松方程:这个指示函数是通过求解一个泊松方程得到的。该方程将点云的法向量场与指示函数的梯度关联起来。简单理解就是“根据点云的法向信息,反推出一个最合理的表面。”
一、产生“气泡”的核心原因
诱因 | 在泊松重建中的具体表现 |
---|---|
1.点云不封闭 | 真实表面有缺口,指示函数无法正确归零,外部区域被当做“内部”,等值面鼓泡。 |
2.法向翻转/不一致 | 指示函数梯度方向错乱,导致零等值面错位,局部鼓出伪曲面。 |
3.密度极不均匀 | 八叉树深度差异大,导致低频基函数把稀疏区“过度平滑”,填补出虚假封闭面。 |
4.离群点/噪点 | 远离主题的点被当做“小孤立物体”,在其周围生成完整但无用的封闭面。 |
5.参数depth/octree太深 | 过度细分使算法“有信心”在极小区间里闭合,结果把噪声也当做特征。 |
现实世界的复杂性
薄结构或开放边界,泊松重建本质上是生成水密(watertight)的封闭模型。对于像衣服、纸张、树叶这类薄壁或非封闭的物体,算法会强制将其前后表面连接起来,行程一个封闭的“气泡”或“肿块”,而不是两个独立的片面。
二、工程上可行的规避
1. 预处理:让点云尽量“封闭+干净”
- 统计离群移除
- 补洞/外延
- 空间重采样
2.法向:方向一致+高鲁棒估计
- 加权PCA+MLS重新计算法向,搜索半径取“2~3倍平均间距”
- 方向传播:以视角最大的相机位置为参考;或手动给一统一视点,保证“外指”。
- 对多块扫描,先全局配准–>再合并–>再整体传播,防止边缘法向打架。
3.重建参数:牺牲分辨率换干净
参数 | 说明 |
---|---|
depth | 过深(大于11)极易把噪点封闭成泡;先粗建模看整体,在局部细化 |
samplePerNode | 一般在1.0到5.0,提高该值可把“支撑点太少”的区域强制抹平,减少伪面 |
pointWeight | 一般在2到4,给原始点更高权重,让指示函数贴近真点,抑制乱飘 |
4.后处理:快速提出剩余伪封闭面
- 距离过滤:把每个面片重心–>最近输入点的距离–>(1.5倍平均间距)的片全部删除;
- 连通域+面积/体积过滤:删除联通分量顶点数<500或体积<0.1‰主体包围盒的小封闭块。
- 可视化检查