论文解读 - 渲染压缩感知
压缩感知在渲染中的应用:不止于光场重建
在之前的博客中,我们探讨了压缩感知(Compressive Sensing, CS)的基本原理及其在光传输(Light Transport)重建上的开创性应用。为了进一步展示压缩感知理论的灵活性和广泛潜力,这篇博客我们将目光转向它在另一个计算机图形学核心领域的应用:图像渲染。
这篇名为《Compressive Rendering: A Rendering Application of Compressed Sensing》的工作,其核心动机源于对传统渲染流程的一个深刻观察。 传统的渲染管线通常会投入巨大的计算资源,逐一渲染出图像中的每一个像素,形成一幅完整的图像,随后再通过JPEG或JPEG2000等格式将其压缩以便存储和传输。 这个过程本质上是“先完整构建,再剔除冗余”。作者敏锐地指出,这无疑是在绕远路。一个自然而然的问题浮现出来:我们能否跳过中间步骤,在渲染阶段就直接捕获图像的关键信息,从而避免在那些最终会被丢弃的冗余信息上浪费宝贵的计算时间?
那么,如果想将压缩感知的思想应用于渲染过程,我们应该如何着手呢?
构建线性关系
在我们深入探讨具体方法之前,必须强调一个前提:如果你想在一个新问题上应用压缩感知理论,首要任务,也是最关键的一步,就是将该问题数学化地构建(formulate)为一个线性系统。
作者为此提出了一个清晰的线性模型。假设我们希望得到的目标图像 \(x\) 总共有 \(n\) 个像素,但我们只通过光线追踪渲染了其中的 \(k\) 个像素(其中 \(k < n\)),并将这些渲染结果作为观测向量 \(y\)。 那么,这个采样过程可以用一个线性系统来表达:
\begin{equation} y = Sx \end{equation}
在这里,\(S\) 是一个 \(k \times n\) 的采样矩阵,它每一行只有一个“1”,用来从完整图像 \(x\) 中“挑选”出我们实际渲染的那个像素。 我们的目标,就是从已知的 \(y\) 和 \(S\) 中恢复出未知的完整图像 \(x\)。
根据压缩感知理论,直接求解这个欠定方程是不可行的,但如果我们能找到一个基底,使得信号 \(x\) 在该基底下是稀疏的,问题就迎刃而解。 对于自然图像而言,小波基(Wavelet Basis)正是一个极佳的选择,因为它能非常有效地稀疏表示图像信息。
于是,我们可以引入小波变换矩阵 \(\Psi\),使得图像 \(x\) 可以表示为其小波系数 \(\hat{x}\) 的逆变换,即 \(x = \Psi^{-1}\hat{x}\)。 将此关系代入我们的线性系统,得到:
\begin{equation} y = S\Psi^{-1}\hat{x} \end{equation}
这个方程建立了我们实际测量值 \(y\) 与待求解的稀疏小波系数 \(\hat{x}\) 之间的线性关系。令测量矩阵 \(A = S\Psi^{-1}\),问题就转化为了压缩感知的标准形式:求解 \(y=A\hat{x}\) 的最稀疏解 \(\hat{x}\)。
然而,我们暂时忽略了压缩感知理论成立所需的另一个关键条件:测量基与稀疏基之间的非相干性(incoherence)。
非相干性与可逆高斯滤波
线性系统建立后,下一个核心挑战是如何确保测量矩阵 \(A\) 满足压缩感知的要求,特别是其构成的测量基(点采样)与稀疏基(小波)之间具有足够低的相干性。
一个坏消息是,在我们的应用中,点采样基和小波基之间存在很强的相干性。 直接应用上述模型会导致重建结果充满伪影。
为了解决这个棘手的问题,作者提出了一个极具创造性的方案。他们通过实验观察发现,如果对原始图像进行高斯模糊,随着模糊程度的提高,点采样基与模糊图像的小波基之间的相干性会显著降低。
这启发了作者的核心思路:我们不直接重建原始清晰图像 \(x\),而是去重建一张模糊后的图像 \(x_b\),待重建成功后,再通过一个“可逆”的高斯滤波操作将模糊图像 \(x_b\) 锐化回我们想要的清晰图像 \(x\)。
这个思路虽然巧妙,但也带来一个新的权衡:模糊程度越大,相干性越低,压缩感知重建的效果就越好;但与此同时,后续的锐化(逆高斯滤波)过程也更容易放大噪声,从而降低最终图像的质量。 因此,高斯模糊的程度成为了一个需要被精心选择的关键超参数。
基于此,压缩感知求解的公式被修正为:
- 我们假设清晰图像 \(x\) 和模糊图像 \(x_b\) 之间通过一个可逆的高斯滤波器 \(\Phi\) 相关联:\(x = \Phi^{-1}x_b\)。
- 将此关系代入最初的采样方程 \(y=Sx\),得到 \(y = S\Phi^{-1}x_b\)。
- 接着,我们假设模糊图像 \(x_b\) 在小波域是稀疏的,即 \(x_b = \Psi^{-1}\hat{x}_b\)。
- 最终,我们得到新的线性系统:
\begin{equation} y = S\Phi^{-1}\Psi^{-1}\hat{x}_b \end{equation}
在这个新的框架下,测量矩阵变为了 \(A = S\Phi^{-1}\Psi^{-1}\),而我们需要求解的稀疏向量是模糊图像的小波系数 \(\hat{x}_b\)。
在具体的实现中,作者还引入了两个关键的优化:
-
频域计算:为了加速,高斯卷积和其逆操作在傅里叶频域中通过矩阵乘法完成。滤波器 \(\Phi\) 可以表示为 \(\mathcal{F}^{H}G\mathcal{F}\),其中 \(\mathcal{F}\) 是傅里叶变换,而 \(G\) 是一个对角矩阵,其对角线元素是高斯函数值。 因此,测量矩阵的最终形式为 \(A = S\mathcal{F}^{H}G^{-1}\mathcal{F}\Psi^{-1}\)。 当我们求解得到 \(\hat{x}_b\) 后,最终图像通过 \(x=\mathcal{F}^{H}G^{-1}\mathcal{F}\Psi^{-1}\hat{x}_b\) 来还原。
-
维纳滤波器(Wiener Filter): 在实现中,一个核心环节是如何计算“可逆”的高斯滤波,也就是锐化操作 \(\Phi^{-1}\)。如果简单地在频域中用每个频率分量去除以对应的高斯函数值(即乘以 \(G^{-1}\),其中对角元素为 \(1/G_{i,i}\)),会遇到一个严重的问题。 问题在于,高斯函数在高频区域的值非常接近于0。当一个数(尤其是可能带有噪声的信号)除以一个几乎为0的数时,结果会变得极大。这个过程会极度放大图像中原本存在的高频噪声,导致重建出的图像充满噪点,完全不可用。 为了解决这个问题,作者采用了一种更稳健、更智能的方法:使用维纳滤波器(Wiener filter)来近似实现高斯滤波的逆操作。维纳滤波器的公式如下: \begin{equation} G_{i,i}^{-1} = \frac{G_{i,i}}{G_{i,i}^2 + \lambda} \end{equation} 这里的 \(\lambda\) 是一个很小的正常数,作为正则化参数。这个公式的精妙之处在于它的自适应性:
- 对于低频和中频部分:高斯函数的值 \(G_{i,i}\)较大,因此\(G_{i,i}^2\)远大于\(\lambda\)。此时,分母约等于 \(G_{i,i}^2\),整个式子约等于 \(G_{i,i}/G_{i,i}^2 = 1/G_{i,i}\)。效果就和直接求逆几乎一样,能够准确还原信号。
- 对于高频部分:高斯函数的值 \(G_{i,i}\)非常小,接近于0。此时,分母中的\(\lambda\) 起到了主导作用,它防止了分母因过小而导致结果“爆炸”。这有效地抑制了高频噪声被不成比例地放大。
因此,通过引入维纳滤波器,作者实现了一个既能有效锐化图像,又能避免噪声干扰的、鲁棒的“逆高斯卷积”操作。
总结与思考
通过上述精巧的设计,该方法成功地将压缩感知应用于渲染加速。实验结果表明,该框架的重建质量显著优于传统的插值或图像修复(inpainting)算法,尤其在保留图像的边缘和细节方面表现出色。 同时,重建步骤所花费的时间仅占总渲染时间的一个很小比例(约2%),证明了其高效性。
当然,该方法也存在一些局限性。例如,它无法恢复孤立的单个高频像素点(除非该点恰好被采样到),并且在极低的采样率(低于5%)下,其性能会劣于简单的插值。 此外,算法对高斯滤波器的参数比较敏感,需要仔细调优。
从我个人的角度看,这项工作开启了一个有趣的方向。目前论文中用于采样的 \(k\) 个点是基于泊松盘分布随机选择的,这是一种在空间上相对均匀的采样方式。 一个很自然的想法是:我们是否能将这种方法与重要性采样(Importance Sampling)相结合?例如,通过一个快速的预处理步骤或者利用前一帧的信息,来预测图像中哪些区域更为复杂、包含更多细节,从而在这些“重要”区域放置更多的采样点。这或许能用更少的总采样数达到同等甚至更好的重建质量,进一步提升压缩渲染的效率。
Enjoy Reading This Article?
Here are some more articles you might like to read next: