熊 煒,王傳勝,李利榮,劉 敏,曾春艷
(1.湖北工業(yè)大學(xué)電氣與電子工程學(xué)院,湖北 武漢 430068; 2.美國(guó)南卡羅來納大學(xué)計(jì)算機(jī)科學(xué)與工程系,南卡 哥倫比亞 29201)
隨著自媒體的發(fā)展,通過智能設(shè)備拍攝短視頻已經(jīng)成為人們記錄生活的主流方式。雖然當(dāng)今部分品牌手機(jī)內(nèi)部嵌入防抖攝像功能,但是在手持移動(dòng)設(shè)備拍攝視頻的過程中,由于外在相關(guān)條件的影響,拍攝的視頻依舊很不穩(wěn)定。視頻穩(wěn)像技術(shù)的目的主要是消除或減少視頻的抖動(dòng),以便生成穩(wěn)定的視頻[1],提高視頻圖像質(zhì)量。
視頻穩(wěn)像算法通常分為2D[2,3]方法、2.5D[4]方法和3D[5]方法。3D方法常用于耗時(shí)的3D重建。2.5D方法適用于專業(yè)拍攝設(shè)備。2D方法由于處理速度快和較好的魯棒性,常被用于解決視頻穩(wěn)像問題。
視頻穩(wěn)像方法一般包括3個(gè)部分:運(yùn)動(dòng)估計(jì)、運(yùn)動(dòng)平滑和運(yùn)動(dòng)補(bǔ)償。近年來,國(guó)內(nèi)外專家學(xué)者在該領(lǐng)域提出了不同的研究方法。2011年,Grundmann等人[2]提出L1優(yōu)化處理平滑算法穩(wěn)定抖動(dòng)視頻,算法主要基于線性編程框架,從而最小化攝像機(jī)路徑的一階、二階和三階導(dǎo)數(shù);2013年,Liu等人[6]提出捆綁相機(jī)路徑算法進(jìn)行視頻穩(wěn)像,將視頻劃分為均勻網(wǎng)格,該算法采用基于網(wǎng)格的空間變量運(yùn)動(dòng)表示和自適應(yīng)的時(shí)空路徑對(duì)抖動(dòng)視頻進(jìn)行優(yōu)化;2014年,Liu等人[3]提出運(yùn)動(dòng)模型SteadyFlow來表示相鄰視頻幀之間的運(yùn)動(dòng)以進(jìn)行穩(wěn)定;2016年,Liu等人[7]提出一種新型的運(yùn)動(dòng)模型MeshFlow來實(shí)時(shí)穩(wěn)定抖動(dòng)視頻;2018年,Nie等人[8]在視頻拼接中考慮視頻穩(wěn)像,提出一種結(jié)合識(shí)別視頻背景和捆綁相機(jī)路徑的方法來拼接視頻。隨著計(jì)算機(jī)視覺、人工智能技術(shù)以及機(jī)器學(xué)習(xí)的發(fā)展,2018年,Xu等人[9]提出使用對(duì)抗網(wǎng)絡(luò)來處理抖動(dòng)視頻;2019年,Wang等人[10]提出一種StabNet神經(jīng)網(wǎng)絡(luò)模型來處理抖動(dòng)視頻,但最終穩(wěn)像效果并不理想;2019年,Yu等人[11]直接將幀的外觀變化建模為連續(xù)幀的密集光流場(chǎng),同時(shí)提出了一種新的優(yōu)化方法,將非凸問題轉(zhuǎn)化為卷積神經(jīng)網(wǎng)絡(luò)CNN(Convolutional Neural Networks)優(yōu)化問題,它在每個(gè)特定的輸入視頻中從頭開始訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)CNN,并且有意地過度擬合CNN參數(shù),以在輸入視頻上產(chǎn)生最佳結(jié)果。
針對(duì)手持設(shè)備拍攝的視頻抖動(dòng)問題,本文提出一種結(jié)合金字塔光流法和卡爾曼濾波的視頻穩(wěn)像算法。結(jié)合文獻(xiàn)[11]的思路,首先在預(yù)穩(wěn)定階段,通過光流法跟蹤視頻幀的最小特征值特征點(diǎn),由此求解出每個(gè)視頻幀的2D仿射變換矩陣,并將其作用于下一步輸入視頻的幀,從而將最終生成的裁剪視頻作為預(yù)穩(wěn)定階段的輸出。然后對(duì)預(yù)穩(wěn)定視頻幀進(jìn)行Shi-Tomasi角點(diǎn)檢測(cè)[12],并對(duì)角點(diǎn)進(jìn)行LK(Lucas-Kanade)角點(diǎn)跟蹤;隨后利用RANSAC(RANdom SAmple Consensus)算法[13]估計(jì)全局運(yùn)動(dòng);再使用卡爾曼濾波器對(duì)得到的運(yùn)動(dòng)參數(shù)進(jìn)行濾波,以達(dá)到平滑的目的;最后由原始相機(jī)路徑與平滑路徑的關(guān)系進(jìn)行運(yùn)動(dòng)補(bǔ)償,從而得到穩(wěn)定視頻。本文算法流程如圖1所示。
Figure 1 Flow chart of the algorithm in this paper圖1 本文算法流程
(1)
其中,H表示預(yù)穩(wěn)定處理后的單應(yīng)性變換矩陣。
求解得到的Ht用于下一步輸入視頻的幀,并且作為預(yù)穩(wěn)定輸出的結(jié)果。其中光流法跟蹤效果如圖2所示。
全局運(yùn)動(dòng)估計(jì)主要分為以下3步:首先選取預(yù)穩(wěn)定視頻第1幀作為基準(zhǔn),進(jìn)行相鄰幀間處理,進(jìn)行Shi-Tomasi角點(diǎn)檢測(cè);然后再利用LK跟蹤算法對(duì)相鄰幀間的角點(diǎn)進(jìn)行跟蹤;最后根據(jù)RANSAC算法估計(jì)相鄰幀間的仿射變換矩陣,由此計(jì)算得出原始相機(jī)路徑。
角點(diǎn)也稱極值點(diǎn),是指像素變化較快的拐角位置或直線相交處。Shi-Tomasi角點(diǎn)檢測(cè)是對(duì)Harris角點(diǎn)檢測(cè)的改進(jìn),是一種局部特征檢測(cè)方法,主要思想是通過改變移動(dòng)窗口計(jì)算出窗口內(nèi)灰度值的變化。令E(x,y)表示視頻圖像在坐標(biāo)(x,y)處的灰度值,窗口移動(dòng)(Δx,Δy)引起的灰度值變化如式(2)所示:
(2)
為了得到角點(diǎn)位置,只需要求得E(Δx,Δy)的極大值即可。對(duì)式(2)進(jìn)行泰勒展開并舍去高階項(xiàng),可得式(3):
(3)
其中,M用式(4)表示:
(4)
其中,Ix和Iy分別表示x和y方向上的梯度值,?代表張量積運(yùn)算。設(shè)λ1和λ2為M的2個(gè)特征值,且給定一個(gè)閾值λ,如果某像素點(diǎn)滿足min(λ1,λ2)>λ,則存在Shi-Tomasi特征點(diǎn);反之,則不存在特征點(diǎn)。Shi-Tomasi角點(diǎn)檢測(cè)結(jié)果如圖3所示,本文算法設(shè)置檢測(cè)100個(gè)角點(diǎn)。
Figure 3 Shi-Tomasi corner detection result圖3 Shi-Tomasi角點(diǎn)檢測(cè)結(jié)果
檢測(cè)到Shi-Tomasi角點(diǎn)后,需要對(duì)其進(jìn)行跟蹤。LK跟蹤算法也稱KLT(Kanade-Lucas-Tomasi)跟蹤算法,是常用的角點(diǎn)跟蹤算法,也是一種以待跟蹤窗口相鄰幀間的灰度平方和SSD(Sum of Squard Differences)作為度量的匹配算法。
假設(shè)一個(gè)包含特征紋理信息的特征窗口W,設(shè)t時(shí)刻對(duì)應(yīng)的視頻幀用I(x,y,t)表示,t+τ時(shí)刻對(duì)應(yīng)的視頻幀用I(x,y,t+τ)表示,其對(duì)應(yīng)的位置滿足式(5):
I(x,y,t+τ)=I(x-Δx,y-Δy,t)
(5)
其中,Δx和Δy為特征點(diǎn)X(x,y)的偏移量。而在I(x,y,t+τ)中的每個(gè)像素點(diǎn)都可以根據(jù)I(x,y,t)中相對(duì)應(yīng)的像素點(diǎn)平移d(Δx,Δy)求得。
假設(shè)相鄰幀I和J,為了找到能夠使SSD(用ε表示)最小化的d。定義ε為:
(6)
其中,W是特征窗口,ω(X)是權(quán)重系數(shù)。
為了得到最佳匹配點(diǎn),對(duì)J(X+d)進(jìn)行泰勒展開,且去掉最高次項(xiàng),僅保留前2項(xiàng),而g是泰勒展開式的一階泰勒系數(shù),gx和gy分別為x和y方向上的一階泰勒系數(shù)。對(duì)式(6)進(jìn)行求導(dǎo)并化簡(jiǎn)得:
(7)
再對(duì)式(7)進(jìn)行牛頓迭代,由此找到最佳匹配。最終解如式(8)所示。
(8)
其中,dk表示第k次迭代計(jì)算得到的d值,其初始值d0=0。
相鄰幀間的復(fù)雜變換主要表現(xiàn)在相似變換、剛性變換和仿射變換等。本文采用仿射變換作為相鄰幀間的全局運(yùn)動(dòng),利用RANSAC算法估計(jì)出幀間的仿射變換矩陣。其數(shù)學(xué)模型可表示為:
(9)
抖動(dòng)視頻產(chǎn)生的原因在于視頻內(nèi)容運(yùn)動(dòng)與相機(jī)主運(yùn)動(dòng)方向不一致。RANSAC算法可將與相機(jī)主運(yùn)動(dòng)方向不一致的角點(diǎn)或者特征點(diǎn)剔除,這些點(diǎn)會(huì)使得視頻幀運(yùn)動(dòng)模型的求解結(jié)果出現(xiàn)偏差。
假設(shè)視頻幀I與J是相鄰的2幀圖像,運(yùn)動(dòng)參數(shù)求解用式(10)表示:
(10)
其中,(x,y)為視頻幀I的中心像素點(diǎn),Tx為水平方向平移值,Ty為垂直方向平移值,X′表示初始水平方向偏移量,Y′表示初始垂直方向偏移量。仿射變換包含6個(gè)自由度,且包含剛性變換、相似變換等。
根據(jù)預(yù)穩(wěn)定視頻跟蹤到的角點(diǎn),利用RANSAC算法估計(jì)出相鄰幀間的仿射變換矩陣。求解得到預(yù)穩(wěn)定視頻的第t幀到第t+1幀的單應(yīng)性變換矩陣Ht,由此可計(jì)算出原始相機(jī)路徑Ct,如式(11)所示:
Ct=Ct-1Ht,t=1,2,…,N
(11)
其中,N為視頻總幀數(shù)。
運(yùn)動(dòng)平滑主要是為了去除原始相機(jī)路徑的抖動(dòng),使得路徑變得平滑。運(yùn)動(dòng)平滑通常可以通過高斯濾波器、卡爾曼濾波器或者曲線擬合等方式來完成。本文主要通過卡爾曼濾波器對(duì)上一步原始相機(jī)路徑進(jìn)行平滑處理。
卡爾曼濾波[14]利用遞推估計(jì),從運(yùn)動(dòng)矢量中提取有意義的運(yùn)動(dòng)矢量,可由視頻前一幀的估計(jì)值預(yù)測(cè)當(dāng)前時(shí)刻值。利用卡爾曼濾波對(duì)運(yùn)動(dòng)路徑做優(yōu)化的預(yù)測(cè)模型可用式(12)表示:
(12)
其中,X(t|t-1)表示第t幀對(duì)應(yīng)狀態(tài)量預(yù)測(cè)的結(jié)果,X(t-1|t-1)表示第t-1幀對(duì)應(yīng)狀態(tài)量的最優(yōu)估計(jì)值,P(t|t-1)表示第t幀對(duì)應(yīng)的狀態(tài)協(xié)方差,F(xiàn)表示系統(tǒng)轉(zhuǎn)移矩陣,Q表示預(yù)測(cè)噪聲的方差。
卡爾曼濾波器的更新模型用式(13)表示:
(13)
其中,M(t)表示第t幀的卡爾曼增益,HG表示觀測(cè)矩陣,I表示單位矩陣,R表示測(cè)量噪聲的協(xié)方差,P(t|t)表示濾波后的協(xié)方差。
預(yù)穩(wěn)定后的視頻依然存在抖動(dòng)部分,使用卡爾曼濾波對(duì)得到的運(yùn)動(dòng)參數(shù)進(jìn)行濾波,濾波后的運(yùn)動(dòng)參數(shù)反映出原始路徑的運(yùn)動(dòng)變化。
原始路徑與濾波后的路徑對(duì)比如圖4所示,由圖4可知,在水平方向和垂直方向上均得到良好的平滑效果。
Figure 4 Comparison of original path and filter path圖4 原始路徑與濾波路徑對(duì)比
通過卡爾曼濾波器對(duì)原始相機(jī)路徑Ct進(jìn)行平滑處理,處理后的平滑相機(jī)路徑為Pt。求得平滑路徑后,再逐一對(duì)視頻幀進(jìn)行補(bǔ)償,假設(shè)補(bǔ)償矩陣為Bt,它們之間的關(guān)系可以用式(14)表示:
Pt=CtBt
(14)
根據(jù)式(14)可以計(jì)算出相鄰幀間的補(bǔ)償矩陣Bt,如式(15)所示。
(15)
計(jì)算出每一幀的補(bǔ)償矩陣后,可利用其對(duì)原始路徑進(jìn)行幾何變換。
本文采用相鄰幀間的PSNR(Peak Signal to Noise Ratio)[15]、SSIM(Structural Similarity Index)[16]均值及相應(yīng)的標(biāo)準(zhǔn)差,以及Zhang等人[17]提出的穩(wěn)像視頻平均曲率作為客觀質(zhì)量評(píng)價(jià)指標(biāo);同時(shí)考慮各算法的運(yùn)動(dòng)估計(jì)時(shí)間復(fù)雜度,即運(yùn)動(dòng)估計(jì)階段單幀處理時(shí)間。其中,PSNR值越大、SSIM值越接近1、視頻曲率越小,表明最終視頻穩(wěn)定性越好,且單幀處理時(shí)間越短越有利于實(shí)時(shí)處理。
為了顯示本文算法的穩(wěn)定效果,選擇最近幾年性能較好的穩(wěn)像算法進(jìn)行比較,它們分別是Grundmann等人[2]提出的L1算法、Liu等人[7]提出的MeshFlow方法以及Snchez[18]提出的參數(shù)模型算法。同時(shí)選擇6大類視頻進(jìn)行實(shí)驗(yàn),分別為Regular類、Crowd類、Parallax類、Zooming類、Quick Rotation類和Running類。其中,每一類選取10個(gè)視頻進(jìn)行實(shí)驗(yàn),總共60個(gè)視頻。6大類視頻均來自文獻(xiàn)[6]提供的公開數(shù)據(jù)集,且視頻分辨率均為640×360。
為了客觀評(píng)價(jià)各算法性能,實(shí)驗(yàn)在同一硬件和軟件環(huán)境下進(jìn)行。實(shí)驗(yàn)所使用的CPU為AMD Ryzen5 2600 Six-Core Processor,GPU為NVIDIA RTX 2070,運(yùn)行系統(tǒng)為Ubuntu16.04。表1所示為實(shí)驗(yàn)對(duì)比結(jié)果。
Table 1 Experimental comparison results表1 實(shí)驗(yàn)對(duì)比結(jié)果
通過表1可以看出,針對(duì)實(shí)驗(yàn)中所選取的6大類視頻,穩(wěn)像后的視頻PSNR值與原視頻PSNR值相比均有提高,由此說明視頻幀間的灰度差變小,視頻序列較為穩(wěn)定。6大類原始視頻幀間的平均PSNR值約為19.241 dB,本文算法視頻幀間的平均PSNR值約為25.602 dB,穩(wěn)像后的視頻PSNR值平均提升6.361 dB。MeshFlow平均PSNR值約為23.609 dB,本文算法與其對(duì)比約提升1.933 dB。通過視頻幀間的結(jié)構(gòu)相似性(SSIM)均值可以發(fā)現(xiàn),本文算法有效地提高了視頻幀間的結(jié)構(gòu)相似性,穩(wěn)像后視頻比原視頻SSIM值大約提升了40%,相比MeshFlow約提升9.2%。原始視頻平均曲率約為1.348,穩(wěn)像后的視頻平均曲率約為1.265,相比約提升了8.3%。由于參數(shù)模型算法在網(wǎng)頁(yè)(http://www.ipol.im/pub/art/2017/209/)上生成,因此無(wú)法記錄該算法的視頻穩(wěn)像處理時(shí)間。
圖5為穩(wěn)像前后視頻對(duì)比圖像,其中圖5a為原始視頻幀,圖5b為穩(wěn)像視頻幀。通過對(duì)比發(fā)現(xiàn),視頻幀間出現(xiàn)不同的視角變化,這是因?yàn)閷?duì)視頻幀進(jìn)行補(bǔ)償時(shí),變換后的視頻幀出現(xiàn)黑邊,而后對(duì)黑邊進(jìn)行裁剪。黑邊問題也是視頻穩(wěn)像的一大難點(diǎn),需要進(jìn)一步深入研究。
Figure 5 Video contrast before and after video stabilization圖5 穩(wěn)像前后視頻對(duì)比圖像
本文提出了一種結(jié)合光流法和卡爾曼濾波的視頻穩(wěn)像算法。首先通過光流法預(yù)穩(wěn)定抖動(dòng)視頻,對(duì)其生成的預(yù)穩(wěn)定視頻幀進(jìn)行Shi-Tomasi角點(diǎn)檢測(cè),并采用LK算法跟蹤角點(diǎn),再利用RANSAC算法估計(jì)相鄰幀間的仿射變換矩陣,由此計(jì)算得出原始相機(jī)路徑,進(jìn)一步通過卡爾曼濾波器優(yōu)化得到平滑相機(jī)路徑。最后由原始相機(jī)路徑與平滑路徑的關(guān)系,計(jì)算相鄰幀間的補(bǔ)償矩陣,再利用補(bǔ)償矩陣對(duì)視頻幀逐一進(jìn)行幾何變換,由此得到穩(wěn)定的視頻輸出。實(shí)驗(yàn)結(jié)果表明,該算法在處理不同類型的抖動(dòng)視頻時(shí)均有較好的效果,其中穩(wěn)像后的視頻PSNR值相比原始視頻PSNR值約提升6.361 dB,視頻幀間的結(jié)構(gòu)相似性(SSIM)大約提升了40%,平均曲率值約提升了8.3%。但是,本文算法依舊存有一些不足點(diǎn),比如預(yù)穩(wěn)定部分的引入,使得處理單幀的時(shí)間變長(zhǎng),由此很難實(shí)時(shí)處理視頻,這需要后期進(jìn)行更深入的研究。