天天看點

33. 攝影-怎樣對焦才能讓不同距離的物體都拍攝清晰?

一、對焦棧與全焦圖像

怎樣對焦,才能讓場景中不同距離的每個物體都拍攝清晰?如果你喜歡攝影,在構圖和取景時我想這個問題一定困惑過你。如我的文章31. 鏡頭、曝光,以及對焦(上)所說,鏡頭是有景深的,是以景深範圍内的物體可以清晰成像,不在這個範圍内的物體則會顯得模糊。

33. 攝影-怎樣對焦才能讓不同距離的物體都拍攝清晰?

如果你已經看過我之前的文章29. 小孔相機, 那麼你可能會認為采用小孔相機就能解決問題,因為小孔相機的景深無窮大:

33. 攝影-怎樣對焦才能讓不同距離的物體都拍攝清晰?

很可惜,小孔相機有自己的缺陷,它的圖像品質不高,特别是孔越小,噪聲越大。由于大部分光被遮擋了,是以其能效也很低。

那麼還有沒有更好的方法呢?

在27. HDR - 高動态範圍成像一文中,我們看到了,如果把不同曝光的圖像組合起來,會得到一張高動态範圍的圖像。而今天這篇文章,我會告訴你,如果把對焦距離不同的圖像融合起來,你會得到一張全焦(all-in-focus)圖像:

33. 攝影-怎樣對焦才能讓不同距離的物體都拍攝清晰?

我們稱這些對焦距離不同時得到的圖像為Focal Stack Image,下面就是一個典型的例子(已經合成為了一個視訊):

二、擷取對焦棧圖像

如何得到對焦棧圖像呢?想一想在下圖中,你要改變哪些參數,才能擷取到對焦距離不同的圖像?

33. 攝影-怎樣對焦才能讓不同距離的物體都拍攝清晰?

事實上,你有多種方法:

  1. 改變像距D':在31. 鏡頭、曝光,以及對焦(上)中,我們看到了物距和像距之間的關系,如果像距D'改變,對焦平面的物距也會改變
33. 攝影-怎樣對焦才能讓不同距離的物體都拍攝清晰?

2. 直接改變物距D: 你可以手動移動相機,也可以像下圖一樣采用一些特别的裝置:

33. 攝影-怎樣對焦才能讓不同距離的物體都拍攝清晰?

下面是一個典型的對焦棧中的三幀圖像,你可以看到它們分别有不同的對焦距離

33. 攝影-怎樣對焦才能讓不同距離的物體都拍攝清晰?

三、生成全焦圖像

假設我們已經擷取了對焦棧, 接下來的問題就是如何把它們合并在一起,擷取到全清晰的圖像了,有時候稱為全焦圖像(all-in-focus image)

這裡面有很多種方法,我先介紹一種最容易了解的方式,它分為幾個步驟

  1. 對齊圖像
  2. 對每個像素賦以一個權重,代表它的清晰程度(也就是它對焦的準确度)
  3. 求這些圖像的權重平均,擷取到最終的圖像,就是我們所需要的全焦圖像

步驟一:對齊圖像

首先我們來看看圖像對齊,為什麼要對齊圖像?一個顯而易見的原因是我們在拍攝的時候,相機可能是手持的,可能位于不穩定的平台上等等。但即使相機是位于一個穩定的三腳架上,我們也需要對齊圖像,你能想到是什麼原因嗎?(此處停頓思考3秒?)

嗯,也許你已經想到了,當我們通過改變像距、物距來擷取不同對焦距離的圖像時,圖像的放大倍率也會改變:

33. 攝影-怎樣對焦才能讓不同距離的物體都拍攝清晰?

此時,不同放大倍率的圖像就無法簡單的融合到一起了。下面是兩個圖像不對齊的例子,第一個隻有放大倍率導緻的不對齊,而第二個則還有相機抖動導緻的不對齊(手持拍攝)

33. 攝影-怎樣對焦才能讓不同距離的物體都拍攝清晰?
33. 攝影-怎樣對焦才能讓不同距離的物體都拍攝清晰?

對于相機運動導緻的圖像非對齊情況,我們暫不讨論。現在假定是隻有改變像距導緻的放大倍率不一緻,那麼如何對齊圖像呢?

我之前在31. 鏡頭、曝光,以及對焦(上)講過,放大倍率可以用如下公式表示。是以,如果我們知道相機的焦距和各個像距,就可以求出m。隻要據此對圖像縮放到一緻的尺寸,即可完成對齊

33. 攝影-怎樣對焦才能讓不同距離的物體都拍攝清晰?

步驟二:求取權重

正如前面所說,步驟二是衡量每個像素的清晰度,并以此作為該像素的權重。

一個簡單的方法是用拉普拉斯算子,求取圖像的二階梯度(參看3. 數位相機内的圖像處理-基本圖像濾波)。為了避免圖像噪聲的影響,同時又假設圖像的局部清晰度具有平滑性,是以再對拉普拉斯濾波的結果做一次高斯濾波。如下圖所示:

