視頻復(fù)雜度自適應(yīng)的H.264基本單元層碼率控制方法
摘要:為了提高JVT-H017碼率控制提案中的基本單元層比特?cái)?shù)分配方法在視頻序列復(fù)雜度較高時(shí)分配的準(zhǔn)確度,提出了一種視頻復(fù)雜度自適應(yīng)的基本單元層碼率控制方法。利用DMAD參數(shù)來判斷視頻場景的復(fù)雜度,對(duì)JVT-H017的比特?cái)?shù)分配方法進(jìn)行了改進(jìn);同時(shí)提出了一種基本單元層編碼的理想情況,并以此理想情況下的比特?cái)?shù)消耗情況來對(duì)基本單元的比特?cái)?shù)進(jìn)行修正。仿真結(jié)果表明,該方法有效地提高了視頻編碼的峰值信噪比(PSNR),最大可提高0.49 dB,并且輸出碼率更接近預(yù)定編碼碼率。
關(guān)鍵詞:H.264;碼率控制;預(yù)測模型;視頻復(fù)雜度
碼率控制一直是H.264/AVC視頻編碼標(biāo)準(zhǔn)的研究熱點(diǎn)。由Li和Ma等人提出的JVT-H017提案在碼率、圖像質(zhì)量和緩沖器占用度上達(dá)到了良好平衡,已成為最主流的碼率控制方法。JVT-H017使用待編碼基本單元的MAD(平均絕對(duì)誤差)預(yù)測模型的參數(shù)來預(yù)測當(dāng)前幀剩余所有基本單元的MAD,并根據(jù)所得結(jié)果為當(dāng)前基本單元分配比特?cái)?shù)。當(dāng)視頻復(fù)雜度較高時(shí),基本單元的時(shí)空相關(guān)性都明顯降低,此時(shí)這種基本單元比特?cái)?shù)分配方法會(huì)產(chǎn)生較大誤差。
對(duì)此,許多學(xué)者提出了很多改進(jìn)的碼率控制方法。Jianpeng提出使用二維窗口來選取模型參數(shù)的歷史數(shù)據(jù)點(diǎn),但二維窗口通常數(shù)據(jù)點(diǎn)較少,準(zhǔn)確度受到限制;Yang提出了空域的MAD預(yù)測模型來增加MAD預(yù)測的精確度,但計(jì)算復(fù)雜度比較高;Yin提出使用相鄰已編碼基本單元的MAD加權(quán)平均值來計(jì)算當(dāng)前基本單元的MAD,但沒有準(zhǔn)確利用基本單元空域時(shí)域的相關(guān)性;Jen-Yeu提出利用DMAD(Difference of MAD)改進(jìn)JVT-H017的幀間比特?cái)?shù)分配方法并將其應(yīng)用到基本單元層,改善了高復(fù)雜度視頻和場景變換時(shí)的編碼質(zhì)量。
文中在Jen-Yeu提出的基本單元層碼率控制方法的基礎(chǔ)上,對(duì)其復(fù)雜度參數(shù)進(jìn)行了重新定義,提高了復(fù)雜度估計(jì)的準(zhǔn)確性,同時(shí)利用理想狀況下的比特?cái)?shù)消耗情況來對(duì)基本單元比特?cái)?shù)預(yù)測值進(jìn)行修正。文中所有仿真均以官方驗(yàn)證軟件JMl3.2為實(shí)驗(yàn)平臺(tái)。
1 JVT-H017基本單元層碼率控制誤差分析
JM軟件采用了JVT-H017算法中的基本單元目標(biāo)比特?cái)?shù)計(jì)算方法
其中,i表示當(dāng)前幀的序號(hào),j表示當(dāng)前基本單元在當(dāng)前幀中的序號(hào),Ti(j)表示基本單元的目標(biāo)比特?cái)?shù),PMAD表示基本單元MAD的線性預(yù)測值,TRi(j)表示第i幀中第j個(gè)基本單元編碼前該幀剩余比特?cái)?shù),Nunit表示當(dāng)前幀的基本單元總數(shù)。
JVT-H017的比特?cái)?shù)分配方法并沒有充分考慮相鄰幀的基本單元間的時(shí)間和空間相關(guān)性,當(dāng)視頻內(nèi)容變化速度比較快或發(fā)生場景變換時(shí),基本單元之間的時(shí)空相關(guān)性變差,此時(shí)使用當(dāng)前基本單元j的線性預(yù)測系數(shù)去預(yù)測當(dāng)前幀剩余基本單元的MAD而得到的PMADi(k){k=j+1,j+2…Nunit}會(huì)有較大的誤差,而基于PMADi(k)計(jì)算的目標(biāo)比特?cái)?shù)的準(zhǔn)確度也會(huì)有較大幅度下降,使得基本單元的比特?cái)?shù)分配變得不準(zhǔn)確。
2 基于DMAD的基本單元比特分配方法
在JVT-H017算法中,最終為待編碼P幀分配的比特?cái)?shù)f(i)由和兩部分組成
其中,是從當(dāng)前GOP剩余比特?cái)?shù)角度為待編碼P幀分配的比特?cái)?shù),是從編碼碼率和緩沖器占用度角度分配給待編碼P幀的比特?cái)?shù)。在JM13.2模型中,β設(shè)為常數(shù)0.5。
Jen-Yeu通過實(shí)驗(yàn)發(fā)現(xiàn)式(2)中的系數(shù)β與圖像的時(shí)間相關(guān)性有很大的關(guān)系,進(jìn)而影響了幀間比特?cái)?shù)分配和幀圖像的編碼信噪比,并基于此提出用DMAD(Difference of MAD)來判斷視頻序列的復(fù)雜度。第i幀第j個(gè)基本單元的DMAD為
DMAD(i,j)=|MAD(i,j)-MAD(i-1,j)| (3)
當(dāng)DMAD值較大時(shí),表明連續(xù)的兩幀之間某一幀的預(yù)測誤差較大,此時(shí)圖像中極有可能有高速的物體運(yùn)動(dòng)或發(fā)生場景變換。
DMAD(i,j)被進(jìn)一步歸一化為
用來代替式(2)中的權(quán)重系數(shù)β。由于H.264是以基本單元為基本單位進(jìn)行編碼的,所以式(2)被進(jìn)一步改進(jìn)并用來計(jì)算基本單元的目標(biāo)比特?cái)?shù),如式(5)所示。
其中,f(i,j)表示第i幀第j個(gè)基本單元的目標(biāo)比特?cái)?shù),Nunit為一幀中的基本單元總數(shù)。
但由于式(4)的分母選自幀內(nèi)已編碼基本單元的最大值,如果當(dāng)前基本單元的DMAD只是局部最大,而其本身絕對(duì)值并不高,也會(huì)使取得比較大的值,從而被誤判斷為高復(fù)雜度,因此并不能很好的反應(yīng)不同視頻序列間復(fù)雜度的區(qū)別。
對(duì)此,文中將復(fù)雜度從低到高排列的akiyo,mother daughter,suzie,foreman,coastguard,mobile 6個(gè)序列(在常見碼率下編碼,6個(gè)序列的PSNR以約2.5~4 dB遞減,表明6個(gè)序列的復(fù)雜度有比較明顯的差異,能夠反映不同視頻序列編碼的普遍情況)以24 kbits/s,48kbits/s和64 kbits/s的碼率進(jìn)行150幀編碼,記錄各序列每次編碼時(shí)所有P幀基本單元的DMAD值。對(duì)同一序列在3種碼率下編碼的基本單元DMAD記錄值進(jìn)行統(tǒng)一排序并求取排序結(jié)果的中位數(shù),該中位數(shù)代表了對(duì)應(yīng)序列的基本單元的中等復(fù)雜度。求得6個(gè)序列編碼結(jié)果的中位數(shù)的平均值為0.18,它反映了不同視頻序列編碼時(shí)基本單元的中等復(fù)雜度的均值。
選取0.18作為判斷基數(shù),將改進(jìn)為β(i,j)。
β(i,j)與視頻復(fù)雜度成正相關(guān),可以有效反映相鄰幀間圖像復(fù)雜度的變化情況和不同視頻序列復(fù)雜度的區(qū)別。若DMAD(i,j)=0.18,則當(dāng)前基本單元為具有中等復(fù)雜度的基本單元,此時(shí)β(i,j)=0.5;當(dāng)視頻復(fù)雜度降低時(shí),DMAD(i,j)減小,β(i,j)也會(huì)相應(yīng)減?。环粗嗳?。而當(dāng)DMAD接近或大于0.36時(shí),即認(rèn)為視頻復(fù)雜度很高,或發(fā)生場景變換,此時(shí)β(i,j)取值為0.9?;?beta;(i,j),將式(5)改進(jìn)為
在實(shí)際編碼時(shí),由于在編碼前無法得到當(dāng)前基本單元的DMAD,所以用當(dāng)前基本單元的PMAD來計(jì)算其DMAD的近似值
DMAD(i,j)≈|PMD(i,j)-MAD(i-1,j)| (8)
3 理想的比特?cái)?shù)消耗情況
JVT-H017在幀內(nèi)比特?cái)?shù)消耗量超過幀預(yù)測值后,采用簡單增加量化參數(shù)的方法來減少后續(xù)基本單元的比特?cái)?shù)消耗,但在此之前并無其它的比特?cái)?shù)限制措施。因此提出一種視頻編碼的理想條件,并用這種理想條件下的比持?jǐn)?shù)消耗情況來修正超過幀預(yù)測值前基本單元的比特?cái)?shù)分配。假設(shè)待編碼幀的比特?cái)?shù)預(yù)測完全準(zhǔn)確,剛好等于該幀實(shí)際比特?cái)?shù)消耗量,幀內(nèi)各基本單元的MAD均相等,且消耗比特?cái)?shù)相同,則該幀比特?cái)?shù)消耗情況如圖1所示。
圖1中,Nunit是幀內(nèi)基本單元總數(shù),TRi(j)表示第i幀中第j個(gè)基本單元編碼前該幀剩余比特?cái)?shù),設(shè)首基本單元的序號(hào)為1,那么易知TRi(1)即為當(dāng)前幀比特?cái)?shù)預(yù)測值,TRi(1)/Nunit為上述理想狀況下一個(gè)基本單元所消耗的比特?cái)?shù)(各基本單元消耗比特?cái)?shù)相同)。
根據(jù)圖1易知,第i幀中第j個(gè)基本單元編碼完成后該幀消耗的總比特?cái)?shù)的理想值與實(shí)際值的差Di(j)可由式(9)表示。
其中,TAi(k)表示編碼第i幀中第k個(gè)基本單元實(shí)際消耗的比特?cái)?shù)。
當(dāng)Di(j)0時(shí),即認(rèn)為該幀比特?cái)?shù)消耗過多,此時(shí)適當(dāng)增加量化參數(shù)(仿真中為增加1)以更強(qiáng)的控制后續(xù)基本單元的比特?cái)?shù)消耗。
4 仿真結(jié)果與分析
文中以H.264官方驗(yàn)證軟件JM13.2作為實(shí)驗(yàn)平臺(tái),對(duì)提出的基本單元層碼率控制方法進(jìn)行仿真。測試序列為QCIF格式,共編碼150幀,首幀為I幀,其余為P幀,不考慮跳幀,幀率為15幀每秒,I幀和首P幀的初始量化步長的計(jì)算采用默認(rèn)方法。分別對(duì)復(fù)雜度相差較大的akiyo,earphone,foreman和mobile序列進(jìn)行編碼測試。
表1所示為在24 kbits/s,48 kbits/s和64 kbits/s 3種編碼碼率下對(duì)上述序列進(jìn)仃編碼的結(jié)果。從表1可見,除了在24kbits/s碼率下編碼mobile 序列外,采用本文算法編碼的平均峰值信噪比均要高于JM軟件和[6]中提出的算法,最大可比JM提高0.49dB,比[6]中的算法提高0,18dB。碼率控制的結(jié)果也更為精確,JM13.2的實(shí)際碼率與預(yù)定碼率的平均誤差是0.37%,[6]中算法的碼率平均誤差是0.32%,而本文算法的碼率平均誤差是0.28%,可見本文算法更符合預(yù)定的碼率要求。
為了驗(yàn)證算法在場景變換時(shí)的編碼性能,在48 kbits/s碼率下,用3種方法分別對(duì)carphone序列和akiyo序列的混合序列C55A55進(jìn)行編碼測試,混合序列在第55幀發(fā)生場景變換。編碼結(jié)果如圖2和圖3所示。由圖2可見,本文提出的方法在場景變換幀及后續(xù)幀均取得了更高的編碼信噪比,提高了新場景的編碼質(zhì)量。
圖3對(duì)3種碼率控制方法在編碼過程中的緩沖區(qū)狀態(tài)進(jìn)行了對(duì)比。從圖3可見,文中方法比JM更接近目標(biāo)緩沖區(qū)占用度,并且在場景變換時(shí)有效降低了緩沖區(qū)占用度,在編碼器緩沖區(qū)尺寸有限的情況下,為新場景提供丁更多可用編碼資源。
5 結(jié)論
文中提出了一種復(fù)雜度自適應(yīng)的基本單元層碼率控制算法。該算法利用DMAD參數(shù)來判斷視頻復(fù)雜度,對(duì)JVT-H017的比特?cái)?shù)分配方法進(jìn)行了改進(jìn),并利用理想的基本單元層編碼情況來對(duì)基本單元比特?cái)?shù)分配進(jìn)行修正。仿真表明,該方法在一般情況和場景變換時(shí)的編碼質(zhì)量均高于JM模型,平均峰值信噪比最大可提高0.49 dB,實(shí)際編碼碼率更接近預(yù)定要求。
評(píng)論