盲去卷積 - 更加實用的圖像去模糊方法 Wang Hawk

上一篇文章35. 去卷積:怎么把模糊的圖像變清晰?吸引了很多朋友的關(guān)注。在這篇文章里面,我給大家講了一種叫做“非盲去卷積”的方法,當(dāng)指定了PSF(下圖中的c),和觀測到的模糊圖像(下圖中的b),我們可以恢復(fù)出清晰的圖像(下圖中的x)。

很多人都覺得去卷積大法好啊,真的可以把渣畫質(zhì)變清晰??删褪切枰崆爸繮SF,這可就難了。確實,很多情況下提前測定PSF是根本不可能的,有可能你手上只拿到了一張很模糊的照片b,不知道c,想要恢復(fù)出x,這時候應(yīng)該怎么辦呢?

事實上,這也是可以辦到的,這就是所謂的“盲去卷積”(Blind Deconvolution),今天我就給大家介紹這種技術(shù)。
我們先來看兩組盲去卷積的結(jié)果,給大家一些直觀的感受:


上面的結(jié)果來自于盲去卷積領(lǐng)域非常經(jīng)典而基礎(chǔ)的文章:
Fergus et al., “Removing camera shake from a single image,” SIGGRAPH 2006.
今天我主要就為你介紹這篇文章的思想
一、盲去卷積的基本思想
1.1 利用先驗信息
小明是第一次用單反的攝影小白,他剛剛很興奮的端起相機拍了一張照片:
Oops!手沒拿穩(wěn),拍出了一張超模糊的照片:

我們看看小明的相機在拍照瞬間的運動軌跡

很顯然,他這樣是拍不出來好片子的,我們來簡化一下他這張照片的生成過程:

上圖中的模糊核(PSF)是由于小明端起相機時的隨機抖動導(dǎo)致的,我們無法提前測定,那么怎么樣才能把清晰圖像恢復(fù)出來呢?這真是一個超難的問題。
這就像你知道了11這個數(shù)是由2個數(shù)的乘積構(gòu)成的,要讓你猜出是哪兩個數(shù)一樣困難:

一張模糊的圖像,也有可能有多種生成模式,只有最下面這種才是我們需要的,怎么才能得到它呢?

很顯然,我們需要利用一些先驗信息。有兩個關(guān)鍵的先驗信息可以幫助我們
1 - 圖像的梯度分布
清晰的自然圖像的梯度符合一種叫做"Heavy-Tail"的分布形態(tài)。直觀上講,一張清晰圖像里面有很多平滑的區(qū)域且噪聲較低,所以梯度接近0的像素還是占大多數(shù)。但是由于圖像清晰,所以物體的邊界比較明顯,所以還是有很多像素的梯度較大。因此這種梯度的分布大概長這個樣子(梯度直方圖的縱坐標是Log化的密度):

但是模糊的圖像的邊緣被糊掉了,所以更多的像素的梯度趨于0,因此其梯度直方圖就會變化:

所以我們想要尋找的是符合上面重尾分布的圖像,而不是其他隨隨便便的圖像
2 - 模糊核的形態(tài)
我們這里展示的是相機的運動導(dǎo)致的模糊,那么可以認為模糊核是稀疏的,有連續(xù)的軌跡,并且模糊核值都是非負數(shù)。所以我們重建出來的模糊核也不是隨隨便便的,它必須符合上述這些特點才是一個合格的運動模糊核。
3 - 噪聲
相機總是有噪聲的,為了簡化問題,我們可以假設(shè)噪聲是均值為0的高斯噪聲
于是,我們就有了幾種信息用于重建清晰的圖像

1.2 問題的數(shù)學(xué)建模
已知模糊圖像P,未知圖像為L,未知的卷積核為K。一個基本的想法是把問題看做是求最大后驗概率的問題:

其中K和L滿足一定的先驗條件的約束。我們所需的就是把后驗概率公式表達出來。為了讓這篇文章能夠比較容易看懂,我把相關(guān)的細節(jié)列到文章的后面,這樣你可以更連貫的閱讀這篇文章。
1.3 問題的求解
作者嘗試了用標準的MAP求解方法來求解出K和L,但最終效果卻很差

作者對此的解釋是MAP目標函數(shù)會嘗試讓所有像素的梯度都最小化,而實際的自然圖像中包含有大量高梯度的區(qū)域。
而在2009年的下面這篇著名論文中,作者Levin教授則提出了更深入的見解。
Levin et al., “Understanding and evaluating blind deconvolution algorithms,” CVPR 2009 and PAMI 2011
Levin教授認為用MAP目標函數(shù)同時求解K和L肯定不好,有如下的原因:
錯誤的單位卷積核比起正確的稀疏卷積核的可能性更高(Levin的論文中有證明)

2. 上述MAP目標函數(shù)的變量個數(shù)具有高度的非對稱性,比如對于這幅畢加索照片:

可見已知量的個數(shù)總是小于未知量的個數(shù) #P < #L + #K
以上兩個原因就會導(dǎo)致用這種同時估計K和L的目標函數(shù)來做MAP總是無法得到好的結(jié)果。那有沒有更好的方法呢?
Levin認為,更好的辦法是只單獨估計K,即把下面左邊的問題轉(zhuǎn)換為右邊的問題

這樣,已知量的個數(shù)就遠遠大于未知量的個數(shù) #P >> #K
這里的p(K|P)是相對于L的邊際概率,即:

簡單來說,就是對每一個可能的K,我們都要在所有可能的L上求取其后驗概率,并把這些后驗概率值加起來,得到p(K|P)。你應(yīng)該可以感覺到求這樣的邊際概率也是很不容易的事情,計算量非常復(fù)雜。于是很多學(xué)者采用了近似的方式來進行求解?;氐轿覀冮_頭介紹的Fergus的論文,作者是采用了“變分貝葉斯(variational Bayesian)”方法來近似后驗概率的表示和求取
Fergus證明了這種方法能得到遠比原始的同時求取K和L的MAP算法好。

二、完整的流程
在論文中, Fergus展示了其完整的盲去卷積的流程:
第一步:預(yù)處理圖像,為了降低計算量,并得到良好的結(jié)果,需要用戶來選擇一個圖像塊。
第二步:利用變分貝葉斯,估計卷積核K。為了避免陷入局部最優(yōu),作者采用了coarse-to-fine的策略
第三步:利用標準的非盲去卷積方法,重建清晰圖像L。作者采用了我在上一篇文章里面提到的Richardson-Lucy算法進行。





三、效果展示



四、后驗概率的細節(jié)
正如前面所講,為了求解問題,需要把后驗概率用公式表達出來。先引入一些符號來說明問題:
:模糊圖像塊
:可能的模糊核
:可能的清晰圖像塊
: P的梯度
: Lp的梯度
:噪聲
首先,我們前面講過

由于卷積運算是線性運算,因此可以有:

這樣我們可以把后驗概率改寫為

用MAP的思想來說,問題就轉(zhuǎn)換為求使得上述概率最大的K和 
我們可以用貝葉斯公式將這個后驗概率展開:

我們分別來看后面三項:

于是上面的后驗概率就可表示為:

五、算法值得改進的地方
在文章中Fergus提到的幾個點都是值得改進的:
假設(shè)噪聲滿足高斯分布
用混合高斯模型來擬合重尾模型
用混合指數(shù)分布來描述模糊核的形態(tài)
多尺度的變分貝葉斯算法復(fù)雜度較高,需要用戶的手動引導(dǎo)選擇小的圖像塊
采用的非盲去卷積是RL算法,相信會有更好的方法來改善圖像質(zhì)量
等等
作者本身也在其文章中提到了一些值得改進的地方,能讓后人在此基礎(chǔ)上對 這項工作有所完。果不其然,在隨后幾年的CVPR, SIGGRAPH, ICCV, ECCV上, 幾乎每屆都有更好的結(jié)果涌現(xiàn)。
比如下面這篇2008年Jiaya Jia團隊的文章就作出了非常好的效果:
Shan et al., “High-quality Motion Deblurring from a Single Image,” SIGGRAPH 2008
文章的改善點包括了:
更復(fù)雜的噪聲模型,噪聲的概率分布由其0階、1階、2階梯度的分布來描述
更簡單的擬合重尾分布的函數(shù)
加入了局部平滑區(qū)域的約束,避免出現(xiàn)振鈴效應(yīng)
復(fù)雜的優(yōu)化方法,交替式的優(yōu)化估計清晰圖像L和模糊核K
下面是算法的效果,還是非常不錯的:

這個領(lǐng)域后面出了非常多效果更好的文章,在github上有一個專門的項目整理記錄:
六、總結(jié)
去卷積分為非盲去卷積和盲去卷積,我介紹的用途主要是圖像的去模糊。今天介紹的Fergus的文章利用了變分貝葉斯算法來求解模糊核K,然后利用經(jīng)典的非盲去卷積算法Richardson-Lucy算法來進行清晰圖像的恢復(fù)。從今天介紹的文章你可以看到,理解盲去卷積的算法對圖像的統(tǒng)計信息、概率知識、最優(yōu)化求解方法的要求要比非盲去卷積高很多。坦率說,我自己在看這些文章時也感覺很吃力。
但我希望這篇文章能給你打開一扇大門,讓你可以透過它看到一片新的研究天地。如果你喜歡這篇文章,請給我點贊,謝謝!??
好消息!
小白學(xué)視覺知識星球
開始面向外開放啦??????
下載1:OpenCV-Contrib擴展模塊中文版教程 在「小白學(xué)視覺」公眾號后臺回復(fù):擴展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴展模塊教程中文版,涵蓋擴展模塊安裝、SFM算法、立體視覺、目標跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。 下載2:Python視覺實戰(zhàn)項目52講 在「小白學(xué)視覺」公眾號后臺回復(fù):Python視覺實戰(zhàn)項目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實戰(zhàn)項目,助力快速學(xué)校計算機視覺。 下載3:OpenCV實戰(zhàn)項目20講 在「小白學(xué)視覺」公眾號后臺回復(fù):OpenCV實戰(zhàn)項目20講,即可下載含有20個基于OpenCV實現(xiàn)20個實戰(zhàn)項目,實現(xiàn)OpenCV學(xué)習(xí)進階。 交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~
