張 猛 黃繼海 涂晨陽(yáng)
(防空兵指揮學(xué)院 鄭州 450052)
H.264/AVC標(biāo)準(zhǔn)是 ITU-T的VCEG(視頻編碼專家組)和ISO/IEC的MPEG(活動(dòng)圖像專家組)的聯(lián)合視頻組(JVT,JointVideoTeam)開(kāi)發(fā)的標(biāo)準(zhǔn),也稱為MPEG-4Part10“高級(jí)視頻編碼”。它既保留了以往壓縮技術(shù)的優(yōu)點(diǎn)又增加了許多新特性:更低的碼流和更高的圖像質(zhì)量,更強(qiáng)的容錯(cuò)能力,簡(jiǎn)潔的設(shè)計(jì)方式和更好的網(wǎng)絡(luò)適應(yīng)性。在相同的重建圖像質(zhì)量下和同等的畫質(zhì)下,H.264比編碼標(biāo)準(zhǔn)H.263平均節(jié)約64%的傳輸碼流,比MPEG-4ASP也要平均節(jié)約39%的傳輸碼流。H.264技術(shù)還具備容錯(cuò)能力強(qiáng)、網(wǎng)絡(luò)適應(yīng)性強(qiáng)等優(yōu)勢(shì),正好適應(yīng)了目前國(guó)內(nèi)運(yùn)營(yíng)商接入網(wǎng)帶寬非常有限的狀況。與以往標(biāo)準(zhǔn)相比,H.264標(biāo)準(zhǔn)使運(yùn)動(dòng)圖像壓縮技術(shù)上升到了一個(gè)更高的階段,在較低的帶寬上可以提供高質(zhì)量的圖像傳輸。
在視頻壓縮編碼中,預(yù)測(cè)法是最簡(jiǎn)單、實(shí)用的,經(jīng)過(guò)壓縮編碼后傳輸?shù)牟⒉皇窍袼乇旧淼娜又?而是該取樣的預(yù)測(cè)值和實(shí)際值之差。在同一幅圖像中,鄰近像素之間有著相關(guān)性,它們發(fā)生突變的概率很小,因此可以利用這些性質(zhì)進(jìn)行視頻壓縮編碼。
H.264和以往標(biāo)準(zhǔn)相比并無(wú)結(jié)構(gòu)性變化而是在各主要模塊內(nèi)部使用一些先進(jìn)的技術(shù),從而提高編碼效率。幀內(nèi)編碼就是在對(duì)一幅圖像進(jìn)行編碼時(shí)沒(méi)有利用任何其它幀圖像的信息的編碼,它是傳統(tǒng)混合編碼框架的重要組成部分。幀內(nèi)預(yù)測(cè)編碼主要是通過(guò)消除圖像的空間冗余信息來(lái)實(shí)現(xiàn)對(duì)圖像的壓縮,也應(yīng)用于幀間預(yù)測(cè)的某些宏塊編碼中。在幀內(nèi)預(yù)測(cè)模式中,預(yù)測(cè)塊P是居于已編碼重建塊和當(dāng)前塊形成的。H.264/AVC對(duì)亮度分量和色度分量設(shè)定了不同的預(yù)測(cè)編碼方案。針對(duì)亮度分量的幀內(nèi)預(yù)測(cè)模式有兩種:基于4×4像素模塊(有9種可選預(yù)測(cè)模式,獨(dú)立預(yù)測(cè)每一個(gè)4×4亮度子塊)和16×16像素模塊(有4種預(yù)測(cè)模式預(yù)測(cè)整個(gè)16×16亮度塊)的幀內(nèi)預(yù)測(cè)模式,分別適用于帶有大量細(xì)節(jié)的圖像編碼和平坦區(qū)域圖像編碼;對(duì)色度分量也有四種模式,與16×16模塊相似。
與以往標(biāo)準(zhǔn)相比,H.264幀間預(yù)測(cè)在繼承了其成熟的編碼框架的同時(shí),又進(jìn)一步增強(qiáng)和改進(jìn)了一些新的技術(shù)和方法,從而獲得更好的壓縮性。幀間預(yù)測(cè)編碼通過(guò)分析相鄰圖像之間的時(shí)域相關(guān)性,然后再對(duì)預(yù)測(cè)圖像和實(shí)際圖像的差值進(jìn)行編碼從而實(shí)現(xiàn)視頻壓縮。采用的新技術(shù)主要有可變模式塊運(yùn)動(dòng)補(bǔ)償、采用1/4像素精度的運(yùn)動(dòng)估計(jì)算法以及多參考幀等。通過(guò)對(duì)模式塊進(jìn)行分割,采用樹狀結(jié)構(gòu)運(yùn)動(dòng)補(bǔ)償以及把像素精度提高到1/4的像素精度估計(jì)并且增加多個(gè)參考幀來(lái)提高編碼效率減小誤差,但是同時(shí)會(huì)增加計(jì)算的復(fù)雜性。
對(duì)于大多數(shù)圖像來(lái)說(shuō)都有這樣一個(gè)共同特征,平坦區(qū)域和內(nèi)容緩慢變化區(qū)域遠(yuǎn)遠(yuǎn)大于細(xì)節(jié)區(qū)域和內(nèi)容突變區(qū)域。即圖像中直流和低頻區(qū)域占大部分,高頻區(qū)域占小部分,因此在空間域圖像與頻域互換時(shí)會(huì)產(chǎn)生很小的相關(guān)變換系數(shù),通過(guò)常見(jiàn)的K-L變換、離散余弦變換(DCT)等正交變換對(duì)其進(jìn)行壓縮編碼。DCT編碼性能接近于K-L變換,相比之下,它具有快速算法,廣泛應(yīng)用于圖像編碼。H.264采用4×4整數(shù)變換,在編碼器中允許精度相同的變換和反變換,便于使用簡(jiǎn)單的定點(diǎn)運(yùn)算方式。
變換編碼實(shí)現(xiàn)較復(fù)雜而預(yù)測(cè)編碼實(shí)現(xiàn)相對(duì)容易,但預(yù)測(cè)編碼的誤差容易擴(kuò)散?;旌暇幋a的使用現(xiàn)在越來(lái)越多,即對(duì)圖像先進(jìn)行帶有運(yùn)動(dòng)補(bǔ)償?shù)膸g預(yù)測(cè)編碼,再對(duì)預(yù)測(cè)后的殘差信號(hào)進(jìn)行DCT變換。
熵編碼是一種無(wú)損壓縮編碼方法,它利用信源的統(tǒng)計(jì)特性進(jìn)行碼率的壓縮編碼,它生成的碼流經(jīng)解碼后可以無(wú)失真的恢復(fù)出原數(shù)據(jù)。H.264采用兩種熵編碼技術(shù)來(lái)提高編碼效率:基于上下文自適應(yīng)的變長(zhǎng)編碼進(jìn)行的熵編碼(Context-Based Adaptive Variable-Length Coding,CAVLC)和基于上下文的自適應(yīng)的算術(shù)編碼(Context-Based Adaptive Binary Arithmetic Coding,CABAC)。
CAVLC適用于對(duì)亮度和色度殘差數(shù)據(jù)進(jìn)行編碼,之后再進(jìn)行量化編碼。它充分利用殘差通過(guò)整數(shù)變換以及對(duì)量化后的數(shù)據(jù)特性進(jìn)行壓縮提高壓縮效率,進(jìn)一步減少冗余數(shù)據(jù)間的冗余信息。
CABAC是一種效率很高的自適應(yīng)算術(shù)編碼算法,它考慮的是信源符號(hào)序列整體的概率特性,不采用一個(gè)碼字代表一個(gè)輸入信息符號(hào)的辦法。與CAVLC相比,CABAC在同樣的視頻質(zhì)量下更節(jié)省碼率。
熵編碼是對(duì)變換編碼后的系數(shù)進(jìn)行編碼。CABAC是H.264/AVC標(biāo)準(zhǔn)中的一種自適應(yīng)算術(shù)熵編碼方法,是將自適應(yīng)的二進(jìn)制算術(shù)編碼與一個(gè)設(shè)計(jì)精良的上下文模型結(jié)合起來(lái)得到的方法。其算術(shù)編碼的計(jì)算復(fù)雜度主要體現(xiàn)在兩個(gè)方面:概率的估計(jì)和更新,解決其優(yōu)化問(wèn)題將會(huì)使熵編碼的效率得到進(jìn)一步的提高。CABAC算術(shù)編碼過(guò)程的主要步驟有:利用每個(gè)語(yǔ)法元素的上下文關(guān)系,根據(jù)已編碼元素為待編碼元素選擇概率模型,即上下文建模;根據(jù)當(dāng)前的統(tǒng)計(jì)特性自適應(yīng)地進(jìn)行概率估計(jì);對(duì)輸入流進(jìn)行預(yù)編碼。
算術(shù)編碼是一個(gè)遞進(jìn)計(jì)算過(guò)程,編碼器必須保存以下變量的記錄狀態(tài):當(dāng)前區(qū)間的下限L;當(dāng)前區(qū)間的大小R;當(dāng)前字符Binval;各字符的概率 Pa。
上述定義中 L和R用來(lái)確定當(dāng)前區(qū)間;Pa是當(dāng)前區(qū)間的劃分依據(jù),由于是二進(jìn)制編碼只有字符0和1,所以只需記錄P1和P0;最后確定Binval所在的自區(qū)間作為下一個(gè)遞進(jìn)中的當(dāng)前區(qū)間。R的遞進(jìn)關(guān)系為:R=R*Pa。
圖1 算術(shù)編碼流程
算術(shù)編碼是對(duì)整個(gè)流分配碼字,為了將差錯(cuò)控制在一定范圍內(nèi),CABAC將片(Slice)作為算術(shù)編碼的生命期,但是對(duì)具體句法的元素的編碼是發(fā)生在宏塊級(jí)。在同一宏塊內(nèi)句法元素是獨(dú)立編碼,宏塊之間的上下文信息則可以作為依據(jù)用于對(duì)當(dāng)前塊進(jìn)行編碼。
H.264將一個(gè)片內(nèi)可能出現(xiàn)的數(shù)據(jù)劃分為399個(gè)上下文模型,每個(gè)模型以ctxidx標(biāo)示,在每個(gè)模型內(nèi)部進(jìn)行概率的查找和更新。每個(gè)上下文模型通過(guò)H.264為其建立的對(duì)應(yīng)的概率表,獨(dú)立地維護(hù)概率狀態(tài)。這些模型的劃分精確到比特,幾乎大多數(shù)的比特和它們鄰近的比特處于不同的上下文模型中。通常,每個(gè)句法元素的上下文模型根據(jù)上下文索引偏移量與上下文增量來(lái)確定。其中,上下文索引偏移量對(duì)于特定類型片中的特定句法元素是唯一確定的,可以在標(biāo)準(zhǔn)中通過(guò)查表獲得。而上下文增量,則是根據(jù)相鄰塊的編碼情況(也就是上下文信息)得出。
對(duì)于不同的句法元素,所需相鄰塊的信息不同,但一般包括可用性(如當(dāng)前塊在片的邊緣上,則相鄰塊可能由于不是在同一片中而不可用)與同一句法元素的編碼值。通常用于計(jì)算上下文增量的上下文建模函數(shù)為ctx_var_add=cond_term(A,B),A和B表示當(dāng)前塊的相鄰塊。其中cond_term()表示的是一種函數(shù)關(guān)系。另外,對(duì)于利用先前已編碼的二進(jìn)制值的上下文建模函數(shù)可表示為ctx_var_bin[k]=cond_term(b1,…,bk-1)。
為優(yōu)化算術(shù)編碼的特性,CABAC從統(tǒng)計(jì)角度對(duì)輸入流作了一套預(yù)編碼方法。如果給定的符號(hào)是非二進(jìn)制值,將其乘以2的倍數(shù)放大(左移),即當(dāng)輸入流中連續(xù)出現(xiàn)大量MPS,或者M(jìn)PS對(duì)LPS的概率比非常高時(shí),可以達(dá)到極高的壓縮效果。這種將輸入流重新編碼后再進(jìn)行算術(shù)編碼的過(guò)程叫做輸入流的二進(jìn)制化,從而獲得MPS概率極高的比特流。
算術(shù)編碼的復(fù)雜度主要體現(xiàn)在兩個(gè)方面:概率的估計(jì)和更新。劃分子區(qū)間的乘法運(yùn)算:R=R*Pa。假設(shè)輸入流為T,當(dāng)前字符為Binval,在Binval之前的字符流為 f,f∈T,條件概率P(Binval/f)就是當(dāng)前字符的概率估計(jì)值。隨著條件因子 f的增長(zhǎng),帶來(lái)的計(jì)算量急劇增大,而且每處理一個(gè)字符,需要作兩次類似的計(jì)算。因此為解決這一問(wèn)題,概率估計(jì)值Pa必須取自P(Binval/f)(取自一個(gè)嚴(yán)格的統(tǒng)計(jì)模型),它所對(duì)應(yīng)的輸出碼率能最大限的逼近信源熵率;另外需要保證通過(guò)同樣的法則估計(jì)和更新Pa能夠順利在當(dāng)前劃分區(qū)間編解碼。
據(jù)以上分析,CABAC在計(jì)算的復(fù)雜度和編碼效率之間作了折中,建立了一個(gè)基于查表得概率模型,把區(qū)間[0,0.5]的概率量化為64個(gè)值,這些概率對(duì)應(yīng)于LPS(最小概率符號(hào)),則MPS(最大概率符號(hào))的概率為1-Plps。字符的概率估計(jì)值被限制在表內(nèi),概率的刷新也從計(jì)算P(Binval/f)轉(zhuǎn)變?yōu)榘凑漳撤N法則在表中查找。
在CABAC建立的概率模型中,可以利用MPS出現(xiàn)時(shí)的刷新值都只是簡(jiǎn)單地指向當(dāng)前的下一位來(lái)降低概率估計(jì)和刷新中的計(jì)算量。
圖2 CABAC自適應(yīng)自述編碼原理
通過(guò)優(yōu)化算術(shù)編碼中頻繁使用的乘法運(yùn)算R=R*Pa亦可以大大減少計(jì)算量。CABAC首先建立起一個(gè)4*64的二維表格,存儲(chǔ)預(yù)先計(jì)算好的乘法結(jié)果。令表格入口參數(shù)一個(gè)來(lái)自Pa另個(gè)一個(gè)來(lái)自R。P x直接以n(量化后的概率表索引值)作為參數(shù),R的量化公式為:m=(R?6)&3;在每次需要作乘法運(yùn)算時(shí),通過(guò)m和n進(jìn)行查表操作即可得到結(jié)果。
H.264標(biāo)準(zhǔn)中所涉及到的關(guān)鍵技術(shù):幀間預(yù)測(cè)、幀內(nèi)預(yù)測(cè)、DCT變換以及熵編碼技術(shù),基于上下文自適應(yīng)的二進(jìn)制算術(shù)熵編碼(CABAC)是一種很高效的編碼算法。它不僅動(dòng)態(tài)地更新概率模型,而且采用新的方法對(duì)計(jì)算量和編碼速度進(jìn)行優(yōu)化,與其他主流熵編碼技術(shù)(CAVLC)相比,CABAC有著更高的編碼效率。在H.264標(biāo)準(zhǔn)的發(fā)展應(yīng)用中,CABAC編碼算法必將應(yīng)用地更加廣泛。
[1]畢厚杰,王建.新一代視頻壓縮編碼標(biāo)準(zhǔn)-H.264/AVC[M].第二版.北京:人民郵電出版社,2009
[2]余兆明,査日勇,黃磊,等.圖像編碼標(biāo)準(zhǔn)H.264技術(shù)[M].北京:人民郵電出版社,2006
[3]黃晁,沈燕飛,李錦濤,等.降低視頻編碼復(fù)雜度的算法研究[C]//AVS第四次會(huì)議文檔AVS_M1056,武漢,2003
[4]H'HNEL H,YANGW Q,YORK T A.An AC2Based Capaci2tance Measuring Circuit for Tomography Systems and its SiliconChip Design[J].IEEE Colloquium:Advances in Sensors,1995,12
[5]陳志波.H.264運(yùn)動(dòng)估值與網(wǎng)絡(luò)視頻傳輸關(guān)鍵問(wèn)題研究[D].北京:清華大學(xué)畢業(yè)論文,2002
[6]A.M.Tourapis,O.C.Au,M.L.iou.Predictive motion vectorfield adaptivesearch technique(PM VFAST)-enhancing block based motion estimation.Visual Communications and Image Processing,2001