如何用 MVS 网格初始化 3D Gaussian Splatting

多视图立体(MVS)可以从多张已标定照片重建物体的表面。用这张网格初始化 3D Gaussian Splatting(3DGS)时,一种做法是直接把每个网格顶点变成一个高斯。但网格顶点的间距由重建分辨率和三角化决定,屋顶、树枝和遮挡边缘也可能缺少网格。本文介绍一种混合初始化方法:在网格表面布置法线对齐的扁平高斯,再用相机求解得到的稀疏三维点补充覆盖不足的区域。

在三角面上采样并取色

按三角面面积分配被抽中的概率,再在抽中的三角面内均匀取点。设三角面的三个顶点为 $v_0,v_1,v_2$,取两个独立均匀随机数 $u,v\in[0,1]$,令 $r=\sqrt{u}$,则采样位置为

$$
p=(1-r)v_0+r(1-v)v_1+rvv_2.
$$

同一组重心权重可用来插值 UV 坐标,再从照片贴图读取初始颜色。没有贴图的面使用插值顶点色。可以按场景规模调整采样数量,南楼实验取了 25 万个表面样本。

用法线决定方向,用点距决定尺度

把三角面法线作为高斯的第三根轴,再用面内的切向和副切向确定旋转。对合并后的每个点,取到三个最近邻距离的均方根 $s$,将表面高斯的三个初始尺度设为 $(s,s,0.1s)$。高斯因此沿表面铺开,法向厚度约为切向的十分之一。训练开始后,位置、方向和尺度都可以随照片重建损失继续更新。

在网格覆盖不足的地方保留稀疏点

先把网格和稀疏点统一到相机标定使用的世界坐标系。在网格上额外采一批探测点,建立 KD-tree,近似查询每个稀疏点到表面的距离。距离超过阈值的点加入初始集合,沿用自身颜色,使用各向同性尺度。南楼的阈值为 0.01 个场景单位,最终补入 13,211 个稀疏点。这个距离需要随场景尺度调整。

南楼上的效果

以下对照使用同一组相机,112 张训练图、16 张评估图,分辨率为 800 × 600。各组都用同一训练配置运行 7,000 步,只改变初始化。

初始化方法初始高斯整图 PSNR ↑渲染法线相对 MVS 的偏差 ↓比 MVS 表面靠前超过 5% 的像素 ↓
相机求解的稀疏点73,86920.61 dB34.2°27.6%
MVS 网格顶点76,02419.72 dB35.3°24.6%
MVS 网格顶点+稀疏补点89,23520.51 dB34.5°25.3%
MVS 表面采样+稀疏补点,各向同性263,21120.70 dB35.7°25.2%
MVS 表面采样+稀疏补点,法线对齐263,21120.69 dB21.6°22.4%

直接使用网格顶点时,屋顶和近处植被出现了拖影,补回稀疏点后,整图 PSNR 恢复了 0.79 dB。采用相同数量的初始点时,法线对齐对整图 PSNR 影响很小,但渲染法线更贴近 MVS 表面,靠前浮点也更少。表中的几何指标以参与初始化的 MVS 网格为参考,衡量的是表面一致性。该网格使用过评估照片,因此这组分数描述的是同一场景内的对照。

发表评论