多视图立体(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,869 | 20.61 dB | 34.2° | 27.6% |
| MVS 网格顶点 | 76,024 | 19.72 dB | 35.3° | 24.6% |
| MVS 网格顶点+稀疏补点 | 89,235 | 20.51 dB | 34.5° | 25.3% |
| MVS 表面采样+稀疏补点,各向同性 | 263,211 | 20.70 dB | 35.7° | 25.2% |
| MVS 表面采样+稀疏补点,法线对齐 | 263,211 | 20.69 dB | 21.6° | 22.4% |
直接使用网格顶点时,屋顶和近处植被出现了拖影,补回稀疏点后,整图 PSNR 恢复了 0.79 dB。采用相同数量的初始点时,法线对齐对整图 PSNR 影响很小,但渲染法线更贴近 MVS 表面,靠前浮点也更少。表中的几何指标以参与初始化的 MVS 网格为参考,衡量的是表面一致性。该网格使用过评估照片,因此这组分数描述的是同一场景内的对照。