天天看點

40. 如何消除攝影中的運動模糊?

如果你試過去拍攝一些運動場景,例如拍攝疾馳的汽車,或是田徑場上的短跑運動員,你一定曾經遇到過“拍糊”的時候。這種現象就是我在本文中要讨論的由運動導緻的圖像模糊,這是一種與我之前介紹的幾種導緻圖像模糊的方式完全不同的問題,是以今天讓我們來看看有什麼好辦法來應對。

我今天要給你介紹的是兩種消除運動模糊的技術,一個叫做Coded Exposure Photography(編碼曝光),确切的說是一種利用了Flutter Shutter(震顫快門)的編碼曝光技術。另外一種則是Motion Invariant Photography(運動不變攝影)。可能現在還聽起來比較拗口,不過先讓我們看看它們的效果:

下圖是編碼曝光拍攝的原始圖像,以及經過處理後的清晰圖像,你可以看到汽車變得非常清晰了,很神奇吧?(至于為何有原始圖像,為何又要經過處理,我們待會再講)

40. 如何消除攝影中的運動模糊?

再來看看運動不變攝影,下面左圖是一個固定相機拍攝的運動物體場景,場景中的物體有遠處的固定背景屏風,也有近處擺在一個托盤上的水準運動的物體,由于物體有遠近,是以其相對相機的運動也是不同的,是以普通相機拍出來就呈現出了不同的模糊程度。而右圖則是所謂運動不變攝影的結果,你可以看到總體來說畫面變清晰了。真的很驚人!

40. 如何消除攝影中的運動模糊?

看到這裡,我想你已經迫不及待想知道其中的技術細節了。那就讓我們開始吧? 我們先從運動模糊的基本模型和解決它的困難之處講起。

一、運動模糊的基本模型

先讓我們看一個典型的場景,這裡面背景和部分物體是固定的,但有一個裝着啤酒罐的托盤快速的帶動啤酒罐從左向右移動,使得拍攝的畫面中啤酒罐出現了運動模糊。那麼我們如何來模組化這種模糊呢?

40. 如何消除攝影中的運動模糊?

事實上,運動模糊和我們之前講過的幾種模糊都可以用卷積來描述。具體到上面這種均勻運動的模糊,可以如下表示:

40. 如何消除攝影中的運動模糊?

是以,似乎像以前一樣,我們隻要知道了模糊核,就能夠去卷積把模糊圖像變清晰了,是嗎?

然而,運動模糊的消除有幾個難點:

  1. 很難擷取到準确的卷積核,因為卷積核跟物體的遠近、物體運動的速度方向都有關系。
  2. 場景中的各個物體有不同的運動方向和速度,還可能有固定的背景,是以需要把需要恢複的物體分割開來,而這本來就是一個困難的問題。
  3. 運動卷積核丢失了高頻資訊,去卷積技術就會面臨嚴重的信噪比低的問題。

那麼,如何解決上述問題呢?我們先從解決難點3講起,這就是我們會介紹的Coded Exposure技術

二、Coded Exposure

我們先來看看傳統相機在拍攝一個水準一維運動物體時的情況:

40. 如何消除攝影中的運動模糊?

此時模糊相當于對圖像做一個一維的Box Filter,而這個卷積核的傅裡葉變換(即OTF)如下圖所示,它實際上是一個Sinc函數,可以看到這裡有一些值接近零的點。

40. 如何消除攝影中的運動模糊?

卷積核不穩定且有大量過零點

于是當我們用去卷積技術去嘗試恢複清晰圖像時,會因為OTF的大量零點而出現大量的噪聲,最終結果信噪比極低(如下圖所示)。我們說這時的運動模糊使得很多頻域資訊損失掉了,是以無法準确的恢複出原始信号。

40. 如何消除攝影中的運動模糊?

那麼,有沒有好辦法來減少頻域資訊的損失呢?這就是這裡提到的Coded Photography技術,對應的論文是:

Raskar et al., “Coded Exposure Photography: Motion Deblurring using Fluttered Shutter,” SIGGRAPH 2006.

我們來看看什麼是Flutter Shutter,什麼又是Coded Exposure

40. 如何消除攝影中的運動模糊?

從上面的動圖我們看到,Flutter Shutter是指快門交替開關的技術。用這種技術拍出來的圖像依然是模糊的,但這種模糊裡面卻依然保留了盡可能多的頻域資訊:

40. 如何消除攝影中的運動模糊?

OTF相對穩定保留了高頻資訊

是以這種情況下拍攝的圖像的模糊形态和普通相機是不一樣的:

40. 如何消除攝影中的運動模糊?

普通攝影 vs 編碼攝影

這樣當我們用去卷積算法對其進行去模糊時,就可以得到比較清晰的信噪比較高的圖像:

