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