问题背景#

室内场景重建是计算机视觉领域的重要课题。挑战在于“曼哈顿世界”假设——即人造场景主要由正交平面组成。
为此,我们可以将世界视为一系列 3D 矩形基元。先前的方法大致分为两派:

1. 几何拟合: 这些方法首先构建密集的点云 (使用经典的摄影测量法) ,然后尝试使用 RANSAC 等算法将平面“拟合”到这些数据上。这既缓慢又容易出错;如果初始点云充满噪点 (在纹理缺失的白色房间中通常如此) ,平面就会出错。#

2. 深度学习流程: 像 PlanarRecon 或 AirPlanes 这样的方法试图端到端地学习平面检测。然而,它们严重依赖标注数据 (地面真值 3D 平面) ,这些数据既昂贵又稀缺。它们还经常面临细节“过度平滑”的问题。#

PlanarSplatting 的作者提出:我们需要一种直接从图像优化显示 3D 平面基元的方法,不需要地面真值平面标注,并且它需要是可微的,一边我们可以用梯度下降对其进行调整。

方法:"Plane Splatting"#

将场景表示为一系列 3D 矩形。系统不再通过检查射线是否击中一个点来渲染像素,而是检查射线是否击中一个矩形。为了使其可学习 (可微) ,他们处理矩形的方式类似于 3DGS 处理高斯的方式——将平面“泼溅 (splat)”到屏幕上。

1. 平面基元的数学表示#

在标准几何中,平面是无限的。但在房间里,墙壁有边界。因此,基元必须是一个 3D 矩形。
作者定义了一个平面基元,包含三组可学习参数:

1. 位置(pπp_\pi):矩形的 3D 中心。#

2. 朝向(qπq_\pi):代表旋转的四元数。#

3. 形状(rπr_\pi):矩形的尺寸。#

image 如图所示,形状由四个值定义: rπx+,rπx−,rπy+,rπy−r_{\pi}^{x+}, r_{\pi}^{x-}, r_{\pi}^{y+}, r_{\pi}^{y-}。 这使得中心点 pπp_{\pi} 实际上可以是矩形内的任意位置,而不必是几何质心。这给予优化器更大的灵活性,可以在特定方向上拉伸平面以适应墙壁或地板片段。

半径向量的数学定义为:

rπ={rπx+,rπx−,rπy+,rπy−}∈R+4r_{\pi}=\{r_{\pi}^{x+},r_{\pi}^{x-},r_{\pi}^{y+},r_{\pi}^{y-}\}\in \mathbb{R}_{+}^{4}

根据旋转四元数,推导出平面的局部坐标系(X轴向量 vπxv_{\pi}^{x},Y轴向量 vπyv_{\pi}^{y},以及法向量nπn_{\pi})。

vπx=R(qπ)[1,0,0]⊤,vπy=R(qπ)[0,1,0]⊤,nπ=R(qπ)[0,0,1]⊤v_{\pi}^{x}=R(q_{\pi})[1,0,0]^{\top}, \quad v_{\pi}^{y}=R(q_{\pi})[0,1,0]^{\top}, \quad n_{\pi}=R(q_{\pi})[0,0,1]^{\top}

2. 平面基元可微渲染#

image 我们有了 3D 矩形;现在我们需要将它们渲染成 2D 图像,以便与输入照片进行比较并计算损失。如上图所示,该流程遵循“泼溅 (Splatting)”范式。

该过程包括三个步骤: 相交、泼溅和混合:

步骤 1:射线与平面相交 (Ray-to-Plane Intersection)#

对于图像中的一个像素,我们向场景中投射一条射线 rr。我们计算这条射线与基元定义的无限平面相交的位置。这给了我们一个交点 xπrx_\pi^r。

xπr=o+(pπ−o⋅nπ)d⋅nπd,\mathbf{x}_{\pi}^{r} = \mathbf{o} + \frac{(\mathbf{p}_{\pi}-\mathbf{o}\cdot\mathbf{n}_{\pi})} {\mathbf{d}\cdot\mathbf{n}_{\pi}} \mathbf{d},

步骤 2:平面泼溅函数(创新点)#

在 3DGS 中,基元的影响力根据高斯分布的钟形曲线平滑衰减。这对于矩形来说很糟糕。高斯泼溅没有硬边缘——它会逐渐淡出,墙壁需要在拐角处戛然而止。
作者提出了一种新颖的基于矩形的平面泼溅函数 (Rectangle-based Plane Splatting Function) 。使用 Sigmoid 函数来定义平面上某点的“权重”(不透明度/影响力)。
逻辑如下:

1. 计算交点到中心的距离(投影到局部 X 和 Y 轴上)。我们称这些距离为 PXP_X 和 PYP_Y。#
2. 将这些距离与半径(rx+r^{x+} 等)进行比较。#
3. 将差值输入 Sigmoid 函数。#
PX=(xπr−pπ)⋅vπx,PY=(xπr−pπ)⋅vπy.P_X = (x_\pi^r - p_\pi) \cdot v_\pi^x, \qquad P_Y = (x_\pi^r - p_\pi) \cdot v_\pi^y.

沿 X 轴的权重 wXw_X 计算如下:

wX(xπr)={2σ(5λ(rπx+−∣PX∣)),if PX>0,2σ(5λ(rπx−−∣PX∣)),otherwise.w_X(x_\pi^r)= \begin{cases} 2\sigma(5\lambda(r_\pi^{x+}-|P_X|)), & \text{if } P_X>0,\\ 2\sigma(5\lambda(r_\pi^{x-}-|P_X|)), & \text{otherwise}. \end{cases}

Y 轴同理:

wY(xπr)={2σ(5λ(rπy+−∣PY∣)),if PY>0,2σ(5λ(rπy−−∣PY∣)),otherwise.w_Y(x_\pi^r)= \begin{cases} 2\sigma(5\lambda(r_\pi^{y+}-|P_Y|)), & \text{if } P_Y>0,\\ 2\sigma(5\lambda(r_\pi^{y-}-|P_Y|)), & \text{otherwise}. \end{cases}

项 (r−∣P∣)(r-|P|) 衡量点在矩形“内部”的深度。

如果点在半径内,该值为正。Sigmoid(大正数)≈ 1,平面是不透明的。
如果点在半径外,该值为负。Sigmoid(大负数)≈ 0,平面是透明的。
在边界附近,它会急剧过渡。

参数 λ\lambda 控制锐度。随着训练的进行,λ\lambda 会增加(退火),使得边缘越来越锐利。 image

一个点的最终权重是 X 和 Y 权重的最小值 (两个条带的交集):

w(xπr)={wX,if wX<wY,wY,otherwise.w(x_\pi^r)= \begin{cases} w_X, & \text{if } w_X < w_Y,\\ w_Y, & \text{otherwise}. \end{cases}

步骤 3:混合合成#

一旦计算出权重,渲染器就会按深度对平面进行排序,并使用标准的 Alpha 合成进行混合——类似于 Photoshop 中透明图层的堆叠或标准的体积渲染。系统渲染两样东西:
深度图 (Depth Map): 到表面的预期距离。
法向图 (Normal Map): 每个像素处的表面朝向。

DrenderΠ(r)=∑j=1MTjw(xπ(j)r)tj\mathbf{D}_{\mathrm{render}}^{\Pi}(\mathbf{r}) = \sum_{j=1}^{M} T_j w(x_{\pi(j)}^r)t_j NrenderΠ(r)=∑j=1MTjw(xπ(j)r)nπ(j)\mathbf{N}_{\mathrm{render}}^{\Pi}(\mathbf{r}) = \sum_{j=1}^{M} T_j w(x_{\pi(j)}^r)n_{\pi(j)}

优化与监督#

系统如何学习?它不使用地面真值 3D 平面 (这很难获取) 。相反,它使用 单目线索 (monocular cues) 。 作者使用现成的基础模型 (如用于深度的 Metric3Dv2 和用于法向的 Omnidata) 为输入图像生成“伪地面真值”图。损失函数试图最小化渲染深度/法向与这些预测深度/法向之间的差异。

LrenderΠ=α1∑r∈I∥1−NrenderΠ(r)⊤Npre(r)∥1+\mathcal{L}_{\mathrm{render}}^{\Pi} = \alpha_1 \sum_{r\in I} \left\| 1- \mathbf{N}_{\mathrm{render}}^{\Pi}(r)^{\top} \mathbf{N}_{\mathrm{pre}}(r) \right\|_1 + α1∑r∈I∥NrenderΠ(r)−Npre(r)∥1+\alpha_1 \sum_{r\in I} \left\| \mathbf{N}_{\mathrm{render}}^{\Pi}(r) - \mathbf{N}_{\mathrm{pre}}(r) \right\|_1 + α2∑r∈I∥DrenderΠ(r)−Dpre(r)∥1\alpha_2 \sum_{r\in I} \left\| \mathbf{D}_{\mathrm{render}}^{\Pi}(r) - \mathbf{D}_{\mathrm{pre}}(r) \right\|_1

为了达到 3 分钟的速度,初始化是关键。他们不是从零开始。他们使用单目深度图创建一个粗糙的点云,在其上散布随机平面,并将它们与估计的法向对齐。

在训练期间,他们还执行平面分裂 (Plane Splitting)。 如果单个平面基元具有高梯度 (意味着它试图拉伸以适应复杂的形状) ,系统会将其切成两半,创建两个新的较小平面。 image

这种自适应分裂使得系统能够捕捉更精细的细节。