40. 如何消除攝影中的運動模糊?

普通攝影 vs 編碼攝影

相信你現在已經有了這樣一種印象:在曝光時間内快門交替開關能比一直打開保持更多的頻域資訊,使得最終圖像經過去卷積後得到更清晰的圖像。那麼,到底如何開閉快門能夠收益最大呢?

在上述論文中,作者把快門的開關看做是一種二進制編碼,開為1,關為0,這樣快門的狀态就形成了一個編碼——這也是為什麼稱作Coded Exposure的原因。然後作者比較了幾種不同的編碼,最終認為一種有52比特的編碼形态能夠使得整個系統保留最寬廣的頻率響應,進而信噪比最高。你可以看到下圖中,最後一種編碼的頻率響應最平坦、穩定,且沒有過零點。

40. 如何消除攝影中的運動模糊?

不同編碼形式得到的OTF不同

作者利用單反相機和自制的控制電路制作了一個Flutter Shutter的原型:

40. 如何消除攝影中的運動模糊?

再來看一些Flutter Shutter的效果:

40. 如何消除攝影中的運動模糊?
40. 如何消除攝影中的運動模糊?
40. 如何消除攝影中的運動模糊?

看起來真是一個不錯的技術啊——然而任何方法都不可能是完美的。我們來看看Coded Exposure by Flutter Shutter有哪些不夠好的地方:

  1. 作者采用的這種52bit的編碼中有26個1,26個0,這意味着相比傳統相機這種方式損失了一半的光能。
  2. 正如一開始我所說,卷積核很難估計,這跟物體的運動速度、遠近都有關系。
  3. 需要分割運動的物體和固定的背景,否則做全局的去卷積會使得背景被破壞。

那麼,有沒有更好的方法呢?那麼接下來我們就看一種模糊程度與目标運動速度、遠近等因素無關的攝影方式。

三、Motion Invariant Photograpny(運動不變攝影)

Motion Invariant Photograpny的思想來自于下面的論文

Levin et al., “Motion-Invariant Photography,” SIGGRAPH 2008

注意這裡的作者又是Levin教授,我們之前已經多次學習到她的文獻了。正如上面所說,Motion Invariant Photograpny的思路是通過将整個圖像的模糊程度變均勻,使之與物體的遠近、運動速度等都不相關,這樣就可以用簡單的單一去模糊算法來使得圖像變清晰了。你有沒有覺得這種想法有點眼熟?是的,這個思想就是來自于我們之前提到過的波前編碼和對焦掃描,不清楚的話可以參看我之前的文章:

38. 對焦掃描技術是如何實作EDOF(擴充景深)的?

39. 消除失焦模糊的其他幾種方法

40. 如何消除攝影中的運動模糊?

對焦掃描

Motion Invariant的基本假設是目标物體隻做一維方向的運動,比如水準運動。雖然看起來比較嚴格,但是已經可以涵蓋很多場景了。它的關鍵是要去控制相機的運動,進而控制模糊。

先來看看一個靜态相機拍攝運動場景時的情況:

40. 如何消除攝影中的運動模糊?

這樣拍攝的照片顯然是模糊的

40. 如何消除攝影中的運動模糊?

但如果我們能夠移動相機,使之跟蹤上面紅色的汽車,情況就不同了:

40. 如何消除攝影中的運動模糊?

‍‍‍

可以看到這時候相機的位置和時間呈現出一種線性關系,而紅色的汽車就拍攝清晰了。當然由于相機運動方向和藍色汽車相反,是以藍色汽車變得更加模糊了。

40. 如何消除攝影中的運動模糊?

實際上,如果從sensor的視角來看的話,曝光時間内的畫面是這樣的:

40. 如何消除攝影中的運動模糊?

當然,這并不是解決方案——因為它雖然把其中一個物體變清晰了,卻讓另外的物體變得更模糊了,包括背景也變模糊了。

而作者提出的解決方案還是我們之前提到的老一套:

步驟1:先把不受控的模糊變成均勻的受控模糊,見下圖

步驟2:用去卷積技術處理模糊的中間圖像,得到清晰的最終圖像

40. 如何消除攝影中的運動模糊?

這是怎麼做到的呢?作者提出了一種抛物線掃描的方式來控制相機或傳感器:

40. 如何消除攝影中的運動模糊?

抛物線掃描移動相機

我們來看看動圖:

40. 如何消除攝影中的運動模糊?

從傳感器的視角看到的是這樣的畫面:

40. 如何消除攝影中的運動模糊?

這樣最終拍攝出來的圖像就呈現出一種特殊的模糊,可以用簡單的單一去卷積得到最終的清晰圖像

