熊 煒,王傳勝,李利榮,劉 敏,曾春艷
(1.湖北工業大學電氣與電子工程學院,湖北 武漢 430068; 2.美國南卡羅來納大學計算機科學與工程系,南卡 哥倫比亞 29201)
隨著自媒體的發展,通過智能設備拍攝短視頻已經成為人們記錄生活的主流方式。雖然當今部分品牌手機內部嵌入防抖攝像功能,但是在手持移動設備拍攝視頻的過程中,由于外在相關條件的影響,拍攝的視頻依舊很不穩定。視頻穩像技術的目的主要是消除或減少視頻的抖動,以便生成穩定的視頻[1],提高視頻圖像質量。
視頻穩像算法通常分為2D[2,3]方法、2.5D[4]方法和3D[5]方法。3D方法常用于耗時的3D重建。2.5D方法適用于專業拍攝設備。2D方法由于處理速度快和較好的魯棒性,常被用于解決視頻穩像問題。
視頻穩像方法一般包括3個部分:運動估計、運動平滑和運動補償。近年來,國內外專家學者在該領域提出了不同的研究方法。2011年,Grundmann等人[2]提出L1優化處理平滑算法穩定抖動視頻,算法主要基于線性編程框架,從而最小化攝像機路徑的一階、二階和三階導數;2013年,Liu等人[6]提出捆綁相機路徑算法進行視頻穩像,將視頻劃分為均勻網格,該算法采用基于網格的空間變量運動表示和自適應的時空路徑對抖動視頻進行優化;2014年,Liu等人[3]提出運動模型SteadyFlow來表示相鄰視頻幀之間的運動以進行穩定;2016年,Liu等人[7]提出一種新型的運動模型MeshFlow來實時穩定抖動視頻;2018年,Nie等人[8]在視頻拼接中考慮視頻穩像,提出一種結合識別視頻背景和捆綁相機路徑的方法來拼接視頻。隨著計算機視覺、人工智能技術以及機器學習的發展,2018年,Xu等人[9]提出使用對抗網絡來處理抖動視頻;2019年,Wang等人[10]提出一種StabNet神經網絡模型來處理抖動視頻,但最終穩像效果并不理想;2019年,Yu等人[11]直接將幀的外觀變化建模為連續幀的密集光流場,同時提出了一種新的優化方法,將非凸問題轉化為卷積神經網絡CNN(Convolutional Neural Networks)優化問題,它在每個特定的輸入視頻中從頭開始訓練卷積神經網絡CNN,并且有意地過度擬合CNN參數,以在輸入視頻上產生最佳結果。
針對手持設備拍攝的視頻抖動問題,本文提出一種結合金字塔光流法和卡爾曼濾波的視頻穩像算法。結合文獻[11]的思路,首先在預穩定階段,通過光流法跟蹤視頻幀的最小特征值特征點,由此求解出每個視頻幀的2D仿射變換矩陣,并將其作用于下一步輸入視頻的幀,從而將最終生成的裁剪視頻作為預穩定階段的輸出。然后對預穩定視頻幀進行Shi-Tomasi角點檢測[12],并對角點進行LK(Lucas-Kanade)角點跟蹤;隨后利用RANSAC(RANdom SAmple Consensus)算法[13]估計全局運動;再使用卡爾曼濾波器對得到的運動參數進行濾波,以達到平滑的目的;最后由原始相機路徑與平滑路徑的關系進行運動補償,從而得到穩定視頻。本文算法流程如圖1所示。

Figure 1 Flow chart of the algorithm in this paper圖1 本文算法流程

(1)
其中,H表示預穩定處理后的單應性變換矩陣。
求解得到的Ht用于下一步輸入視頻的幀,并且作為預穩定輸出的結果。其中光流法跟蹤效果如圖2所示。
全局運動估計主要分為以下3步:首先選取預穩定視頻第1幀作為基準,進行相鄰幀間處理,進行Shi-Tomasi角點檢測;然后再利用LK跟蹤算法對相鄰幀間的角點進行跟蹤;最后根據RANSAC算法估計相鄰幀間的仿射變換矩陣,由此計算得出原始相機路徑。
角點也稱極值點,是指像素變化較快的拐角位置或直線相交處。Shi-Tomasi角點檢測是對Harris角點檢測的改進,是一種局部特征檢測方法,主要思想是通過改變移動窗口計算出窗口內灰度值的變化。令E(x,y)表示視頻圖像在坐標(x,y)處的灰度值,窗口移動(Δx,Δy)引起的灰度值變化如式(2)所示:
(2)
為了得到角點位置,只需要求得E(Δx,Δy)的極大值即可。對式(2)進行泰勒展開并舍去高階項,可得式(3):

