吳仲謀,梅順良
(清華大學(xué) 電子工程系,北京 100084)
將待編碼的視頻圖像序列看成一個(gè)整體,視頻序列中每幅圖像的內(nèi)容在時(shí)間域上往往和前面或后面出現(xiàn)的圖像序列有很大的相關(guān)性。要想使這段視頻序列的編碼效率逼近其高階熵,視頻序列的幀間預(yù)測(cè)方式設(shè)計(jì)成為很重要的因素。
幀間預(yù)測(cè)方式規(guī)定了圖像序列的編解碼順序,定義了每幅圖像在編解碼過程中采用哪些參考圖像作運(yùn)動(dòng)補(bǔ)償。幀間預(yù)測(cè)方式主要包括兩方面:參考圖像的數(shù)目和預(yù)測(cè)結(jié)構(gòu)。通過幀間預(yù)測(cè)方式的優(yōu)化往往能較高地提高視頻編碼效率,但其是以增加編解碼器的時(shí)延和緩存作為代價(jià)的。
在AVS標(biāo)準(zhǔn)中,參考圖像的數(shù)目只有2幀,預(yù)測(cè)結(jié)構(gòu)可以是IPP結(jié)構(gòu)、IB…BP結(jié)構(gòu)[1]。在H.264/AVC標(biāo)準(zhǔn)中,參考圖像的數(shù)目最多可達(dá)到15幀,預(yù)測(cè)結(jié)構(gòu)可以是IPP預(yù)測(cè)結(jié)構(gòu),IB…BP預(yù)測(cè)結(jié)構(gòu)及層次 B幀(Hierarchical B)預(yù)測(cè)結(jié)構(gòu)。
為了論述不同預(yù)測(cè)方式的編碼性能,下面從兩方面進(jìn)行表述:
1)相同預(yù)測(cè)結(jié)構(gòu)的前提下,參考圖像數(shù)目的變化帶來編碼增益的變化。Thomas Wiegand等在文章[2]提到:在H.263平臺(tái)上,相同預(yù)測(cè)結(jié)構(gòu)前提下,例如IPP預(yù)測(cè)結(jié)構(gòu)。對(duì)Foreman序列,采取多參考圖像技術(shù),在相同碼率情況下,圖像客觀質(zhì)量PSNR最多可以提高2 dB;對(duì)Mother-Daughter序列,采取多參考圖像技術(shù),在相同碼率情況下,圖像客觀質(zhì)量PSNR最多可以提高1.5 dB。
2)相同參考圖像數(shù)目前提下,不同預(yù)測(cè)結(jié)構(gòu)帶來編碼增益的變化。
在相同參考圖像數(shù)目前提下,以參考圖像為2幀為例,在H.264/AVC平臺(tái)上,相對(duì)于IPP預(yù)測(cè)結(jié)構(gòu),IB…BP預(yù)測(cè)結(jié)構(gòu)對(duì)大部分序列,相同碼率情況下,其圖像客觀質(zhì)量PSNR平均提高了1~2 dB左右。
在相同參考圖像數(shù)目前提下,以參考圖像為5幀為例,在H.264/AVC平臺(tái)上,Heiko Schwarz在文章[3]提到:相對(duì)于IB…BP預(yù)測(cè)結(jié)構(gòu),層次B幀預(yù)測(cè)結(jié)構(gòu)對(duì)大部分序列,相同碼率情況下,其圖像客觀質(zhì)量PSNR平均提高了1 dB左右。
為了進(jìn)一步提高視頻編碼效率,筆者對(duì)層次B幀預(yù)測(cè)結(jié)構(gòu)進(jìn)行研究發(fā)現(xiàn):針對(duì)不同運(yùn)動(dòng)特性的圖像序列,選擇不同圖像組大?。℅oP Size,采用符號(hào)SGoP)的層次 B幀預(yù)測(cè)結(jié)構(gòu)對(duì)其進(jìn)行編碼,編碼性能差異較大。因此對(duì)視頻序列采取自適應(yīng)圖像組大小的層次B幀預(yù)測(cè)結(jié)構(gòu)能夠進(jìn)一步提高視頻壓縮效率?;诖?,提出了基于層次B幀預(yù)測(cè)結(jié)構(gòu)的自適應(yīng)圖像組算法。
圖1給出了4級(jí)層次B幀預(yù)測(cè)結(jié)構(gòu)示意圖。在層次B幀預(yù)測(cè)結(jié)構(gòu)中,定義關(guān)鍵幀為:編碼順序在該幅圖像之前的圖像,解碼顯示順序也在該幅圖像之前,滿足此特點(diǎn)的該幅圖像即為關(guān)鍵幀。圖1中的第0幀和第8幀為關(guān)鍵幀,關(guān)鍵幀可以采用幀內(nèi)預(yù)測(cè)編碼或前向幀間預(yù)測(cè)編碼方式。定義時(shí)間上相鄰的兩個(gè)關(guān)鍵幀之間的圖像序列為1個(gè)圖像組(Group of Picture,GoP)。1個(gè)圖像組中包含的圖像幀數(shù)為GoP Size。按照此定義,圖1所示的4級(jí)層次B幀預(yù)測(cè)結(jié)構(gòu)的圖像組大小為8。
圖1 4級(jí)層次 B預(yù)測(cè)結(jié)構(gòu)示意圖
在層次B幀預(yù)測(cè)結(jié)構(gòu)中,兩個(gè)關(guān)鍵幀之間的B幀是分等級(jí)的。例如,在圖1中,顯示順序第4幀的B1圖像處于第1級(jí);顯示順序第2幀,第6幀的B2圖像處于第2級(jí);顯示順序第1幀,第3幀,第5幀,第7幀的B3圖像處于第3級(jí)。每個(gè)等級(jí)的B幀只能選擇等級(jí)比其低并且在時(shí)間上與其相鄰的圖像作為其參考圖像。圖1中標(biāo)示了不同等級(jí)的B幀參考與被參考的關(guān)系 (這里,圖1中每個(gè)B幀的參考圖像數(shù)目定義為2幀)。第1等級(jí)的B幀只能選擇關(guān)鍵幀 (第0幀和第8幀)作為其參考圖像;第2等級(jí)的B幀只能選擇比其等級(jí)低的圖像(如關(guān)鍵幀和第1等級(jí)的B幀)作為其參考圖像。如此類推,可得不同等級(jí)B幀的參考關(guān)系。
相對(duì)于IB…BP預(yù)測(cè)結(jié)構(gòu),層次B幀預(yù)測(cè)結(jié)構(gòu)由于充分利用了預(yù)測(cè)結(jié)構(gòu)的靈活性大大提高了視頻編碼效率。但是,筆者注意到:對(duì)不同運(yùn)動(dòng)特性的圖像序列,選擇不同圖像組大小的層次B幀預(yù)測(cè)結(jié)構(gòu)對(duì)其進(jìn)行編碼,編碼性能差異較大。表1給出具體實(shí)驗(yàn)數(shù)據(jù)。
表1 不同圖像組大小(SGoP)的編碼性能比較
表1中給出了常用碼率情況下,測(cè)試序列對(duì)應(yīng)不同圖像組大小的層次B幀預(yù)測(cè)結(jié)構(gòu)的編碼性能。從表1可見,對(duì)序列Paris.cif和Mobile.cif采用圖像組大小為32能取得較好的編碼性能。序列Bus.cif采用圖像組大小為8能取得較好的編碼性能,序列Crew.cif采用圖像組大小為4能取得較好的編碼性能。其中,對(duì)序列Mobile.cif,采用圖像組大小為32相對(duì)于圖像組大小為4,編碼性能要高0.4 dB。對(duì)序列Crew.cif,采用圖像組大小為32相對(duì)于圖像組大小為4,編碼性能則低1 dB。
根據(jù)實(shí)際序列所具有的運(yùn)動(dòng)特性對(duì)應(yīng)表1所給實(shí)驗(yàn)結(jié)果進(jìn)行分析,可以得出:對(duì)運(yùn)動(dòng)變化比較劇烈或復(fù)雜的圖像序列用較小的圖像組大小會(huì)取得較好的編碼性能,對(duì)運(yùn)動(dòng)變化比較緩慢的圖像序列,用較大的圖像組大小能取得較好的編碼性能。
具體原因?yàn)椋簩?duì)一個(gè)運(yùn)動(dòng)變化比較劇烈的圖像序列,當(dāng)采取較大的圖像組大小進(jìn)行編碼時(shí),可能會(huì)出現(xiàn)以下2種情況:
1)由于運(yùn)動(dòng)矢量搜索范圍的限制,對(duì)關(guān)鍵幀或等級(jí)較低的B幀,如圖1所示的顯示順序第8幀(關(guān)鍵幀,采用P幀編碼)或第4幀(第1等級(jí)的B幀),在編碼過程中可能會(huì)采取不合適的運(yùn)動(dòng)矢量進(jìn)行預(yù)測(cè)編碼,這將影響該幀圖像的編碼性能。由于該幀的編碼性能不好,將導(dǎo)致下一級(jí)的B幀圖像預(yù)測(cè)編碼效率降低。
2)由于運(yùn)動(dòng)矢量搜索范圍的限制,對(duì)關(guān)鍵幀或等級(jí)較低的B幀,在編碼過程可能會(huì)找不到合適的匹配塊,這時(shí)可能會(huì)采取幀內(nèi)預(yù)測(cè)模式對(duì)該圖像塊進(jìn)行編碼。這將影響該幀圖像的編碼性能。同樣,由于該幀的編碼性能不好,將導(dǎo)致下一級(jí)B幀圖像編碼效率降低。
在這種情況下,如果采取較小的圖像組大小,由于當(dāng)前編碼圖像和參考圖像的時(shí)間距離不遠(yuǎn),從而能夠得到較高的編碼效率。
因此,在對(duì)圖像序列采取層次B幀預(yù)測(cè)結(jié)構(gòu)進(jìn)行編碼時(shí),采用符合序列特性的自適應(yīng)圖像組大小的技術(shù)可以進(jìn)一步提高視頻編碼效率。在具體選擇圖像組大小時(shí),本文通過實(shí)驗(yàn)觀察發(fā)現(xiàn),可以通過運(yùn)動(dòng)矢量的絕對(duì)值大小和幀內(nèi)預(yù)測(cè)模式圖像塊的選取比例來判斷選擇相應(yīng)的圖像組大小。
下面給出基于H.264/AVC平臺(tái),層次B幀預(yù)測(cè)結(jié)構(gòu)采取不同圖像組大小編碼時(shí),關(guān)鍵幀P幀(例如,圖1中圖像組大小為8時(shí)的第8幀)的運(yùn)動(dòng)矢量絕對(duì)值均值和幀內(nèi)預(yù)測(cè)模式圖像塊選擇比例。表2的實(shí)驗(yàn)結(jié)果是在運(yùn)動(dòng)矢量搜索范圍為[-96,96]時(shí)測(cè)試所得。
表2 不同圖像組大小的參數(shù)值
從表2所列不同圖像組大小的參數(shù)值和表1所列的不同圖像組大小的編碼性能對(duì)應(yīng)關(guān)系可知:完全可以根據(jù)上述兩個(gè)參數(shù)來對(duì)層次B幀預(yù)測(cè)結(jié)構(gòu)的圖像組大小進(jìn)行自適應(yīng)選擇。
對(duì)大量圖像序列進(jìn)行分析發(fā)現(xiàn):視頻序列的運(yùn)動(dòng)特性都具有一定的時(shí)間延續(xù)性。一般情況下,如果視頻序列的運(yùn)動(dòng)特性都具有一定的時(shí)間延續(xù)性。一般情況下,如果視頻序列前一個(gè)GoP運(yùn)動(dòng)比較緩慢,則緊接著的后一個(gè)GoP運(yùn)動(dòng)不會(huì)馬上變得很快。因此,可以將前一個(gè)圖像組大小作為后一個(gè)圖像組大小的預(yù)測(cè)初始值。
在用自適應(yīng)圖像組大小的層次B幀預(yù)測(cè)結(jié)構(gòu)編碼時(shí),首先要確定圖像組大小的大小,確定了圖像組大小之后,這個(gè)GoP之間的圖像序列編碼順序和參考關(guān)系就能確定下來,從而可以完成這個(gè)GoP的編碼。具體的編碼步驟為:
1)用自適應(yīng)圖像組大小的層次B幀預(yù)測(cè)結(jié)構(gòu)進(jìn)行編碼時(shí),假設(shè)上一個(gè)圖像組大小為2p,并已經(jīng)編碼。則有下一個(gè)圖像組大小的預(yù)測(cè)值為2p,如圖2所示,首先將距離上一個(gè)GoP的最后一個(gè)關(guān)鍵幀的幀間距離為2p的圖像設(shè)置為關(guān)鍵幀,對(duì)其采取前向幀間預(yù)測(cè)編碼(即P幀預(yù)測(cè)編碼)。
圖2 基于層次B幀預(yù)測(cè)的自適應(yīng)圖像組大小編碼過程
2)統(tǒng)計(jì)該編碼圖像中采用幀內(nèi)預(yù)測(cè)模式塊的所占比例λIntraRatio和運(yùn)動(dòng)矢量絕對(duì)值的平均值A(chǔ)vg(|MV|)。
4)對(duì)參數(shù)λ按照如下方式進(jìn)行判決
判決閾值 λ0,λ1,λ2,λ3可在實(shí)際編碼中,根據(jù)具體的編碼配置條件訓(xùn)練可得。根據(jù)參數(shù)λ所在的取值范圍,可以對(duì)圖像組大小進(jìn)行選取。
5)確定更新的圖像組大小之后,如果圖像組大小與預(yù)測(cè)值相同,則可接著第一步繼續(xù)操作。首先將已編碼的關(guān)鍵幀碼流直接輸出,然后對(duì)這個(gè)GoP按照?qǐng)D像組大小為2p的層次B幀預(yù)測(cè)結(jié)構(gòu)進(jìn)行編碼。
6)如果圖像組大小與預(yù)測(cè)值不同,假設(shè)為2p-k。則將距離上一個(gè)GoP的最后一個(gè)關(guān)鍵幀的幀間距離為2p-k的圖像設(shè)置為關(guān)鍵幀,然后對(duì)這個(gè)GoP按照?qǐng)D像組大小為2p-k的層次B幀預(yù)測(cè)結(jié)構(gòu)進(jìn)行編碼。
7)重復(fù)步驟1)~6),可以完成整段圖像序列的自適應(yīng)圖像組大小層次B幀預(yù)測(cè)編碼。
為了衡量所提出的基于層次 B幀結(jié)構(gòu)的自適應(yīng)圖像組大小算法的編碼性能,將該技術(shù)集成到參考軟件JM14.2中。為了使測(cè)試序列中既包含運(yùn)動(dòng)變化比較快的視頻片斷也包含運(yùn)動(dòng)變化比較緩慢的視頻片斷 (這種情況在實(shí)際編碼中經(jīng)常出現(xiàn)),將幾個(gè)視頻序列進(jìn)行連接,形成一個(gè)長(zhǎng)序列。其中長(zhǎng)序列1由序列Paris.cif(288幀,30 Hz),序列 Crew.cif (128 幀,30 Hz)和 Husky.cif (250幀,30 Hz)連接而成。長(zhǎng)序列2由序列 Mobile.cif(288幀 ,30 Hz),Bus.cif(128 幀 ,30 Hz), Dancer.cif (228幀,30 Hz)連接而成。測(cè)試條件如表3所示。
表3 主要測(cè)試條件
與固與圖像組大小的層次B幀預(yù)測(cè)結(jié)構(gòu)相比,提出的基于層次B幀結(jié)構(gòu)的自適應(yīng)圖像組大小預(yù)測(cè)編碼技術(shù)的編碼性能比較結(jié)果如表4所示[4]。
表4 基于層次 B幀結(jié)構(gòu)的自適應(yīng)圖像組大小算法編碼性能的改善效果
由表4可見,采用所提出的基于層次B幀結(jié)構(gòu)的自適應(yīng)圖像組大小編碼技術(shù)相對(duì)于固定圖像組大小的層次B幀編碼技術(shù)在編碼性能上有明顯的提高。針對(duì)序列1,自適應(yīng)圖像組大小編碼技術(shù)相對(duì)于固定圖像組大小為32的層次B幀編碼技術(shù)編碼增益為0.45 dB;針對(duì)序列2,自適應(yīng)圖像組大小編碼技術(shù)相對(duì)于固定圖像組大小為4的編碼技術(shù)編碼增益為0.60 dB。由此可見,采用筆者提出的自適應(yīng)圖像組大小編碼技術(shù)能夠取得很好的編碼增益。
為了比較提出的基于層次B幀結(jié)構(gòu)的自適應(yīng)圖像組大小編碼技術(shù)與固定圖像組大小為4,8,16或32時(shí)的層次B幀編碼技術(shù)編碼復(fù)雜度,本文針對(duì)長(zhǎng)序列1在相同硬件運(yùn)行環(huán)境下(服務(wù)器硬件配置:CPU 3.0 GHz,內(nèi)存1.0 Gbyte),分別統(tǒng)計(jì)了上述幾種算法的編碼器編碼時(shí)間,如表5所示。
表5 編碼器編碼時(shí)間比較
由表5可知,提出的基于層次B幀的自適應(yīng)圖像組大小算法相對(duì)于固定圖像組大小的層次B幀算法,編碼時(shí)間增加了5%~10%左右。
本文提出了基于層次B幀預(yù)測(cè)結(jié)構(gòu)的自適應(yīng)圖像組大小編碼算法并給出了具體的編碼過程和圖像組大小的選取方法。相對(duì)于固定圖像組大小的層次B幀預(yù)測(cè)編碼技術(shù),筆者提出的方法在編碼時(shí)間增加了5%~10%的前提下,編碼性能提高了0.60 dB左右。
[1]梁凡.AVS視頻標(biāo)準(zhǔn)的技術(shù)特點(diǎn)[J].電視技術(shù),2005(7):12-15.
[2]WIEGAND T,ZHANG Xiaozheng,GIROD B.Long term memory motion compensated prediction[J].IEEE Trans.Circuits and Systems for Video Technology,1999,9(1):70-84.
[3]SCHWARZ H,MARPE D,WIEGAND T.Hierarchical B pictures[R].[S.l.]:ISO/IEC JTC1 and ITU-T, JVT-P014,2005.
[4]BJONTEGAARD G.CalculationofaveragePSNR differences between RD-curves[R].Austin, TX, USA: ITU-T SG16/Q6,M33,2001.