40. 如何消除攝影中的運動模糊?

我們來看看用這種方式最終的效果吧:

40. 如何消除攝影中的運動模糊?
40. 如何消除攝影中的運動模糊?
40. 如何消除攝影中的運動模糊?

甚至當運動不完全滿足單一方向運動這個條件時,也能一定程度上恢複出清晰圖像:

40. 如何消除攝影中的運動模糊?

當然如果實際運動和之前的假設太不一樣了,也會有明顯的缺陷,比如下面我們傳感器的抛物線運動是水準方向的,但這個人圖像站立起來呈現出垂直方向的運動,最後臉部就出現了奇怪的缺陷——但總體來說由于經過了去模糊,還是比固定相機相機拍攝的結果清晰。

40. 如何消除攝影中的運動模糊?

下面圖中,測試者把紙闆快速旋轉,導緻固定相機拍出了模糊的圖像,而運動不變攝影則一定程度上使圖像變清晰了。雖然由于紙闆運動方向不是一維水準的,在邊界處出現了明顯的缺陷。

40. 如何消除攝影中的運動模糊?

作者提到,傳感器的運動完全可以通過控制現有的相機鏡頭馬達的方式來完成。但是為了實作的便利性,作者實作的原型是通過外接機械裝置來完成的,下圖中你可以看到使用了變徑齒輪加連杆使得相機在一個旋轉平台上移動,進而模拟抛物線掃描。這裡的相機就是個普通單反。

四、總結

4.1 兩種方法的比較

今天我介紹了兩種實作消除攝影中運動模糊的技術,一個是利用震顫快門的編碼曝光,另外一個則是利用抛物線掃描實作的運動不變攝影。

編碼曝光使得模糊的圖像中保留了盡可能多的頻域資訊,是以去卷積能夠得到信噪比較高的圖像。但是由于畫面中同時存在不同運動速度的物體,還有固定的背景,而震顫快門不能做到模糊程度與運動速度、方向無關,是以還需要手動介入來進行分割,把想要變清晰的物體分割出來處理。同時,由于我們很難去估計此時的有效卷積核,是以需要進行較多的試錯。同時,編碼曝光使得快門有一半的時間是關閉的,是以整體畫面會偏暗。

而利用抛物線掃描實作的運動不變攝影則使得整個畫面的模糊與物體的運動速度、方向都無關,同時作者還證明了此時的有效卷積核中保留了比編碼曝光時更多的頻域資訊(參看作者論文[3]),是以其最終結果更好(見下圖):

40. 如何消除攝影中的運動模糊?

4.2 不同圖像模糊的原因及解決方案

到目前為止,我已經在多篇文章中介紹了圖像模糊産生的原因和一些經典的解決方案,在此做一點小小的彙總:

  • 鏡頭缺陷導緻的模糊(35. 去卷積 -怎麼把模糊的圖像變清晰?)
  • 相機運動導緻的模糊(36. 盲去卷積 - 更加實用的圖像去模糊方法)
  • 失焦導緻的模糊
  • 37. 如何從失焦的圖像中恢複景深并将圖像變清晰?
  • 38. 對焦掃描技術是如何實作EDOF(擴充景深)的?
  • 39. 消除失焦模糊的其他幾種方法
  • 目标物體運動導緻的模糊
  • 40. 如何消除攝影中的運動模糊?(即本文)

你可以看到這裡面所有的方法都有一個基本的核心,就是成像公式:

40. 如何消除攝影中的運動模糊?

是以很多文章都是在這個假設基礎上尋找合适的卷積核c, 進而恢複出清晰圖像x。

4.3 編碼攝影

在這個過程中,我們還引入了編碼攝影這個概念,我們來分别看看普通的攝影和編碼攝影之間的差別和聯系:

40. 如何消除攝影中的運動模糊?
40. 如何消除攝影中的運動模糊?

兩種典型的編碼攝影的例子如下:

40. 如何消除攝影中的運動模糊?
40. 如何消除攝影中的運動模糊?

而我在圖像模糊與去模糊這一個闆塊裡面,則介紹了編碼光圈、震顫快門編碼攝影等。事實上,在計算攝影這個領域有很多編碼成像的技術,在Ramesh Raskar教授的首頁上就列舉了很多在不同的次元上進行編碼的成像方式,感興趣的話你可以進一步深入探索。

40. 如何消除攝影中的運動模糊?

五、參考資料

今天的主要參考資料為:

  1. CMU 2017 Fall Computational Photography Course 15-463, Lecture 18
  2. Raskar et al., “Coded Exposure Photography: Motion Deblurring using Fluttered Shutter,” SIGGRAPH 2006.
  3. Levin et al., “Motion-Invariant Photography,” SIGGRAPH 2008