33. 攝影-怎樣對焦才能讓不同距離的物體都拍攝清晰?

這裡介紹的是一個非常簡單易了解的方法,事實上當然還有很多選擇。總之,我們會把這一步求取的清晰度作為每個像素的權重,然後進入到第三步。

步驟三:權重融合

第三步很簡單,就是把各個圖像(對齊校正後)權重融合到一起:

33. 攝影-怎樣對焦才能讓不同距離的物體都拍攝清晰?

最後我們就可以得到全焦圖像了:

33. 攝影-怎樣對焦才能讓不同距離的物體都拍攝清晰?

對焦棧在擷取全焦微距圖像時非常有用,因為此時相機的景深非常淺,單個圖像中很多部分都是模糊的。是以把多幀圖像融合在一起,得到的結果更好, 下面是個例子:

對焦棧動圖:

33. 攝影-怎樣對焦才能讓不同距離的物體都拍攝清晰?

全焦圖像

不僅如此,由于我們知道了對焦棧中每個圖像每個像素的權重,還可以對權重進行排序比較,據此得到每個像素對應的最清晰的圖像。這樣就知道了每個像素的最佳像距和物距——也就是說,最佳權重反映了每個像素的對焦距離:

33. 攝影-怎樣對焦才能讓不同距離的物體都拍攝清晰?

Depth from Defocus - 從對焦棧擷取深度圖

這說明我們可以通過對焦棧得到場景的三維資訊,這就是所謂的depth from defocus技術

四、用手機擷取對焦棧

對焦棧是非常有用的技術,但早期它隻能應用于實驗室等相機固定的場景,如果相機移動,一般的方法很難把圖像準确的對齊。

但是在2015年,Suwajanakorn在CVPR發表了他在Google做實習生時的研究成果:Depth from Focus with Your Mobile Phone,展示了他通過手持手機拍攝并擷取對焦棧,并以此生成全焦圖像或深度圖的具體方法。

33. 攝影-怎樣對焦才能讓不同距離的物體都拍攝清晰?

在這篇文章中,作者提出了一種創新性的方法來對齊圖像,他沒有采用其他學者采用的單應矩陣或者放射矩陣等剛性的對齊方式,而是采用了光流來進行圖像間的稠密對齊。并且,由于圖像是順序拍攝的,是以他還利用了圖像之間的時序相關性,來連接配接圖像間的光流場,論文裡面提到的公式如下,用白話來解釋就是(第i張圖像和第1張圖像之間的光流場 = 第i張圖像與第i-1張圖像之間的光流場 合并 第i-1張圖像與第1張圖像之間的光流場)。

33. 攝影-怎樣對焦才能讓不同距離的物體都拍攝清晰?

這樣,所有的圖像都可以以第1張圖像為标準來對齊,論文中用下面的公式來表示對第i張圖像利用它與第1張圖像之間的光流場來進行變換。

33. 攝影-怎樣對焦才能讓不同距離的物體都拍攝清晰?

下面是作者給出的對齊前和對齊後的機組圖像的對比:

33. 攝影-怎樣對焦才能讓不同距離的物體都拍攝清晰?
33. 攝影-怎樣對焦才能讓不同距離的物體都拍攝清晰?

生成的全焦圖像

33. 攝影-怎樣對焦才能讓不同距離的物體都拍攝清晰?
33. 攝影-怎樣對焦才能讓不同距離的物體都拍攝清晰?

生成的全焦圖像

‍‍

33. 攝影-怎樣對焦才能讓不同距離的物體都拍攝清晰?
33. 攝影-怎樣對焦才能讓不同距離的物體都拍攝清晰?

生成的全焦圖像

作者在文章中還把生成深度圖和全焦圖像看成了一種最優化的過程,這樣所生成的結果就比我上面介紹的簡單的權重融合的方法要好很多了。

下面是作者給出的更長的示範視訊:

論文裡面還展示了多個場景的全焦圖像和對應的深度圖,看起來都很不錯。

33. 攝影-怎樣對焦才能讓不同距離的物體都拍攝清晰?

五、總結

今天給大家介紹了對焦棧,通過它可以生成全焦圖像,也可以擷取到場景的深度圖,是一種有用的技術。Google在2003年就送出了Depth from Focus with Your Mobile Phone的專利,并在2005年正式獲得了此專利。是以如果你看到上面的文章後想開發手機上的應用,應該是被我誤導了? 這個專利還要十幾年才過期?

總之,希望這篇文章給了你啟發,别忘了給我點贊哦!

六、參考資料

今天的文章主要參考了這些資料:

  1. CMU 2017 Fall Computational Photography Course 15-463, Lecture 16
  2. Suwajanakorn et al., “Depth from Focus with Your Mobile Phone,” CVPR 2015.
  3. Suwajanakorn的首頁supasorn.com/上提供的素材

繼續閱讀