在计算机视觉和图形学领域,有符号距离函数(SDF)和神经辐射场(NeRF)代表了两种截然不同的场景表示方法。SDF通过定义空间中每个点到最近物体表面的距离来描述几何形状,而NeRF则通过体密度和颜色函数来建模场景的光学特性。这两种表示方法的结合,为三维重建和渲染带来了新的可能性。
SDF的核心优势在于其精确的几何表达能力。与传统的体素或点云表示相比,SDF能够提供连续的空间描述,这使得提取高精度表面成为可能。在实际应用中,SDF值小于零表示点在物体内部,等于零表示在表面,大于零则表示在物体外部。这种明确的数学定义使得SDF在几何处理中具有独特优势。
NeRF的体渲染技术则提供了一种强大的体积可视化方法。通过沿着光线积分颜色和密度信息,NeRF能够生成逼真的新视角图像。然而,传统的NeRF方法直接预测密度场,这可能导致几何表示不够精确,特别是在处理尖锐边缘和薄结构时。
将SDF与体渲染结合的关键在于建立从SDF到密度的转换机制。这种转换需要满足几个重要性质:首先,它应该在表面附近产生足够的密度值以保证表面可见;其次,它应该能够抑制远离表面的区域的密度,避免产生"漂浮物"伪影;最后,转换过程应该是可微的,以支持端到端的神经网络训练。
MonoSDF采用了一种基于拉普拉斯分布累积分布函数(CDF)的转换方法。这种方法的核心思想是利用拉普拉斯分布在零点附近的变化特性来建模表面附近的密度分布。具体来说,转换函数定义为:
σβ(s) =
\begin{cases}
\frac{1}{2β} e^{\frac{s}{β}}, & s ≤ 0 \
\frac{1}{β} (1 - \frac{1}{2}e^{-\frac{s}{β}}), & s > 0
\end
其中s表示SDF值,β是一个可学习的参数,控制着密度分布的"锐利"程度。较小的β值会产生更尖锐的表面表示,而较大的β值则会产生更平滑的过渡。
在实际实现中,MonoSDF通过以下步骤完成体渲染:
这种方法的优势在于其数学上的优雅性,拉普拉斯CDF在零点附近的变化特性恰好符合我们对表面附近密度分布的期望。然而,β参数的选择对结果影响较大,需要仔细调整。
NeuS提出了一种基于Sigmoid函数的转换策略,其核心创新是设计了一个无偏且遮挡感知的权重函数。NeuS的转换过程可以概括为:
NeuS的实现有几个关键点值得注意:
这种方法的一个显著优点是它自然地解决了遮挡问题,确保更远处的表面不会错误地贡献到当前像素的颜色计算中。此外,NeuS的权重函数在理论上是无偏的,这意味着随着采样点数的增加,渲染结果会收敛到真实的表面表示。
VoxFusion采用了一种极其简单的转换方法,直接使用两个Sigmoid函数的乘积来计算权重:
w_i = Sigmoid(s_i/tr) · Sigmoid(-s_i/tr)
其中tr是截断距离参数。这种方法虽然简单,但在实际应用中表现出色,特别是在实时系统中。它的优势包括:
VoxFusion的实现还包含了一些实用技巧,比如只考虑在截断距离内的点进行加权,以及处理光线第一次与表面相交的情况。这些优化使得该方法在保持简单性的同时,能够产生质量不错的重建结果。
GO-SLAM借鉴了NeuS的核心思想,但在实现上做了大量优化以提高效率。其关键改进包括:
GO-SLAM的代码结构清晰,易于理解和修改。它证明了即使在资源受限的条件下,基于SDF的体渲染也能实现实时性能。这对于SLAM等需要实时反馈的应用场景尤为重要。
Eikonal损失是SDF学习中最常用的正则化项,它强制SDF梯度在空间中的范数为1:
L_Eikonal = (||∇f(p)||_2 - 1)^2
这个损失的理论基础是SDF的定义本身——在理想情况下,SDF在任何点的梯度都应该具有单位长度。在实践中,Eikonal损失能有效防止SDF值出现不合理的剧烈变化,确保重建表面的平滑性和合理性。
自由空间损失专门处理远离表面的区域,强制这些区域的SDF值等于截断距离:
L_fs = (D_s - tr)^2
这个损失函数在VoxFusion和CO-SLAM等工作中被证明非常有效,它能防止远离表面的点对重建产生干扰,同时加速训练收敛。
曲率损失旨在提高重建表面的平滑度,有两种主要实现方式:
这些损失函数在处理无纹理区域或高反射表面时特别有用,能够产生更美观的重建结果。
MonoSDF展示了如何将表面法向量预测整合到SDF框架中。通过SDF的梯度可以自然地得到表面法向量:
n = ∇f(p)/||∇f(p)||
更进一步,MonoSDF还实现了法向量的体渲染,使得预测的法向量图能够与RGB图像一起用于监督训练。这种多任务学习策略显著提高了重建质量。
VolSDF提出了一种智能采样策略,利用SDF信息指导采样点分布。其核心思想是:
这种方法能够在保持渲染质量的同时显著减少所需的采样点数,提高整体效率。