范桂真,楊 靜,王 超
(1.上海海事大學(xué) 信息工程學(xué)院,上海201306;2.浙江工商大學(xué) 信息與電子工程學(xué)院,浙江杭州310018)
相比于早先的標(biāo)準(zhǔn),H.264/AVC視頻壓縮標(biāo)準(zhǔn)有了顯著的改進(jìn),在相同的視覺質(zhì)量下能節(jié)省約50%的比特率[1]。碼率控制是視頻編碼器的一個(gè)重要部分,碼率控制的目的是:通過動(dòng)態(tài)地調(diào)整編碼參數(shù),控制單位時(shí)間內(nèi)的編碼視頻流的數(shù)據(jù)量,在盡可能小的失真度下使產(chǎn)生的碼流匹配當(dāng)前帶寬。由于視頻序列的運(yùn)動(dòng)程度有較大差異、圖像各幀之間復(fù)雜度也不盡相同,導(dǎo)致其壓縮解碼后的碼流輸出產(chǎn)生很大波動(dòng),因此需要采取適當(dāng)?shù)拇a率控制策略將其限定在合理的范圍內(nèi),以滿足實(shí)時(shí)視頻通信的需要。
目前有各種各樣的碼率控制策略,流行的主要有MPEG-2的 TM5,H.263的TMN8,MPEG-4的VM8以及在這些基礎(chǔ)上發(fā)展起來(lái)的基于 H.264的 JVT-G012[2],其他的碼率控制策略主要是對(duì)這些模型做一些改進(jìn)。文獻(xiàn)[3]針對(duì)H.264/AVC碼率控制算法沒有采取有效的策略應(yīng)對(duì)場(chǎng)景切換進(jìn)行了改進(jìn)。文獻(xiàn)[4]針對(duì)H.264/AVC碼率控制算法初始量化參數(shù)的計(jì)算太過粗略進(jìn)行了改進(jìn)。目前也有大量學(xué)者對(duì)圖像復(fù)雜度的度量方式進(jìn)行了研究,比較經(jīng)典的有:Zheng在文獻(xiàn)[5]中提出用當(dāng)前幀MAD與已編碼幀平均MAD的比值作為圖像復(fù)雜度度量手段,該方法對(duì)于運(yùn)動(dòng)程度緩慢的序列表現(xiàn)較好,對(duì)于運(yùn)動(dòng)劇烈的序列,該比特分配方案效果不是很理想。文獻(xiàn)[6]提出了使用差分直方圖度量圖像復(fù)雜度,但對(duì)于不同圖像復(fù)雜度的序列,閾值的選擇具有不確定性。Jiang在文獻(xiàn)[7]中沿用了文獻(xiàn)[5]的方法并結(jié)合PSNR來(lái)衡量圖像的復(fù)雜度,該方法對(duì)于運(yùn)動(dòng)劇烈的序列效果也較好,它在分配目標(biāo)比特分配的時(shí)候考慮了已編碼幀和當(dāng)前幀的信息,目標(biāo)比特分配更加準(zhǔn)確,但該算法在計(jì)算PSNR時(shí)引入了巨大計(jì)算量。文獻(xiàn)[8]提出了基于原始圖像亮度信息的復(fù)雜度度量手段,灰度直方圖能夠很好地表示圖像復(fù)雜度,但使用幀間直方圖差值作為圖像復(fù)雜度度量手段,忽略了其位置信息,對(duì)于圖像的局部運(yùn)動(dòng)不敏感。因此,本文提出了一種基于線性加權(quán)的圖像塊亮度直方圖的復(fù)雜度度量手段,對(duì)視頻序列的局部運(yùn)動(dòng)更加敏感,對(duì)圖像的幀復(fù)雜度估計(jì)更加準(zhǔn)確。仿真結(jié)果表明,改進(jìn)算法可以更加精確地控制碼率,序列平均PSNR值比 JVT-G012算法提高0.3 dB,比文獻(xiàn)[8]算法提高 0.22 dB,編碼質(zhì)量得到明顯提高。
JVT-G012碼率控制算法主要分為三部分:1)GoP層碼率控制;2)幀層碼率控制;3)基本單元層碼率控制。從3個(gè)層次進(jìn)行碼率控制,能夠更加準(zhǔn)確地控制輸出碼率,獲得高質(zhì)量平滑的圖像質(zhì)量。
GoP層碼率控制的主要任務(wù)是計(jì)算每一個(gè)GoP中未編碼幀的剩余總比特?cái)?shù),并進(jìn)一步計(jì)算每一個(gè)GoP的初始量化參數(shù)。
幀層碼率控制主要分為兩步進(jìn)行:1)根據(jù)圖像組的目標(biāo)緩沖級(jí)別、預(yù)定的幀率、實(shí)際緩沖占有率以及剩余比特?cái)?shù)確定當(dāng)前幀的目標(biāo)比特?cái)?shù)。2)利用二次R-D模型計(jì)算QP并進(jìn)行率失真優(yōu)化。因雙向預(yù)測(cè)(B幀)運(yùn)算量較大,本文的碼率控制算法不涉及B幀。
首先初始化目標(biāo)緩存。在編碼第一個(gè)P幀后,目標(biāo)緩存重置為
式中:Bc(2)表示編碼第1個(gè)P幀后的實(shí)際緩沖占有率。其他幀目標(biāo)緩存為
式中:Tbl(j)表示編碼第j幀后的目標(biāo)緩沖;Np是圖像組中P幀總數(shù);Tbl(2)是目標(biāo)緩沖的初始值;Bs是緩沖區(qū)大小。接下來(lái)需要計(jì)算目標(biāo)比特?cái)?shù)。
當(dāng)只考慮目標(biāo)緩沖級(jí)別、幀率、帶寬以及實(shí)際緩沖占有度時(shí),第j幀的目標(biāo)比特為
式中:u(j)是信道帶寬;Fr是預(yù)定的幀率;Bc(j)表示編碼第j幀后的實(shí)際緩沖占有度;γ是常數(shù),一般取0.5。
將剩余比特考慮進(jìn)去時(shí),目標(biāo)比特?cái)?shù)為
式中:Nr是當(dāng)前GoP中未編碼的P幀數(shù);Rr(j)為當(dāng)前GoP中剩余的比特?cái)?shù)。最終的目標(biāo)比特?cái)?shù)由式(3)和式(4)的線性加權(quán)得到
式中:β是常量,一般取0.5(無(wú)B幀的情況)。最后計(jì)算量化參數(shù)并進(jìn)行率失真優(yōu)化。
一個(gè)基本單元是由連續(xù)的若干個(gè)宏塊組成的?;締卧髸r(shí),碼率波動(dòng)大,但得到的圖像質(zhì)量較平穩(wěn),反之,碼率波動(dòng)小,但幀間圖像質(zhì)量波動(dòng)大。因此,在基本單元層碼率控制中,要選擇合適的大小,使得碼率控制精度與圖像質(zhì)量之間達(dá)到一定的平衡。
本文提出一種線性加權(quán)的基于圖像塊亮度信息的復(fù)雜度度量手段BHOD,它與視頻序列的真實(shí)復(fù)雜度之間有著很強(qiáng)的線性關(guān)系,因此它不像MAD具有預(yù)測(cè)誤差。BHOD不像一般的基于原始圖像亮度信息的復(fù)雜度度量手段,因是基于宏塊的,所以能夠更好地體現(xiàn)幀像素的位置信息。BHOD以塊為單位計(jì)算亮度直方圖差值,然后再整幀求和,BHOD表達(dá)式為[9]
式中:h(b,i,fn)和h(b,i,fm)分別表示第fn和fm幀中第b個(gè)宏塊亮度為i的像素點(diǎn)數(shù);q為圖像的最大灰度級(jí),當(dāng)亮度值以8比特位量化時(shí),q值為256;為一幀中包含的宏塊數(shù)。與文獻(xiàn)[10]相比,它可以兼顧不同復(fù)雜度幀,使得低復(fù)雜度幀不為0,對(duì)高復(fù)雜度幀的敏感性增強(qiáng)。為了更直觀地反應(yīng)圖像復(fù)雜度,定義為
式中:BHOD(j)是第j幀的BHOD值;BHOD(l)表示同一GoP中已編碼幀的BHOD平均值。在求已編碼幀的BHOD平均值時(shí)采用了直接求平均的方法,當(dāng)GoP中已編碼幀的復(fù)雜度情況類似時(shí),效果較好,但若GoP的圖像復(fù)雜度幅度變化較大,效果不那么理想。因此,本文使用加權(quán)求和的方法求BHOD平均值,以獲得更加精確的相對(duì)復(fù)雜度度量因子,進(jìn)一步定義為
式中BHODC是采用加權(quán)的方式求出的BHOD平均值,對(duì)局部運(yùn)動(dòng)變換劇烈的序列更加準(zhǔn)確,其表達(dá)式為
式中:ml為加權(quán)系數(shù),其值計(jì)算如下
用此方法求得的復(fù)雜度因子更全面地考慮了圖像的局部復(fù)雜度分布,對(duì)于局部運(yùn)動(dòng)劇烈的視頻序列,計(jì)算結(jié)果更準(zhǔn)確。BHODratio值將作為幀層比特分配的加權(quán)系數(shù)。
根據(jù)以上分析,本文對(duì)式(4)中剩余比特分配進(jìn)行調(diào)整,比特分配偽代碼為
其中:Nr和Rr(j)分別表示當(dāng)前GoP中未編碼的P幀數(shù)和剩余的比特?cái)?shù);BHODratio的范圍是通過對(duì)大量QCIF測(cè)試序列的實(shí)驗(yàn)得到的,將其引入到幀層P幀目標(biāo)比特的分配,對(duì)復(fù)雜度較大的幀分配較多的目標(biāo)比特?cái)?shù),反之,分配較少的目標(biāo)比特?cái)?shù)。通過這一策略,編碼比特得到合理利用。
最終分配的目標(biāo)比特?cái)?shù)f(ni,j)仍由式(5)確定,(j)的值是經(jīng)過上述比特分配方案調(diào)整后的數(shù)值。
得到目標(biāo)比特后,通過二次R-D模型可求得量化參數(shù)
式中:a1,a2是模型參數(shù);f(ni,j)是當(dāng)前幀分配的目標(biāo)比特?cái)?shù);MADcd是通過線性預(yù)測(cè)模型得到的預(yù)測(cè)MAD值;Th(j)是用于頭信息等非紋理編碼所用的比特?cái)?shù)。
為得到更加精確的量化參數(shù),本文進(jìn)一步利用已編碼幀的信息[11]進(jìn)行量化參數(shù)的調(diào)整,量化參數(shù)調(diào)整因子為
式中:b(ni,j-1)和f(ni,j-1)分別為前一幀的實(shí)際編碼比特?cái)?shù)和分配的目標(biāo)比特?cái)?shù);Δ值可以反映目標(biāo)比特分配的準(zhǔn)確性,Δ值小于1,說明前一幀分配了過多的目標(biāo)比特?cái)?shù),后面幀分配的比特?cái)?shù)減少,當(dāng)前幀的目標(biāo)比特?cái)?shù)也減少,因此由二次R-D模型計(jì)算的量化級(jí)變大,所以此時(shí)應(yīng)該減小當(dāng)前幀的量化參數(shù)。反之,應(yīng)該增大當(dāng)前幀的量化參數(shù)。
通過大量實(shí)驗(yàn)得到的量化參數(shù)調(diào)整如下:
1)若是當(dāng)前GoP的前兩個(gè)P幀,因第一個(gè)P幀要作為后面的參考幀,并且沒有參與比特的分配,前兩個(gè)P幀的量化參數(shù)保持不變?。j
2)GoP其他P幀的量化參數(shù)調(diào)整如下
為驗(yàn)證改進(jìn)的幀層算法的有效性,在VS2010上基于JM8.6對(duì)本文的算法進(jìn)行了仿真,并與JVT-G012算法和基于圖像亮度直方圖的算法[8]作比較。仿真采用的序列為標(biāo)準(zhǔn)QCIF序列,參數(shù)設(shè)置如下:mobile序列幀率為15 f/s(幀/秒),其他序列為30 f/s,目標(biāo)碼率為64 kbit/s,I幀與第一個(gè)P幀的初始QP為28,設(shè)置一幀為一個(gè)基本單元,不采用B幀,其他參數(shù)配置3種算法保持相同。仿真結(jié)果見表1和表2。
表1 參考算法與改進(jìn)算法碼率仿真結(jié)果 kbit/s
表2 參考算法與改進(jìn)算法PSNR及標(biāo)準(zhǔn)差仿真結(jié)果
從表1的仿真數(shù)據(jù)可以看出,與JVT-G012算法和文獻(xiàn)[8]中算法相比,本文算法能夠更精確的控制碼率。本文算法的碼率與目標(biāo)碼率差值在0.5 kbit/s以內(nèi),更接近于目標(biāo)碼率,在碼率控制精確度上有明顯的優(yōu)越性。從表2的仿真數(shù)據(jù)可以看出,本文算法的PSNR平均比 JVT-G012中大約提高0.3 dB,比文獻(xiàn)[8]中算法大約提高0.22 dB,圖像的整體質(zhì)量得到提高。Y分量的PSNR標(biāo)準(zhǔn)差能夠反映圖像的平滑度,本文算法PSNR值的標(biāo)準(zhǔn)差比參考算法明顯降低,因此,圖像序列更加的平穩(wěn),增加了圖像的主觀質(zhì)量。
圖1至圖4為hall序列和foreman序列每幀圖像在本文算法與參考算法中PSNR和緩沖占有度對(duì)比圖。
圖1 hall序列PSNR對(duì)比圖
圖2 hall序列緩沖占有度對(duì)比圖
從對(duì)比圖可以看出,與參考算法相比:
對(duì)于圖像紋理較簡(jiǎn)單和運(yùn)動(dòng)較平緩的hall序列,采用本文提出的內(nèi)容復(fù)雜度度量算法能夠很好地檢測(cè)出序列的運(yùn)動(dòng)劇烈程度,對(duì)局部運(yùn)動(dòng)劇烈的序列的復(fù)雜度進(jìn)行了準(zhǔn)確估計(jì),圖像的整體質(zhì)量更加平滑。
對(duì)于存在較為快速運(yùn)動(dòng)的foreman序列,本文的算法也有很好的效果,圖像每幀緩沖占有度降低,視頻序列的平均PSNR提高,并且平滑度增加,而JVT-G012與文獻(xiàn)[8]算法對(duì)序列的運(yùn)動(dòng)情況不敏感,對(duì)于PSNR值的快速下降沒有有效的控制。此外,在視頻序列的最后幾幀中,JVT-G012算法中圖像編碼失真較大,本文算法在序列結(jié)尾幾幀圖像質(zhì)量明顯改善。
圖3 foreman序列PSNR對(duì)比圖
圖4 foreman序列緩沖占有度對(duì)比圖
碼率控制一直是視頻編碼研究中的熱點(diǎn)問題,在經(jīng)典的碼率控制基礎(chǔ)上,許多改進(jìn)的碼率控制算法被提出。本文提出的BHOD復(fù)雜度度量手段能夠準(zhǔn)確地反映圖像的真實(shí)復(fù)雜度情況,尤其是對(duì)序列的局部信息更加敏感,從而使得實(shí)際編碼碼率更接近目標(biāo)碼率,平均PSNR也得到了明顯提高。此外,本算法不改變H.264碼率控制方案的整體架構(gòu),因此基本上沒有增加算法復(fù)雜度。通過實(shí)驗(yàn)仿真可以看出,本文算法在視頻圖像質(zhì)量、碼率控制精度、緩沖區(qū)占有度等方面體現(xiàn)了優(yōu)越性能,能夠更好地實(shí)現(xiàn)視頻的高質(zhì)量實(shí)時(shí)傳輸。
:
[1] RICHARDSON I.H.264 and MPEG video compression:video coding for next generation mltimedia[M].UK:John Wiley & Sons Ltd.,2003.
[2] LI Z,PAN F,LIM K,et al.Adaptive basic unit layer rate-control for JVT:Document JVT-G012[S].2003.
[3] CHEN Xiao,LU Feifei.Adaptive rate control algorithm for H.264/AVC considering scene change[J].Mathematical Problems in Engineering,2013,2013(6):1-6.
[4] SU Linghua,GUO Ying,WANG Min,et al.An improved method for initializing quantization parameter in H.264/AVC rate control[C]//Proc.Intelligent Science and Intelligent Data Engineering.[S.l.]:Spring Verlag Berlin,2012:793-744.
[5] ZHENG Yayu,ZHOU Fan,LUO Juan,et al.A novel rate control method for H.264 based on frame complexity and importance[J].IEEE Trans.Consumer Electronics,2008,54(2):614-618.
[6] SU Linghua,GUO Ying.A novel H.264 rate control algorithm for scene transition video[C]//Proc.ACAI 2012.[S.l.]:IEEE Press,2012:220-223.
[7]呂振斌,王惠南.一種H.264基本單元層的碼率控制算法[J].電視技術(shù),2009,33(1):45-47.
[8] 韓崢,唐昆,崔慧娟.基于H.264的碼率控制算法[J].清華大學(xué)學(xué)報(bào):自然科學(xué)版,2008,48(1):59-61.
[9]楊靜.H.264低碼率實(shí)時(shí)視頻傳輸中的比特優(yōu)化分配問題研究[D].上海:上海交通大學(xué),2006.
[10] XUAN J,CHAU L P.Improved frame level MAD prediction and bit allocation scheme for H.264/AVC rate control[C]//Proc.ISCAS 2007.[S.l.]:IEEE Press,2007:3639-3642.
[11]繆廣忠,林其偉,饒琴.一種簡(jiǎn)單有效的幀層碼率控制策略[J].微計(jì)算機(jī)應(yīng)用,2009,30(9):34-38.