張 英,魏忠義,石 娟
(西安工程大學(xué) 電子信息學(xué)院,陜西 西安 710048)
H.264[1]是最新的國(guó)際視頻編碼標(biāo)準(zhǔn),它不僅使視頻壓縮比以往標(biāo)準(zhǔn)有明顯提高,而且具有良好的網(wǎng)絡(luò)親和性,特別是對(duì) IP互聯(lián)網(wǎng)、無(wú)線移動(dòng)網(wǎng)等易誤碼、易阻塞、QoS不易保證的網(wǎng)絡(luò)視頻傳輸性能有明顯的改善。因此,H.264已成為現(xiàn)今圖像壓縮研究的一個(gè)熱點(diǎn)。同時(shí),碼率控制作為視頻壓縮算法的一個(gè)重要方面,也引起了研究者的很大重視。
在 H.264碼率控制經(jīng)典算法里,JVT-H017[2]因?qū)?shí)際碼率和PSNR的控制更加準(zhǔn)確,并能更好地逼近限制的碼率,而與JVT-G012[3]一起成為目前最常用的H.264碼率控制算法。但JVT-H017算法仍然存在明顯的不足[4]: 同時(shí)引用率失真(R-D)模型和MAD線性模型會(huì)增加編碼的計(jì)算量;算法中圖像組GOP(Group of Pictures)碼率的分配方法和HRD機(jī)制限制了前后質(zhì)量平緩度的進(jìn)一步提高;編碼后的跳幀策略仍然采用類似于MPEG-4Q2中的簡(jiǎn)單方法,嚴(yán)重影響了運(yùn)動(dòng)劇烈圖像的質(zhì)量。本文在介紹JVT-H017碼率控制算法的基礎(chǔ)上,提出了一種利用運(yùn)動(dòng)復(fù)雜度作為跳幀判別的算法,合理地分配緩存空間給運(yùn)動(dòng)劇烈的幀,較好地保留了圖像的細(xì)節(jié),進(jìn)一步提高了圖像的質(zhì)量。
JVT-H017碼率控制策略包含 3個(gè)層次:GOP層、幀層和基本單元層。其中基本單元層指的是同一幀中一組連續(xù)的宏塊,每個(gè)基本單元層至少包含一個(gè)宏塊。
GOP層碼率控制主要任務(wù)是計(jì)算當(dāng)前GOP中剩余圖像幀的比特?cái)?shù),初始化即時(shí)解碼刷新(IDR)和第一個(gè)存儲(chǔ)幀的量化參數(shù)。當(dāng)?shù)趇個(gè)GOP的第j幀被編碼時(shí),當(dāng)前GOP中剩余幀的比特?cái)?shù)計(jì)算如下:
式中,f是預(yù)定義的編碼幀率;Ni是第 i個(gè) GOP的總幀數(shù);Ri(j)、Vi(j)分別是當(dāng)?shù)?i個(gè) GOP的第 j幀被編碼時(shí),當(dāng)前可用的比特率和虛擬緩沖(buffer)的占用率;bi(j-1)是第j-1幀的比特?cái)?shù)。
當(dāng)前幀為IDR幀或第i個(gè)GOP的第1個(gè)存儲(chǔ)幀時(shí),則需初始量化參數(shù)QPi(1):
式中,NP(i-1)是第i-1個(gè)GOP的已存儲(chǔ)幀總數(shù),SumPQP(i-1)
是所有已存儲(chǔ)幀的平均幀量化參數(shù)和。
幀層的碼率控制包括編碼前和編碼后兩個(gè)階段。
1.2.1 編碼前階段
編碼階段是計(jì)算每一幀的量化參數(shù)。對(duì)于存儲(chǔ)幀和非存儲(chǔ)幀,方法是不一樣的。本文介紹的是只有存儲(chǔ)幀的情況。這一過(guò)程分兩個(gè)步驟完成:
(1)確定每個(gè)幀的目標(biāo)碼率
①確定當(dāng)前GOP中每個(gè)存儲(chǔ)幀的目標(biāo)碼率
每一個(gè)存儲(chǔ)幀的目標(biāo)緩沖由第一個(gè)IDR或存儲(chǔ)幀的編碼比特和平均復(fù)雜度得到。在編碼完第i個(gè)GOP的第1個(gè)存儲(chǔ)幀后,目標(biāo)緩沖的初始值為:
后續(xù)存儲(chǔ)幀的目標(biāo)緩沖計(jì)算為:
②計(jì)算當(dāng)前幀的目標(biāo)比特
第i個(gè)GOP中第j幀的目標(biāo)比特的分配是根據(jù)目標(biāo)緩存、幀率、可用信道帶寬以及實(shí)際的緩存占用率進(jìn)行計(jì)算的:
其中:
為了符合假定解碼器HRD的要求,目標(biāo)比特的定義為:
式中,Zi(j)、Ui(j)分別是HRD的上下限。在沒(méi)有 B幀的情況下,β=0.5;否則,β=0.9。
(2)計(jì)算量化參數(shù)和執(zhí)行率失真優(yōu)化(RDO)
首先采用式(9)計(jì)算與目標(biāo)比特關(guān)聯(lián)的量化步長(zhǎng),相應(yīng)的量化參數(shù)QPi(j)由量化步長(zhǎng)和高級(jí)視頻編碼(AVC)的量化參數(shù)計(jì)算得到:
式中,mh,i(j)是所有頭信息和運(yùn)動(dòng)矢量的編碼比特和,c1、c2是系數(shù)。為了保證連續(xù)幀之間的平滑性,量化參數(shù)QPi(j)調(diào)整為:
1.2.2 編碼后階段
編碼一幀以后,系數(shù) a1、a2及 c1、c2采用類似 MPEG-4 Q2部分的線性回歸模型進(jìn)行更新。在此過(guò)程中,實(shí)際編碼產(chǎn)生的比特加入到緩存中。為保證更新后的緩存占用率不要過(guò)高,采用類似MPEG-4 Q2部分的跳幀策略進(jìn)行調(diào)整。
基本單元碼率控制和幀層碼率控制的方法類似,為每個(gè)基本單元預(yù)測(cè)MAD,計(jì)算目標(biāo)比特,用二次R-D模型計(jì)算基本單元層的QP時(shí)需考慮:(1)對(duì)當(dāng)前幀的第一個(gè)基本單元,QP需設(shè)為前一幀所有基本單元量化參數(shù)的平均值;(2)當(dāng)前幀中還有未編碼的基本單元,而分配給它們的剩余比特?cái)?shù)卻小于零。這時(shí),當(dāng)前基本單元的QP應(yīng)相應(yīng)地增大;(3)其他情況下,通過(guò)二次R-D模型來(lái)獲得QP。
在實(shí)際的編碼中,如果每個(gè)GOP都超過(guò)了預(yù)先分配給它的比特?cái)?shù),這時(shí)緩沖就會(huì)溢出,從而導(dǎo)致跳幀現(xiàn)象,使得圖像的質(zhì)量下降[4]。JVT-H017碼率控制算法采用的跳幀方法仍是MPEG-4 Q2中的簡(jiǎn)單方法,即只是簡(jiǎn)單地設(shè)置緩存區(qū)占有度上限達(dá)到80%時(shí),就執(zhí)行跳幀。(同樣在以往的跳幀控制算法中[5],一般都只是將緩存的上限定為80%來(lái)作為跳幀的依據(jù),當(dāng)緩存容量超過(guò)80%時(shí),將此幀定為跳幀)。相反,當(dāng)緩存容量低于25%時(shí),也將此幀定為跳幀,但是這樣處理沒(méi)有充分考慮到簡(jiǎn)單的跳幀會(huì)影響運(yùn)動(dòng)劇烈的圖像的細(xì)節(jié)表現(xiàn),導(dǎo)致圖像質(zhì)量嚴(yán)重下降。于是參考文獻(xiàn)[6]根據(jù)高運(yùn)動(dòng)復(fù)雜度對(duì)應(yīng)高比特?cái)?shù)、低運(yùn)動(dòng)復(fù)雜度對(duì)應(yīng)低比特?cái)?shù)這一比特分配法則,利用過(guò)濾掉運(yùn)動(dòng)平穩(wěn)的幀而保存運(yùn)動(dòng)劇烈的幀,并為運(yùn)動(dòng)劇烈的幀分配更多緩存空間的思想,提出了用前一幀預(yù)測(cè)得到的比特?cái)?shù)與前面已編碼幀的實(shí)際比特?cái)?shù)的平均值的比值作為衡量跳幀的標(biāo)準(zhǔn)。但參考文獻(xiàn)[5]并未考慮到出現(xiàn)比特?cái)?shù)較多和比特?cái)?shù)較少的幀交錯(cuò)的幀序列這一情況。若前一幀比特?cái)?shù)較少,當(dāng)前幀比特?cái)?shù)較多,則得到的比值偏??;反之,得到的比值偏大??梢?jiàn)用此方法作為跳幀的判斷方法,準(zhǔn)確率并不高。所以本文算法從圖像復(fù)雜度算法本身入手,并考慮到相鄰幀之間具有很強(qiáng)的相關(guān)性,重新定義一個(gè)跳幀判別方法,力求得到的跳幀判別方法能較準(zhǔn)確地優(yōu)化圖像質(zhì)量。
為了更好地適應(yīng)AVS編碼器的實(shí)時(shí)應(yīng)用,減少B幀延時(shí)帶來(lái)的影響,本文只考慮有I幀、P幀的圖像格式。由于I幀編碼需要較多的比特?cái)?shù),它將占據(jù)多個(gè)幀間間隔傳輸,因此,本文為了減小緩沖延時(shí),緊鄰I幀的前兩個(gè)P幀仍按原算法進(jìn)行跳幀。即從第3個(gè)P幀開(kāi)始定義當(dāng)前P幀的運(yùn)動(dòng)復(fù)雜度因子ci:
式中,Wp,i(j-1)表示當(dāng)前幀的前1個(gè) P幀的實(shí)際復(fù)雜度,Wp,i(j-2)表示當(dāng)前幀前面第 2個(gè) P 幀的實(shí)際復(fù)雜度,Wp,i(k)為 前 面 已 編 碼 幀 的 實(shí) 際 復(fù) 雜 度 ,Wp,i(j)=bp,i(j)×QPp,i(j),a1、a2是經(jīng)驗(yàn)值。
GOP結(jié)構(gòu)為 IPPP,即第一幀為I幀,后面的為P幀。設(shè)定緩存容量的百分比為w1、w2(w1
表1 針對(duì)foreman本算法與其他兩種算法的信噪比的比較
表2 針對(duì) mobile本算法與其他兩種算法的信噪比的比較
為了對(duì)算法進(jìn)行分析,在JM8.6上對(duì)本跳幀算法進(jìn)行仿真。實(shí)驗(yàn)中分別使用QCIF序列foreman和CIF序列mobile,共編碼 100幀,GOP的結(jié)構(gòu)是 IPPP…IPPP…,幀內(nèi)編碼刷新周期為20幀,第一幀的量化步長(zhǎng)為28,a=0.6,b=0.8,w1=60%,w2=70%,a1=3/2,a2=1/2。 在 JM8.6現(xiàn)有的碼率控制算法的基礎(chǔ)上,分別對(duì)跳幀策略與參考文獻(xiàn)[2]和參考文獻(xiàn)[5]中的跳幀策略進(jìn)行測(cè)試,截取其中的20~40幀進(jìn)行顯示。比較3種算法的PSNR。在相同的條件下,本文提出的跳幀算法相對(duì)其他兩個(gè)跳幀算法有所改進(jìn),更加準(zhǔn)確地做到了跳過(guò)平穩(wěn)運(yùn)動(dòng)的圖像,保留運(yùn)動(dòng)劇烈的圖像這準(zhǔn)則。從表1、表2可以看出,本文提出的跳幀算法,使信噪比有所提高,優(yōu)化了圖像的質(zhì)量。
本文針對(duì)JVT-H017碼率控制算法中跳幀策略仍然采用類似MPEG-4 Q2的簡(jiǎn)單方法這一缺點(diǎn),提出的跳幀算法合理地利用了圖像運(yùn)動(dòng)復(fù)雜度這一尺度來(lái)作為判別標(biāo)準(zhǔn),與參考文獻(xiàn)[2]的(JVT-H017)相比,使得圖像信噪比有所提升,優(yōu)化了圖像質(zhì)量。但是,本算法并沒(méi)有考慮到出現(xiàn)場(chǎng)景切換和B幀存在的圖像序列的跳幀問(wèn)題,所以將來(lái)的工作將是在此算法的基礎(chǔ)上,提出一種更好的優(yōu)化算法,使其能提高不同圖像序列的圖像質(zhì)量。
[1]余兆明,查日勇,黃磊,等.圖像編碼標(biāo)準(zhǔn) H.264技術(shù)[M].北京:人民郵電出版社,2005.
[2]MA Si Wei, LI Zheng Guo, WU Feng, et al.JVT-H017-2003 proposed draft of adaptive rate control[S].2003.
[3]MA Si Wei, LI Zheng Guo, WU Feng, et al.JVT-G012-2003 proposed draft of adaptive rate control[S].2003.
[4]李記苗,劉彥明,高峰.H.264碼率控制及其改進(jìn)策略[J].計(jì)算機(jī)與數(shù)學(xué)工程,2006(6):52-54.
[5]鄭從卓,李均利,陳剛,等.AVS實(shí)時(shí)編碼的VBR碼率控制[J].計(jì)算機(jī)程,2009(35):240-242.
[6]周駿華,石旭剛,宋瑋.一種基于運(yùn)動(dòng)復(fù)雜度的新的 H.264碼率控制算法[J].浙江工業(yè)大學(xué)學(xué)報(bào),2006(6):672-675.