漫谈计算摄像学 (二):利用光场实现“先拍照后对焦”
本文和該系列均以搬運至知乎:?https://zhuanlan.zhihu.com/p/24983091
在上一篇直觀理解光場中,談到了光場的基本概念、3D性質(zhì)、實際應(yīng)用中的采集辦法和插值求任意光線的辦法。這一篇繼續(xù)上一篇的基礎(chǔ)上給出利用光場實現(xiàn)“先拍照后聚焦”的原理和基本步驟。
對焦與光路
首先,什么是對焦呢,我們先簡單回顧一下中學(xué)物理。
先看左圖,物體端的對焦面就是最上方的平面,從這個平面上的每一點發(fā)出的光線最后都匯聚在另一端的像平面上,一個典型的光路如加粗的四色直線所示。如果希望物體端的焦面移動到和原焦面到透鏡之間的位置,可以看到光線仍然是那些光線,但是聚焦到像面的光線組合就不再是之前的光線了,比如右圖里,加粗的光線除了紅線以外,黑綠藍(lán)三色的光線都不再是原來的那幾根。對應(yīng)對焦的基本光路,再回來看光場,根據(jù)上一篇文章中介紹過的光場的基本原理,很自然的,我們會想到,只要把在一個物平面上發(fā)出的光線所對應(yīng)的像素疊加在一起,不就實現(xiàn)了重聚焦了嗎?事實上這就是最簡單的基于光場的重聚焦算法,叫Shift-and-Add[1]。
先拍照后對焦的算法
還是借助上一篇文章中的配圖來講解Shift-and-Add算法:
如左圖所示,在原始的采集位置上,藍(lán)色光線在兩幅采集到的圖像里分別對應(yīng)于不同的位置,所以如果要對焦于藍(lán)色的方塊,則需要將他們的相對位移消除,這一步就是Shift,然后在把兩個像素的平均值求出作為對焦后的新圖像的像素值,則得到了對焦于藍(lán)色方塊的圖像。同樣道理,對于更遠(yuǎn)的綠色三角,則進(jìn)行更大距離的位移來消除對應(yīng)像素之間的相對距離,然后疊加得到新的對焦于綠色三角的圖像。需要注意的是,如上面的小圖所示,移動疊加之后,邊緣部分總是有些像素是不重合的,所以或多或少都會形成瑕疵。
具體到上篇文章里手機(jī)拍的照片例子,就是按照每張照片采樣位置相對于中心位置進(jìn)行等比例的移動,就可以得到在不同物平面上重聚焦的圖像,比如我們選取9個采樣點的中心點作為中心位置的話,將其他8個采樣點放置到不同位置上,就對應(yīng)得到不同的重聚焦圖片:
綠圈位置對應(yīng)圖像:
藍(lán)圈位置對應(yīng)圖像:
就這么簡單。那么,Lytro中的算法是不是Shift-and-Add呢?答案是否定的,Lytro的算法是把平移-疊加這種空域的算法放到了頻域執(zhí)行。基于的原理叫做中心切片定理,這里只簡單提兩句,中心切片定理是二維的,不過其基本原理可以拓展到任意維度,Lytro中用的是其在4維時的應(yīng)用。簡單來說就是把4維的光場進(jìn)行傅里葉變換之后,在4D的傅里葉空間內(nèi),不同位置的重聚焦圖片分別對應(yīng)一個穿過中心的不同角度的二維傅里葉空間的插值切片的逆傅里葉變換。所以本質(zhì)上而言,這種辦法和Shift-and-Add沒有區(qū)別,只不過是把線性操作換到了頻域空間。shift-and-Add每次產(chǎn)生新的重聚焦圖片時都需要用到所有采集的光場信息,算法復(fù)雜度是\(O\left( {{n}^{4}} \right)\)。而如果是從變換后4D數(shù)據(jù)里產(chǎn)生新的重聚焦圖片,則分為兩步:1) 求插值得到2D的傅里葉空間切片,復(fù)雜度是\(O\left( {{n}^{2}} \right)\);2) 二維傅里葉逆變換,復(fù)雜度是\(O\left( {{n}^{2}}\log n \right)\),當(dāng)然為了得到4D的傅里葉變換還有一步初始化計算,復(fù)雜度是\(O\left( {{n}^{4}}\log n \right)\)。所以在已經(jīng)有了采集到的4D數(shù)據(jù)需要不斷生成新的重聚焦圖片的場景下,在頻域的重聚焦算法時間上更經(jīng)濟(jì)一些。更多關(guān)于頻域重聚焦算法的詳細(xì),有興趣的朋友可以參考[1]。
另外特別要提的一點是,在這種Shift-and-Add框架下的重聚焦算法,和實際相機(jī)成像的圖片是有區(qū)別的。原因就是第一節(jié)中對焦與光路部分??梢钥吹皆谕雇哥R光路中,不同位置上對焦的光線是互相不平行的,而Shift-and-Add算法下,所有光線都被認(rèn)為是“平行”移動的,所以在重聚焦后的照片中,虛化的部分圖像是不一樣的,然而這種差距對于人眼來說,其實也沒那么大差別。
插值法去重影
可能有的朋友看到這里已經(jīng)發(fā)現(xiàn)了,雖然重聚焦是完成了,可是重對焦后圖像的質(zhì)量并不好,比如上一節(jié)中對焦在Dell標(biāo)志上的一張:
花朵的部分有很明顯的重影,和用相機(jī)鏡頭照出來的顯然不一樣。通過前面部分的原理講解,這個原因也是很顯然的:因為只有9個采樣點,在移動-疊加的過程中,不同圖像對應(yīng)像素的移動超過了一個像素,則疊加后的圖像就會出現(xiàn)這種類似于重影的瑕疵。其實這個問題解決起來也很簡單,記得在上篇文章中,已經(jīng)講過如何通過插值得到虛擬位置采樣的圖像,所以很自然地,我們只要通過插值,讓采樣點更密,密到每一個采樣點和相鄰采樣點的圖像上的對應(yīng)像素的位移都小于或接近一個像素,那么視覺上這種重影的現(xiàn)象就可以消除了。得到的結(jié)果如下:
最后來個連續(xù)變焦的動圖:
光圈的模擬
許多人在用傳統(tǒng)相機(jī)拍攝“虛化”照片時喜歡通過調(diào)整光圈來控制虛化的程度。這在基于光場的重聚焦中也是可以模擬的,道理很簡單,就是將采樣的范圍調(diào)整就可以了。還是用上一篇文章中的例子,比如用所有的采樣點(包括插值得到的):
得到的圖像:
而如果只采用中間一小部分的采樣點的話,相當(dāng)于小光圈:
則得到虛化程度比較低的圖片:
[1] R. Ng, "Digital Light Field Photography," PhD thesis, Stanford University, Stanford, CA (2006)
轉(zhuǎn)載于:https://www.cnblogs.com/frombeijingwithlove/p/4238608.html
總結(jié)
以上是生活随笔為你收集整理的漫谈计算摄像学 (二):利用光场实现“先拍照后对焦”的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CSS3详解:background
- 下一篇: 在项目中学习.NET的JQuery Ch