漫談計算攝像學 (二):利用光場實現“先拍照后對焦”


本文和該系列均以搬運至知乎: https://zhuanlan.zhihu.com/p/24983091

在上一篇直觀理解光場中,談到了光場的基本概念、3D性質、實際應用中的采集辦法和插值求任意光線的辦法。這一篇繼續上一篇的基礎上給出利用光場實現“先拍照后聚焦”的原理和基本步驟。

對焦與光路

首先,什么是對焦呢,我們先簡單回顧一下中學物理。

先看左圖,物體端的對焦面就是最上方的平面,從這個平面上的每一點發出的光線最后都匯聚在另一端的像平面上,一個典型的光路如加粗的四色直線所示。如果希望物體端的焦面移動到和原焦面到透鏡之間的位置,可以看到光線仍然是那些光線,但是聚焦到像面的光線組合就不再是之前的光線了,比如右圖里,加粗的光線除了紅線以外,黑綠藍三色的光線都不再是原來的那幾根。對應對焦的基本光路,再回來看光場,根據上一篇文章中介紹過的光場的基本原理,很自然的,我們會想到,只要把在一個物平面上發出的光線所對應的像素疊加在一起,不就實現了重聚焦了嗎?事實上這就是最簡單的基於光場的重聚焦算法,叫Shift-and-Add[1]

先拍照后對焦的算法

還是借助上一篇文章中的配圖來講解Shift-and-Add算法:

如左圖所示,在原始的采集位置上,藍色光線在兩幅采集到的圖像里分別對應於不同的位置,所以如果要對焦於藍色的方塊,則需要將他們的相對位移消除,這一步就是Shift,然后在把兩個像素的平均值求出作為對焦后的新圖像的像素值,則得到了對焦於藍色方塊的圖像。同樣道理,對於更遠的綠色三角,則進行更大距離的位移來消除對應像素之間的相對距離,然后疊加得到新的對焦於綠色三角的圖像。需要注意的是,如上面的小圖所示,移動疊加之后,邊緣部分總是有些像素是不重合的,所以或多或少都會形成瑕疵。

具體到上篇文章里手機拍的照片例子,就是按照每張照片采樣位置相對於中心位置進行等比例的移動,就可以得到在不同物平面上重聚焦的圖像,比如我們選取9個采樣點的中心點作為中心位置的話,將其他8個采樣點放置到不同位置上,就對應得到不同的重聚焦圖片:

綠圈位置對應圖像:

藍圈位置對應圖像:

就這么簡單。那么,Lytro中的算法是不是Shift-and-Add呢?答案是否定的,Lytro的算法是把平移-疊加這種空域的算法放到了頻域執行。基於的原理叫做中心切片定理,這里只簡單提兩句,中心切片定理是二維的,不過其基本原理可以拓展到任意維度,Lytro中用的是其在4維時的應用。簡單來說就是把4維的光場進行傅里葉變換之后,在4D的傅里葉空間內,不同位置的重聚焦圖片分別對應一個穿過中心的不同角度的二維傅里葉空間的插值切片的逆傅里葉變換。所以本質上而言,這種辦法和Shift-and-Add沒有區別,只不過是把線性操作換到了頻域空間。shift-and-Add每次產生新的重聚焦圖片時都需要用到所有采集的光場信息,算法復雜度是\(O\left( {{n}^{4}} \right)\)。而如果是從變換后4D數據里產生新的重聚焦圖片,則分為兩步:1) 求插值得到2D的傅里葉空間切片,復雜度是\(O\left( {{n}^{2}} \right)\);2) 二維傅里葉逆變換,復雜度是\(O\left( {{n}^{2}}\log n \right)\),當然為了得到4D的傅里葉變換還有一步初始化計算,復雜度是\(O\left( {{n}^{4}}\log n \right)\)。所以在已經有了采集到的4D數據需要不斷生成新的重聚焦圖片的場景下,在頻域的重聚焦算法時間上更經濟一些。更多關於頻域重聚焦算法的詳細,有興趣的朋友可以參考[1]

另外特別要提的一點是,在這種Shift-and-Add框架下的重聚焦算法,和實際相機成像的圖片是有區別的。原因就是第一節中對焦與光路部分。可以看到在凸透鏡光路中,不同位置上對焦的光線是互相不平行的,而Shift-and-Add算法下,所有光線都被認為是“平行”移動的,所以在重聚焦后的照片中,虛化的部分圖像是不一樣的,然而這種差距對於人眼來說,其實也沒那么大差別。

插值法去重影

可能有的朋友看到這里已經發現了,雖然重聚焦是完成了,可是重對焦后圖像的質量並不好,比如上一節中對焦在Dell標志上的一張:

花朵的部分有很明顯的重影,和用相機鏡頭照出來的顯然不一樣。通過前面部分的原理講解,這個原因也是很顯然的:因為只有9個采樣點,在移動-疊加的過程中,不同圖像對應像素的移動超過了一個像素,則疊加后的圖像就會出現這種類似於重影的瑕疵。其實這個問題解決起來也很簡單,記得在上篇文章中,已經講過如何通過插值得到虛擬位置采樣的圖像,所以很自然地,我們只要通過插值,讓采樣點更密,密到每一個采樣點和相鄰采樣點的圖像上的對應像素的位移都小於或接近一個像素,那么視覺上這種重影的現象就可以消除了。得到的結果如下:

最后來個連續變焦的動圖:

光圈的模擬

許多人在用傳統相機拍攝“虛化”照片時喜歡通過調整光圈來控制虛化的程度。這在基於光場的重聚焦中也是可以模擬的,道理很簡單,就是將采樣的范圍調整就可以了。還是用上一篇文章中的例子,比如用所有的采樣點(包括插值得到的):

得到的圖像:

而如果只采用中間一小部分的采樣點的話,相當於小光圈:

則得到虛化程度比較低的圖片:

[1] R. Ng, "Digital Light Field Photography," PhD thesis, Stanford University, Stanford, CA (2006)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM