影象演算法研究---背景虛化演算法
背景虛化演算法研究
一,背景虛化特點研究
玩單反的人經常會使用背景虛化來拍攝一些很漂亮的照片,但是,單反畢竟不是每個人都可以玩的,因此,出現了很多軟體演算法來實現的背景虛化效果。
我們要實現背景虛化,首先要了解單反拍出的背景虛化的照片有什麼特點,只有這樣,才能寫出更接近真實的演算法。
經過我的總結,背景虛化有如下幾個特點:
1,聚焦的物體成像要清晰(也就是焦平面內要清晰);
2,焦平面之外的景物成像是模糊的;
3,距離焦平面越遠,模糊程度越大,反之,越小(即模糊隨著景深不同而不同);
4,焦外成像二線性問題;
現在很多手機廠商都在用影象演算法做背景虛化,但是在單攝像頭的情況下,效果卻都不盡人意,這裡舉個例子來說明一下。
下面這張圖是華為榮耀6Plus的效果圖:
這張圖至少有三個問題:
①在人和依靠的樹所在的焦平面內,人頭和鞋子兩個地方是模糊的,不是清晰的;
②美女的長腿與樹之間的縫隙是不屬於焦平面的,應該是模糊的,而不是清晰的;
③焦平面外的模糊應該是漸進的模糊,而不是均勻的,這個圖明顯是均勻的;
據說最新的華為手機效果不錯,具體本人沒有找到相應的測試,有興趣的可以試一下;
這裡我們也給一個相對而言看起來比較真實一點的測試圖:
上面這兩張圖是XSHOT的原圖和效果圖,單看效果,圖3聚焦在一兩朵花上,也就是焦平面在花上,這個平面上是很清晰的,除此之外的地方,也是漸進模糊的,距離這朵花越遠的地方,模糊程度也越強。
對於雙攝像頭的背景虛化,實際上是利用兩個攝像頭的位置資訊,計算成像的景深等等,來結合演算法實現的效果;由於採用了兩個攝像頭,因此,效果要比單攝像頭單純的演算法實現要好,這裡給出
上面我們詳細的說了一下背景虛化的特點,針對最後一點焦外二線性,實際上是這樣的:對於單反,絕大多數鏡頭在全開光圈的時候,光圈都是圓形的,此時的焦外成像就代表了鏡頭設計的本性;當收縮光圈拍攝時表現出來的焦外成像,是鏡頭設計的本性和光圈形狀共同作用的結果。一些鏡頭在全開光圈時可以表現出很好的焦外成像,但是在收縮光圈後,由於光圈的非圓形,會破壞焦外成像內容。
一般來說,好的虛化應該是按對焦點遠近過渡均勻連續的,在焦外成像中沒有明顯的邊緣殘留,如圖6所示;而圖5中,虛化的物體的輪廓不是均勻散焦的,而是被數條線分開,形成一些類似小氣泡的東西,這就是焦外二線性。
二,背景虛化演算法實現
這裡我所講的是單攝像頭情況下的演算法實現;
這個PS實現,實際上也是按照我前面所說的三個背景虛化的特點來實現的,具體大家可以試一下,感受一下;
下面說一下我這裡的演算法流程如下:
1,聚焦物體摳圖(構建焦平面);
2,焦平面之外的背景模糊;
3,焦平面之外的背景漸進模糊變換;
4,焦外二線性;
對於1聚焦物體摳圖,常用的有傳統的貝葉斯摳圖演算法、Graph Cut、Alpha mat等,以及深度學習相關的摳圖演算法等等。
參考論文如下:
《Interactive graph cuts for optimal boundary and region segmentation of objects in N-D images》
《Shared Sampling for Real-Time Alpha Matting》
《A Closed Form Solution to Natural Image Matting》
《A Bayesian Approach to Digital Matting》
《Learning Based Alpha Matting using Support Vector Regression》
《Natural Image Matting using Deep Convolutional Neural Networks》
《Deep Image Matting》
這一步驟,假設原圖為S,摳圖得到目標影象之後,我們需要構建一個焦平面Mask,然後對該Mask進行高斯濾波,得到一個有邊緣過度的Mask;
如下圖所示:
針對2背景模糊,我們可以直接對原圖進行高斯模糊,得到模糊影象G;
針對3漸進模糊,我們需要在焦平面的中心點,向外構建一個比例係數,構成一個擴散係數,距離焦平面中心點越遠,擴散係數越大,對應的模糊程度也越大,這裡我假設為K;
上述三點完成之後,我們做如下處理:
Output = S*Mask+(255-Mask)*G
這個公式計算出來的效果是背景模糊均勻的背景虛化效果;
如下圖所示:
要構建漸進模糊,需要兩個步驟:
①我們需要先計算焦平面的中心,這個中心點計算公式如下:
實際上也就是質心計算公式,這裡我們計算出的質心為(x0,y0);
②以(x0,y0)為中心,向外計算可變半徑高斯模糊,即距離中心越遠的地方高斯半徑越大,反之越小,具體可以參考比例係數K;
這一步得到的效果是有漸進模糊的背景虛化效果,同時,過渡區域也比較自然;
這裡我給個我的測試圖:
大家可以看到這個圖中,聚焦平面(一朵花)是很清晰的,聚焦平面外事漸進模糊的,有一種景深的感覺。
對於焦外二線性的效果,可以在景深比較深也就是距離焦平面比較遠的地方,新增不同鏡頭二線性形狀的光斑,與虛化後的圖進行融合,至此,就更加具有真實感了。
除此之外,我們還可以對焦平面內影象內容進行清晰度增強處理,這樣效果上聚焦就更明顯了,給出新增清晰度後的效果圖:
具體程式碼就不寫了,本文主要探討方法,方法有了,程式碼只是水到渠成的事情。
最後,給出一個C#呼叫C實現的DEMO看下效果:點選開啟連結
本人QQ1358009172,歡迎交流討論影象演算法!