運動模糊演算法推論

gogogo在掘金發表於2018-08-26

運動模糊是photoshop中的一種濾鏡,也是AE中的一種動效。本文提出了該效果的一種演算法實現及原理推論。演示demo見github

一、效果演示

運動模糊演算法推論

二、背景介紹

運動模糊是景物影象中的移動效果。它比較明顯地出現在長時間曝光或場景內的物體快速移動的情形。

運動模糊演算法推論
在即時電腦動畫中,每一幀顯示的是瞬時畫面,沒有動態模糊。因此每秒24-30張畫面的電玩遊戲看起來斷斷續續的並不自然,而使用畫面更新頻率更快的攝影機拍攝自然動作看起來卻是連續的。因此很多電玩遊戲會以運動模糊為特色,尤其是賽車模擬遊戲:在預先運算生成的電腦影象中,給出逼真的運動模糊效果,在時間上避免失真需依照許多瞬間的組合來製造畫面,渲染器也有更多的時間來繪製每個畫面。

運動模糊演算法推論
所以,在動畫中加入運動模糊效果的目的:
1).增強快速移動場景的真實感,使視覺上更柔和。
2).在不損失視覺流暢性的情況下,減低幀率,顯著減少功耗。

三、運動模糊演算法

1.運動模糊的型別

線性
運動模糊發生在單一方向的模糊。鏡頭的角度會影響動態模糊線條的角度;濾鏡的半徑長度會影響模糊強度,長度越長會月模糊。本文討論此種型別。

運動模糊演算法推論


旋轉
產生像物體在旋轉的環狀動態模糊。此型別的模糊以鏡頭為準的點為中心,角度為主要影響因素,角度變化越大越模糊。

運動模糊演算法推論


縮放
縮放型的動態模糊是以圖片中心為中心輻射開來的模糊。圖片中心未發生模糊但以圖片中心為準的外圍卻會模糊,會讓人有凸顯圖片中心的動態感覺。鏡頭的縮放長度為主要影響因素。

運動模糊演算法推論

2.運動模糊的原理

在上一節我們介紹過,在攝影機中產生運動模糊的原因是因為在曝光時間內,拍攝物體產生了唯一,所以造成運動模糊的效果。而在我們現實生活中,同樣能夠看到很多運動模糊的場景。比如雨滴落下的場景。在下大雨的時候,我們看到的雨滴,並不是一顆一顆的,而是成一條直線落下,但實際雨滴只是水滴的形狀,並不是條狀。這是由於視覺暫留的現象造成的。當物體停止發光時,在人腦海中的影像資訊並不會立即小時,會有短時間的停留,而雨滴樓下的過程,由於視覺暫留的原因,雨滴每次進過的地方會在我們腦海中留下影像,既而形成一條連貫的直線,也就是我們人眼所看到的運動模糊的效果。

2.1.視覺暫留

視覺暫留現象是光對視網膜所產生的光停止作用後,仍保留一段時間的現象,原因是由視神經的反應速度造成的。視覺實際上是靠眼睛的晶狀體成像,感光細胞感光,並且將光訊號轉換成神經電流,傳回大腦引起人體視覺。感光細胞的感光是靠一些感光色素,感光色素的形成需要一定的時間,這就形成了視覺暫留的現象,也叫視覺惰性。
當物體在快速運動時,人眼所看到的影像消失後,由於視覺暫留的現象,視神經對物體的印象不會立即消失,而要延續一段時間,就形成了人眼所看到的運動模糊的景象。 基於視覺惰性的特性,當作用於人眼的光線突然消失後,亮度感覺不會立即消失,而是近似按指數規律下降而逐漸消失,如下圖:

運動模糊演算法推論

2.2.視覺惰性與運動模糊

如下是一個物體在制定的方向上運動

運動模糊演算法推論
其中物體下方所標的序號1,2,……表示物體的該部分在1s,2s,……時間前曾經過標記位所處的位置。我們假設物體是勻速運動的,視覺惰性的亮度衰減函式為f(x),每個部分的最大亮度值為B(t),在標記位所看到的綜合感官顏色殘影位rest(t).這裡為了簡化計算,我們假設f(t)為線性關係,且B(t)為10.

運動模糊演算法推論
則各部分在標記位殘留的亮度位:

運動模糊演算法推論

運動模糊演算法推論

運動模糊演算法推論
從上述分析可得,假設n為感光亮度消失的最大時間,人眼在比標記處看到的感官顏色值為:

運動模糊演算法推論
這裡為了簡化計算,從亮度的峰值開始疊加各個衰減的殘影。由之前的視覺殘留資料我們可以知道,衰減函式在上升和下降階段基本是堆成的,所以加上這階段的殘影疊加,我們可以得到:

運動模糊演算法推論
即對於一張體現勻速運動的圖片y(x)來說,我們將上述殘影疊加對映到每個畫素的計算,則產生運動模糊之後的圖片可以表示為:

運動模糊演算法推論
*表示卷積,psf即點擴散函式,而運動方向上感光亮度消失的最大距離點則為運動模糊的模糊半徑。

3.模糊演算法

3.1.點擴散函式

我們給運動方向加上一個斜率β,如下圖所示:

運動模糊演算法推論
圖中的實心圓點為圖片上受視覺惰性影響的畫素點,(x0,y0)為畫素點的座標,L為模糊半徑,即運動方向上感光亮度消失的最大距離,由運動速率決定。
則運動方向上最簡單的運動模糊模型可用直線型點擴散函式以離散卷積形式表示為:

運動模糊演算法推論
###3.2.圖片處理 將運動模糊的點擴散函式代入之前介紹的模糊公式,設r=L/2,則

運動模糊演算法推論
由於圖片的畫素是離散的,則上述模型可以表示為:

運動模糊演算法推論
由上述模型我們可以知道,將一張圖片進行運動模糊的處理,實際是獲取每個畫素在運動方向上的L個取樣點,取其平均值,作為相信的畫素值賦值給當前計算的畫素。
涉及的引數有:
1)方向β
2)模糊半徑L
如下圖為一張需要處理的圖片,每個格子表示圖片中的每個畫素。紅色格子為需要處理的畫素。假設模糊半徑為r,方向角度為β

運動模糊演算法推論
則需要處理的畫素顏色值為:

運動模糊演算法推論

三、效能優化

減少取樣點

對於一張n1xn2畫素的圖片,採用上述運動模糊的演算法複雜度為

運動模糊演算法推論
其中L為模糊半徑,也為取樣點的個數,圖片模糊處理的計算時間隨取樣點個數呈線性增長。模糊的力度與模糊半徑呈正比。所以我們可以在保證模糊半徑不變的情況下,相應的減少取樣點的個數:

運動模糊演算法推論
由於在demo裡我們處理的物件是文字圖片,在文字內部,連續的兩個畫素值非常接近,將連續取樣改成間隔取樣對於文字來說在效果上的影響非常小,但是卻可以減少一半的計算時間成本。 如下是減少取樣前跟減少取樣後的效果對比圖:

運動模糊演算法推論

運動模糊演算法推論

可見,取樣優化後的效果與優化前基本一致。

相關文章