(3)
其中,M用式(4)表示:
(4)
其中,Ix和Iy分別表示x和y方向上的梯度值,?代表張量積運算。設λ1和λ2為M的2個特征值,且給定一個閾值λ,如果某像素點滿足min(λ1,λ2)>λ,則存在Shi-Tomasi特征點;反之,則不存在特征點。Shi-Tomasi角點檢測結果如圖3所示,本文算法設置檢測100個角點。

Figure 3 Shi-Tomasi corner detection result圖3 Shi-Tomasi角點檢測結果
檢測到Shi-Tomasi角點后,需要對其進行跟蹤。LK跟蹤算法也稱KLT(Kanade-Lucas-Tomasi)跟蹤算法,是常用的角點跟蹤算法,也是一種以待跟蹤窗口相鄰幀間的灰度平方和SSD(Sum of Squard Differences)作為度量的匹配算法。
假設一個包含特征紋理信息的特征窗口W,設t時刻對應的視頻幀用I(x,y,t)表示,t+τ時刻對應的視頻幀用I(x,y,t+τ)表示,其對應的位置滿足式(5):
I(x,y,t+τ)=I(x-Δx,y-Δy,t)
(5)
其中,Δx和Δy為特征點X(x,y)的偏移量。而在I(x,y,t+τ)中的每個像素點都可以根據I(x,y,t)中相對應的像素點平移d(Δx,Δy)求得。
假設相鄰幀I和J,為了找到能夠使SSD(用ε表示)最小化的d。定義ε為:
(6)
其中,W是特征窗口,ω(X)是權重系數。
為了得到最佳匹配點,對J(X+d)進行泰勒展開,且去掉最高次項,僅保留前2項,而g是泰勒展開式的一階泰勒系數,gx和gy分別為x和y方向上的一階泰勒系數。對式(6)進行求導并化簡得:
(7)
再對式(7)進行牛頓迭代,由此找到最佳匹配。最終解如式(8)所示。
(8)
其中,dk表示第k次迭代計算得到的d值,其初始值d0=0。
相鄰幀間的復雜變換主要表現在相似變換、剛性變換和仿射變換等。本文采用仿射變換作為相鄰幀間的全局運動,利用RANSAC算法估計出幀間的仿射變換矩陣。其數學模型可表示為:

(9)

抖動視頻產生的原因在于視頻內容運動與相機主運動方向不一致。RANSAC算法可將與相機主運動方向不一致的角點或者特征點剔除,這些點會使得視頻幀運動模型的求解結果出現偏差。
假設視頻幀I與J是相鄰的2幀圖像,運動參數求解用式(10)表示:
(10)
其中,(x,y)為視頻幀I的中心像素點,Tx為水平方向平移值,Ty為垂直方向平移值,X′表示初始水平方向偏移量,Y′表示初始垂直方向偏移量。仿射變換包含6個自由度,且包含剛性變換、相似變換等。
根據預穩定視頻跟蹤到的角點,利用RANSAC算法估計出相鄰幀間的仿射變換矩陣。求解得到預穩定視頻的第t幀到第t+1幀的單應性變換矩陣Ht,由此可計算出原始相機路徑Ct,如式(11)所示:
Ct=Ct-1Ht,t=1,2,…,N
(11)
其中,N為視頻總幀數。
運動平滑主要是為了去除原始相機路徑的抖動,使得路徑變得平滑。運動平滑通??梢酝ㄟ^高斯濾波器、卡爾曼濾波器或者曲線擬合等方式來完成。本文主要通過卡爾曼濾波器對上一步原始相機路徑進行平滑處理。
卡爾曼濾波[14]利用遞推估計,從運動矢量中提取有意義的運動矢量,可由視頻前一幀的估計值預測當前時刻值。利用卡爾曼濾波對運動路徑做優化的預測模型可用式(12)表示:

(12)
其中,X(t|t-1)表示第t幀對應狀態量預測的結果,X(t-1|t-1)表示第t-1幀對應狀態量的最優估計值,P(t|t-1)表示第t幀對應的狀態協方差,F表示系統轉移矩陣,Q表示預測噪聲的方差。
卡爾曼濾波器的更新模型用式(13)表示:

(13)
其中,M(t)表示第t幀的卡爾曼增益,HG表示觀測矩陣,I表示單位矩陣,R表示測量噪聲的協方差,P(t|t)表示濾波后的協方差。
預穩定后的視頻依然存在抖動部分,使用卡爾曼濾波對得到的運動參數進行濾波,濾波后的運動參數反映出原始路徑的運動變化。
原始路徑與濾波后的路徑對比如圖4所示,由圖4可知,在水平方向和垂直方向上均得到良好的平滑效果。

