光学计算 - 高效获取光传输矩阵

小白学视觉

共 2580字,需浏览 6分钟

 ·

2020-11-05 18:07

点击上方小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

转自|计算摄影学

一. 背景

光传输矩阵(下图中的T),它包含了场景中从光源l到目标图像p的所有关键信息。

获取光传输矩阵,对Relighting、光度立体以及对偶摄影等等应用场景中都非常重要。

然而,高效的获取光传输矩阵非常困难,如下图所示。T的尺寸是  ,如果输入光源尺寸为100万点,相机传感器像素为100万像素,那么T的尺寸将高达 

而且,这还只是一个简化的例子。事实上T通常是非对称的,结构复杂,这给获取它带来了更多困难。因此有大量的研究集中在高效高质量的获取光传输矩阵,这些研究通常会采用很多复杂的数值计算方法。

我今天想简介的,是一个全新的获取光传输矩阵并加以应用的思路,看完后让人不禁眼界大开。这个技术来自于下面这篇论文:

这篇文章的一个核心思想是:虽然直接获取T是非常困难的,但光传输矩阵T、光源l以及最终成像的图像p之间确实有明确的关系

因此,可以利用这个特性,高效的实现一些会利用到Tl的数值计算算法。

二. 光学计算介绍

2.1 幂迭代算法获取方阵主特征向量

先从最简单的例子看起,这个例子介绍了一种叫做幂迭代法(Power Iteration)的算法,它的目标是获取一个方阵的主特征向量,过程非常简单易懂:

你可以看到这里应用到了  ,因此很容易将它变成一个用特定光源  照射场景,并捕获图像  的过程。

2.2 Krylov子空间法: 求解大型线性系统的一些最重要的迭代算法

由幂迭代算法获取的一系列向量形成了Krylov子空间:

基于这个子空间有一系列用于分析大型线性系统的迭代算法。由于光传输矩阵T正好也是形态各异的大型矩阵,因此也很适合用光学计算来代替这些算法中的数值计算部分。

作者介绍了两种算法,一种叫做Arnoldi,它用于获取大型矩阵T的一个低秩的近似矩阵。另外一种则叫做GMRES(广义最小残差法),它可以用于反向光传输,例如用于我之前介绍过的对偶摄影中。

2.2.1 Arnoldi算法

当我们的诉求是对场景进行打光渲染时,可以用一个秩为K的小矩阵来近似替代全尺寸的光学传输矩阵。这个过程可以用Arnoldi算法来实现。

这个算法和幂迭代法的总体结构是一致的,我们来看看它们的区别:

这里面,ortho函数的作用是将pk投影到l1....lk的正交子空间中。

所以看起来Arnoldi的算法过程和幂迭代法是一致的。然而,由于Arnoldi算法的实现过程中,光照向量l中的值可以是负数,且T矩阵不一定是方阵,因此就多了一些变化,因此在用光学计算代替数值计算的过程中就有一些计算要点:

要点1:矩阵与任意向量的乘积

在Krylov的一系列算法中,通常会需要计算矩阵T与任意向量l的乘积,其中l的元素值可能有正,有负,而我们是无法用一个“负的光源”去作用于场景的。怎么解决这个问题呢?

很简单,可以用两个光源,一个代表正值元素(  ),一个代表负值元素(  )。然后通过两次成像,并将成像的结果相减,来得到Tl的值

要点2:解决T矩阵可能不对称的问题

先看T矩阵什么情况下会是对称的。通常来说,这要求投影仪投出的图像和相机传感器的分辨率一致,而且两者的视角也是一致的,如下图所示。很显然,这种安排的作用很有限。

但我们可以先计算构造对称矩阵T*

然后就可以很方便的沿用幂迭代算法的思想来分析T*了,这里:

这个式子用单个相机和投影仪的组合是很难做到光学实现的,但用两对相机+投影仪的组合则可以办到。

这里面左投影仪投射的图案由右相机成像,而右投影仪发出的图案由左相机成像。

采用上述两个技术要点,就有了两种情况下的Arnoldi算法实现:

下面的视频展示了一个典型的过程

事实上,如果仅仅是想对场景进行重照明,可以不用计算出完整的近似矩阵,而只需要利用Arnoldi算法生成的一系列中间光照向量  和图像  即可

这里第一步是把新的用于照明场景的l投影到  的空间中得到光照向量,然后用它的各个分量作为权重,将arnoldi算法过程中得到的子图像  加权起来即可得到重照明的图像。

下面这个视频展示了重照明的结果,注意帽子所投射的复杂阴影(既尖锐又柔软),头发和阴影中的复杂亮点,以及玻璃场景中的阴影、焦散和间接照明效果都非常逼真。

上面的视频中仅仅用了40次迭代即可获得很好的结果。我们来看看当迭代次数变化时对结果的影响,注意这里我们打光时用了点光源:

2.2.1 GMRES算法

如果仅仅知道一幅照片,我们想知道它是在什么样的光照情况下产生的,这时候就需要用到GMRES(广义最小残差)算法。

注意此时我们既不知道光源向量,也不知道光传输矩阵。这时候的算法其实和幂迭代法、Arnoldi算法具有一致的形态,其区别如下。其中上标+代表矩阵的伪逆

可以看到,它与Arnoldi算法唯一的区别就是输入的向量  , 以及返回值。注意这里,为了求得光源l,同样也不需要真的求解出T,而只需用kyrlov空间中的一系列向量  ,以及  即可。

三. 评价和总结

正如作者在论文中所述,本文最大的贡献是在光域上替代复杂的数值计算。文中描述的Arnoldi算法以及GMRES算法仅仅是作者为了展示这种思想的两个例子而已。事实上,作者说最关键是传统上认为必须要获取光传输矩阵T才能实现的一些操作,可以完全脱离T而实现。这就启发了后续更大量的研究。

实际上,就我看来,这恰好是利用模拟器件来取代某些数字计算来提高效率的一个明证。其他的例子还有很多.

总之,通过本文我们再次强化了计算摄影学不仅仅是成像、图像处理的认知,“计算”本身也可以是这个学科的研究内容和应用方向。

四. 参考资料

  1. CMU 2017 Fall Computational Photography Course 15-463, Lecture 22

  2. O’Toole and Kutulakos, “Optical computing for fast light transport analysis,” SIGGRAPH Asia 2010.


浏览 34
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报