視頻編碼標準H.264的核心技術(shù)分析
3.1 幀內(nèi)預測編碼模式
在視頻編碼中,通常的方法是把整幅圖像分為若干宏塊,然后對每一個宏塊進行編碼。在編碼時采用Intra或Inter兩種模式。在Intra模式中通常直接對宏塊進行DCT變換,對變換系數(shù)進行熵編碼。這樣做在一定程度上消除了幀內(nèi)的空間冗余度,但是由于DCT只是利用了宏塊內(nèi)部像素之間的相關(guān)性,而沒有考慮相鄰宏塊間的相關(guān)性。H.264引入了Intra預測的方法,利用相鄰宏塊的相關(guān)性對待編碼的宏塊進行預測,對預測殘差進行變換編碼,以消除空間冗余。值得注意的是,以前的標準是在變換域中進行預測,而H.264是直接在空間域中進行預測。
3.2 幀間預測編碼模式
H.264在運動估計中采了許多新技術(shù),主要包括可變塊大小、多幀運動估計、亞像素精度的運動估計以及去塊效應濾波等。
⑴ 去塊效應濾波
它的作用就是用來消除解碼圖像中的塊效應。塊效應產(chǎn)生的原因是各個宏塊分別進行量化,這樣在相鄰宏塊的交界處,因量化步長不同而導致原本很接近的像素值重構(gòu)后產(chǎn)生了較大的差異,形成明顯的塊邊界。去塊效應濾波是在4×4的塊邊界上濾波,使塊邊界趨于平滑。
⑵ 可變塊大小塊大小對運動估計的效果是有影響的。將宏塊分割成不同尺寸的運動補償子塊稱作樹狀結(jié)構(gòu)運動補償。宏塊的分割和子宏塊的分割各包括四種類型,如圖3所示。較小的塊可以使運動估計更精確,產(chǎn)生較小的運動殘差,降低碼率。在H.264建議的不同大小的塊選擇中,可以看出,一個宏塊最多可以攜帶16個不同的運動矢量。配合多幀運動估計,同一宏塊中的不同塊還可以使用不同的參考幀來進行預測。
圖3 運動補償?shù)暮陦K分割
頂端:宏塊的分割
底端:宏塊的子分割
⑶ 多幀運動估計
與以前視頻壓縮標準中使用的單幀運動估計技術(shù)相比,H.264使用的多幀運動估計具有更高的效率,更強的差錯穩(wěn)健性。所謂多幀運動估計是指使用一個或多個參考幀來估計運動矢量,可以防止因某個幀出現(xiàn)錯誤而影響到后面的幀。但是,這種估計需要更大的內(nèi)存,更高的運算復雜度。
⑷亞像素精度的運動估計
在H.264中,運動估計的精度由H.263中的半像素提高到像素,并且把像素作為可選項。與半像素精度的運動估計一樣, 像素精度的運動估計使用內(nèi)插得到半像素和像素位置的點。
在H.264的幀間預測編碼中,仍可以繼續(xù)采用三步搜索算法找出與當前宏塊最匹配的塊。在塊匹配中,塊的位移與塊的中心或塊中任何一點的位移是等價的。因此,塊的位移可以理解為中心點的位移。在三步算法中,搜索范圍為 7,即在上一幀以當前子塊為原點,將當前子塊在其上下左右距離為7的范圍內(nèi)按一定規(guī)則移動,每移動到一個位置,取出同樣大小的子塊與當前子塊進行匹配計算。具體分為以下三步:
①以當前子塊為中心,以4為步幅,將圖4中標出的9個位置為中心的子塊與當前子塊進行匹配,求出最佳匹配的子塊中心位置。
②以①中求出的最佳子塊為中心,例如,x=4,y=0,以2為步幅,將圖中的9個位置為中心的子塊與當前子塊進行匹配,求出最佳匹配的子塊中心位置。
③以②中求出的最佳子塊為中心,例如,x=4,y=0,以1為步幅,將圖中的9個位置為中心的子塊與當前子塊進行匹配,求出最佳匹配的子塊中心位置,它與當前子塊中心的位置偏移量即為估計的位移量。
3.3 整數(shù)DCT變換
H.264標準中使用4×4的整數(shù)DCT變換作為殘差宏塊的基本變換,這種變換的對象是經(jīng)過運動補償預測或者幀內(nèi)預測后的包含殘差數(shù)據(jù)的4×4塊。這類變換是基于DCT變換,但又不同于DCT。
由于DCT變換是實數(shù),量化時需對系數(shù)進行四舍五入,從而影響了運算的精度。同時,傳統(tǒng)的DCT存在不匹配問題,產(chǎn)生參考幀的偏移,直接影響到重建圖像的質(zhì)量。
H.264建議的整數(shù)DCT變換的所有操作都使用整數(shù)算法,變換的核心部分主要是加法和移位。在整個變換和量化的過程中,只執(zhí)行16bit的整數(shù)算法和一次乘法操作。只要在H.264建議基礎(chǔ)上正確使用相應的反變化,編碼器和解碼器就不會出現(xiàn)不匹配現(xiàn)象。它的正反變換矩陣分別為
其中的系數(shù)基本上都是整數(shù),1/2可以用移位代替。在變換中由于乘法均可由移位運算代替,因此,復雜度降低的同時,也解決了精度問題。
H.264中的宏塊大小為16×16,對其中每個4×4大小的塊進行上述4×4的DCT變換后,得到16個4×4的變換矩陣。為了進一步提高壓縮效率,該建議還允許把每個4×4的變換矩陣中的直流分量DC,單獨取出組成一新的4×4矩陣,對此矩陣進行Hardamard變換。宏塊的數(shù)據(jù)傳送順序如圖5所示。
3.4 熵編碼
H.264建議同時采用了兩種熵編碼模式:基于上下文的二進制算術(shù)編碼CABAC,以及可變長編碼VLC。VLC編碼又包括基于上下文的自適應可變長編碼CAVLC。
CABAC方式利用了算術(shù)編碼的方法,一個符號可以用少于1bit來表示。根據(jù)無誤碼的假設(shè)條件下的試驗所得的數(shù)據(jù)可知,在所有碼率下,CABAC的表現(xiàn)都強于CAVLC。但是CAVLC的抗誤碼性要強于CABAC,且運算的復雜度也遠遠低于CABAC。因此,H.264規(guī)定在Baseline Profile 中采用CAVLC,而在Main Profile 中采用CABAC進行熵編碼。
4 小結(jié)
與以往的視頻編碼標準相比,H.264建議在其系統(tǒng)結(jié)構(gòu)、運動估計和運動補償、宏塊的變換和量化以及熵編碼等各方面都有明顯的提高,具有更高的編碼效率和更強的網(wǎng)絡適應性。在相同的圖象質(zhì)量下,H.264/AVC的算法比以前的標準如H.263或MPEG-4節(jié)約了50%左右的碼率。H.264的不同Profile既可以應用于實時通信,也可應用于對時延要求不高的其他應用中。此外,該建議增加了NAL層,負責將編碼器的輸出碼流適配到各種類型的網(wǎng)絡中,從而對網(wǎng)絡傳輸具有更好的支持功能。同時,它具有較強的抗誤碼特性,可適應丟包率高、干擾嚴重的無線信道中的視頻傳輸。因此,H.264支持不同網(wǎng)絡資源下的分級編碼傳輸,從而獲得平穩(wěn)的圖像質(zhì)量,能適應于不同網(wǎng)絡中的視頻傳輸,網(wǎng)絡親和性好。
評論