光學(xué)計算 - 高效獲取光傳輸矩陣
點擊上方“小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時間送達(dá)
轉(zhuǎn)自|計算攝影學(xué)
一. 背景
光傳輸矩陣(下圖中的T),它包含了場景中從光源l到目標(biāo)圖像p的所有關(guān)鍵信息。

獲取光傳輸矩陣,對Relighting、光度立體以及對偶攝影等等應(yīng)用場景中都非常重要。

然而,高效的獲取光傳輸矩陣非常困難,如下圖所示。T的尺寸是?
?,如果輸入光源尺寸為100萬點,相機(jī)傳感器像素為100萬像素,那么T的尺寸將高達(dá)?
而且,這還只是一個簡化的例子。事實上T通常是非對稱的,結(jié)構(gòu)復(fù)雜,這給獲取它帶來了更多困難。因此有大量的研究集中在高效高質(zhì)量的獲取光傳輸矩陣,這些研究通常會采用很多復(fù)雜的數(shù)值計算方法。
我今天想簡介的,是一個全新的獲取光傳輸矩陣并加以應(yīng)用的思路,看完后讓人不禁眼界大開。這個技術(shù)來自于下面這篇論文:

這篇文章的一個核心思想是:雖然直接獲取T是非常困難的,但光傳輸矩陣T、光源l以及最終成像的圖像p之間確實有明確的關(guān)系

因此,可以利用這個特性,高效的實現(xiàn)一些會利用到Tl的數(shù)值計算算法。
二. 光學(xué)計算介紹
2.1 冪迭代算法獲取方陣主特征向量
先從最簡單的例子看起,這個例子介紹了一種叫做冪迭代法(Power Iteration)的算法,它的目標(biāo)是獲取一個方陣的主特征向量,過程非常簡單易懂:

你可以看到這里應(yīng)用到了?
?,因此很容易將它變成一個用特定光源?
?照射場景,并捕獲圖像?
?的過程。
2.2 Krylov子空間法:?求解大型線性系統(tǒng)的一些最重要的迭代算法
由冪迭代算法獲取的一系列向量形成了Krylov子空間:

基于這個子空間有一系列用于分析大型線性系統(tǒng)的迭代算法。由于光傳輸矩陣T正好也是形態(tài)各異的大型矩陣,因此也很適合用光學(xué)計算來代替這些算法中的數(shù)值計算部分。
作者介紹了兩種算法,一種叫做Arnoldi,它用于獲取大型矩陣T的一個低秩的近似矩陣。另外一種則叫做GMRES(廣義最小殘差法),它可以用于反向光傳輸,例如用于我之前介紹過的對偶攝影中。
2.2.1 Arnoldi算法
當(dāng)我們的訴求是對場景進(jìn)行打光渲染時,可以用一個秩為K的小矩陣來近似替代全尺寸的光學(xué)傳輸矩陣。這個過程可以用Arnoldi算法來實現(xiàn)。
這個算法和冪迭代法的總體結(jié)構(gòu)是一致的,我們來看看它們的區(qū)別:

這里面,ortho函數(shù)的作用是將pk投影到l1....lk的正交子空間中。
所以看起來Arnoldi的算法過程和冪迭代法是一致的。然而,由于Arnoldi算法的實現(xiàn)過程中,光照向量l中的值可以是負(fù)數(shù),且T矩陣不一定是方陣,因此就多了一些變化,因此在用光學(xué)計算代替數(shù)值計算的過程中就有一些計算要點:
要點1:矩陣與任意向量的乘積
在Krylov的一系列算法中,通常會需要計算矩陣T與任意向量l的乘積,其中l(wèi)的元素值可能有正,有負(fù),而我們是無法用一個“負(fù)的光源”去作用于場景的。怎么解決這個問題呢?
很簡單,可以用兩個光源,一個代表正值元素(?
?),一個代表負(fù)值元素(?
?)。然后通過兩次成像,并將成像的結(jié)果相減,來得到Tl的值

要點2:解決T矩陣可能不對稱的問題
先看T矩陣什么情況下會是對稱的。通常來說,這要求投影儀投出的圖像和相機(jī)傳感器的分辨率一致,而且兩者的視角也是一致的,如下圖所示。很顯然,這種安排的作用很有限。

但我們可以先計算構(gòu)造對稱矩陣T*

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

這個式子用單個相機(jī)和投影儀的組合是很難做到光學(xué)實現(xiàn)的,但用兩對相機(jī)+投影儀的組合則可以辦到。
這里面左投影儀投射的圖案由右相機(jī)成像,而右投影儀發(fā)出的圖案由左相機(jī)成像。

采用上述兩個技術(shù)要點,就有了兩種情況下的Arnoldi算法實現(xiàn):

下面的視頻展示了一個典型的過程
事實上,如果僅僅是想對場景進(jìn)行重照明,可以不用計算出完整的近似矩陣,而只需要利用Arnoldi算法生成的一系列中間光照向量?
?和圖像?
?即可

這里第一步是把新的用于照明場景的l投影到?
?的空間中得到光照向量,然后用它的各個分量作為權(quán)重,將arnoldi算法過程中得到的子圖像?
?加權(quán)起來即可得到重照明的圖像。
下面這個視頻展示了重照明的結(jié)果,注意帽子所投射的復(fù)雜陰影(既尖銳又柔軟),頭發(fā)和陰影中的復(fù)雜亮點,以及玻璃場景中的陰影、焦散和間接照明效果都非常逼真。
上面的視頻中僅僅用了40次迭代即可獲得很好的結(jié)果。我們來看看當(dāng)?shù)螖?shù)變化時對結(jié)果的影響,注意這里我們打光時用了點光源:
2.2.1 GMRES算法
如果僅僅知道一幅照片,我們想知道它是在什么樣的光照情況下產(chǎn)生的,這時候就需要用到GMRES(廣義最小殘差)算法。

注意此時我們既不知道光源向量,也不知道光傳輸矩陣。這時候的算法其實和冪迭代法、Arnoldi算法具有一致的形態(tài),其區(qū)別如下。其中上標(biāo)+代表矩陣的偽逆

可以看到,它與Arnoldi算法唯一的區(qū)別就是輸入的向量?
?, 以及返回值。注意這里,為了求得光源l,同樣也不需要真的求解出T,而只需用kyrlov空間中的一系列向量?
?,以及?
?即可。
三. 評價和總結(jié)
正如作者在論文中所述,本文最大的貢獻(xiàn)是在光域上替代復(fù)雜的數(shù)值計算。文中描述的Arnoldi算法以及GMRES算法僅僅是作者為了展示這種思想的兩個例子而已。事實上,作者說最關(guān)鍵是傳統(tǒng)上認(rèn)為必須要獲取光傳輸矩陣T才能實現(xiàn)的一些操作,可以完全脫離T而實現(xiàn)。這就啟發(fā)了后續(xù)更大量的研究。
實際上,就我看來,這恰好是利用模擬器件來取代某些數(shù)字計算來提高效率的一個明證。其他的例子還有很多.
總之,通過本文我們再次強(qiáng)化了計算攝影學(xué)不僅僅是成像、圖像處理的認(rèn)知,“計算”本身也可以是這個學(xué)科的研究內(nèi)容和應(yīng)用方向。
四. 參考資料
CMU 2017 Fall Computational Photography Course 15-463, Lecture 22
O’Toole and Kutulakos, “Optical computing for fast light transport analysis,” SIGGRAPH Asia 2010.