Figure 4 Comparison of original path and filter path圖4 原始路徑與濾波路徑對比
通過卡爾曼濾波器對原始相機路徑Ct進行平滑處理,處理后的平滑相機路徑為Pt。求得平滑路徑后,再逐一對視頻幀進行補償,假設補償矩陣為Bt,它們之間的關系可以用式(14)表示:
Pt=CtBt
(14)
根據式(14)可以計算出相鄰幀間的補償矩陣Bt,如式(15)所示。
(15)
計算出每一幀的補償矩陣后,可利用其對原始路徑進行幾何變換。
本文采用相鄰幀間的PSNR(Peak Signal to Noise Ratio)[15]、SSIM(Structural Similarity Index)[16]均值及相應的標準差,以及Zhang等人[17]提出的穩像視頻平均曲率作為客觀質量評價指標;同時考慮各算法的運動估計時間復雜度,即運動估計階段單幀處理時間。其中,PSNR值越大、SSIM值越接近1、視頻曲率越小,表明最終視頻穩定性越好,且單幀處理時間越短越有利于實時處理。
為了顯示本文算法的穩定效果,選擇最近幾年性能較好的穩像算法進行比較,它們分別是Grundmann等人[2]提出的L1算法、Liu等人[7]提出的MeshFlow方法以及Snchez[18]提出的參數模型算法。同時選擇6大類視頻進行實驗,分別為Regular類、Crowd類、Parallax類、Zooming類、Quick Rotation類和Running類。其中,每一類選取10個視頻進行實驗,總共60個視頻。6大類視頻均來自文獻[6]提供的公開數據集,且視頻分辨率均為640×360。
為了客觀評價各算法性能,實驗在同一硬件和軟件環境下進行。實驗所使用的CPU為AMD Ryzen5 2600 Six-Core Processor,GPU為NVIDIA RTX 2070,運行系統為Ubuntu16.04。表1所示為實驗對比結果。

Table 1 Experimental comparison results表1 實驗對比結果
通過表1可以看出,針對實驗中所選取的6大類視頻,穩像后的視頻PSNR值與原視頻PSNR值相比均有提高,由此說明視頻幀間的灰度差變小,視頻序列較為穩定。6大類原始視頻幀間的平均PSNR值約為19.241 dB,本文算法視頻幀間的平均PSNR值約為25.602 dB,穩像后的視頻PSNR值平均提升6.361 dB。MeshFlow平均PSNR值約為23.609 dB,本文算法與其對比約提升1.933 dB。通過視頻幀間的結構相似性(SSIM)均值可以發現,本文算法有效地提高了視頻幀間的結構相似性,穩像后視頻比原視頻SSIM值大約提升了40%,相比MeshFlow約提升9.2%。原始視頻平均曲率約為1.348,穩像后的視頻平均曲率約為1.265,相比約提升了8.3%。由于參數模型算法在網頁(http://www.ipol.im/pub/art/2017/209/)上生成,因此無法記錄該算法的視頻穩像處理時間。
圖5為穩像前后視頻對比圖像,其中圖5a為原始視頻幀,圖5b為穩像視頻幀。通過對比發現,視頻幀間出現不同的視角變化,這是因為對視頻幀進行補償時,變換后的視頻幀出現黑邊,而后對黑邊進行裁剪。黑邊問題也是視頻穩像的一大難點,需要進一步深入研究。

Figure 5 Video contrast before and after video stabilization圖5 穩像前后視頻對比圖像
本文提出了一種結合光流法和卡爾曼濾波的視頻穩像算法。首先通過光流法預穩定抖動視頻,對其生成的預穩定視頻幀進行Shi-Tomasi角點檢測,并采用LK算法跟蹤角點,再利用RANSAC算法估計相鄰幀間的仿射變換矩陣,由此計算得出原始相機路徑,進一步通過卡爾曼濾波器優化得到平滑相機路徑。最后由原始相機路徑與平滑路徑的關系,計算相鄰幀間的補償矩陣,再利用補償矩陣對視頻幀逐一進行幾何變換,由此得到穩定的視頻輸出。實驗結果表明,該算法在處理不同類型的抖動視頻時均有較好的效果,其中穩像后的視頻PSNR值相比原始視頻PSNR值約提升6.361 dB,視頻幀間的結構相似性(SSIM)大約提升了40%,平均曲率值約提升了8.3%。但是,本文算法依舊存有一些不足點,比如預穩定部分的引入,使得處理單幀的時間變長,由此很難實時處理視頻,這需要后期進行更深入的研究。