視頻編碼標準H.264的核心技術(shù)分析
3.1 幀內預測編碼模式
在視頻編碼中,通常的方法是把整幅圖像分為若干宏塊,然后對每一個(gè)宏塊進(jìn)行編碼。在編碼時(shí)采用Intra或Inter兩種模式。在Intra模式中通常直接對宏塊進(jìn)行DCT變換,對變換系數進(jìn)行熵編碼。這樣做在一定程度上消除了幀內的空間冗余度,但是由于DCT只是利用了宏塊內部像素之間的相關(guān)性,而沒(méi)有考慮相鄰宏塊間的相關(guān)性。H.264引入了Intra預測的方法,利用相鄰宏塊的相關(guān)性對待編碼的宏塊進(jìn)行預測,對預測殘差進(jìn)行變換編碼,以消除空間冗余。值得注意的是,以前的標準是在變換域中進(jìn)行預測,而H.264是直接在空間域中進(jìn)行預測。
3.2 幀間預測編碼模式
H.264在運動(dòng)估計中采了許多新技術(shù),主要包括可變塊大小、多幀運動(dòng)估計、亞像素精度的運動(dòng)估計以及去塊效應濾波等。
⑴ 去塊效應濾波
它的作用就是用來(lái)消除解碼圖像中的塊效應。塊效應產(chǎn)生的原因是各個(gè)宏塊分別進(jìn)行量化,這樣在相鄰宏塊的交界處,因量化步長(cháng)不同而導致原本很接近的像素值重構后產(chǎn)生了較大的差異,形成明顯的塊邊界。去塊效應濾波是在4×4的塊邊界上濾波,使塊邊界趨于平滑。
⑵ 可變塊大小塊大小對運動(dòng)估計的效果是有影響的。將宏塊分割成不同尺寸的運動(dòng)補償子塊稱(chēng)作樹(shù)狀結構運動(dòng)補償。宏塊的分割和子宏塊的分割各包括四種類(lèi)型,如圖3所示。較小的塊可以使運動(dòng)估計更精確,產(chǎn)生較小的運動(dòng)殘差,降低碼率。在H.264建議的不同大小的塊選擇中,可以看出,一個(gè)宏塊最多可以攜帶16個(gè)不同的運動(dòng)矢量。配合多幀運動(dòng)估計,同一宏塊中的不同塊還可以使用不同的參考幀來(lái)進(jìn)行預測。

圖3 運動(dòng)補償的宏塊分割
頂端:宏塊的分割
底端:宏塊的子分割
⑶ 多幀運動(dòng)估計
與以前視頻壓縮標準中使用的單幀運動(dòng)估計技術(shù)相比,H.264使用的多幀運動(dòng)估計具有更高的效率,更強的差錯穩健性。所謂多幀運動(dòng)估計是指使用一個(gè)或多個(gè)參考幀來(lái)估計運動(dòng)矢量,可以防止因某個(gè)幀出現錯誤而影響到后面的幀。但是,這種估計需要更大的內存,更高的運算復雜度。
⑷亞像素精度的運動(dòng)估計
在H.264中,運動(dòng)估計的精度由H.263中的半像素提高到像素,并且把像素作為可選項。與半像素精度的運動(dòng)估計一樣, 像素精度的運動(dòng)估計使用內插得到半像素和像素位置的點(diǎn)。
在H.264的幀間預測編碼中,仍可以繼續采用三步搜索算法找出與當前宏塊最匹配的塊。在塊匹配中,塊的位移與塊的中心或塊中任何一點(diǎn)的位移是等價(jià)的。因此,塊的位移可以理解為中心點(diǎn)的位移。在三步算法中,搜索范圍為 7,即在上一幀以當前子塊為原點(diǎn),將當前子塊在其上下左右距離為7的范圍內按一定規則移動(dòng),每移動(dòng)到一個(gè)位置,取出同樣大小的子塊與當前子塊進(jìn)行匹配計算。具體分為以下三步:
①以當前子塊為中心,以4為步幅,將圖4中標出的9個(gè)位置為中心的子塊與當前子塊進(jìn)行匹配,求出最佳匹配的子塊中心位置。
②以①中求出的最佳子塊為中心,例如,x=4,y=0,以2為步幅,將圖中的9個(gè)位置為中心的子塊與當前子塊進(jìn)行匹配,求出最佳匹配的子塊中心位置。
③以②中求出的最佳子塊為中心,例如,x=4,y=0,以1為步幅,將圖中的9個(gè)位置為中心的子塊與當前子塊進(jìn)行匹配,求出最佳匹配的子塊中心位置,它與當前子塊中心的位置偏移量即為估計的位移量。

3.3 整數DCT變換
H.264標準中使用4×4的整數DCT變換作為殘差宏塊的基本變換,這種變換的對象是經(jīng)過(guò)運動(dòng)補償預測或者幀內預測后的包含殘差數據的4×4塊。這類(lèi)變換是基于DCT變換,但又不同于DCT。
由于DCT變換是實(shí)數,量化時(shí)需對系數進(jìn)行四舍五入,從而影響了運算的精度。同時(shí),傳統的DCT存在不匹配問(wèn)題,產(chǎn)生參考幀的偏移,直接影響到重建圖像的質(zhì)量。
H.264建議的整數DCT變換的所有操作都使用整數算法,變換的核心部分主要是加法和移位。在整個(gè)變換和量化的過(guò)程中,只執行16bit的整數算法和一次乘法操作。只要在H.264建議基礎上正確使用相應的反變化,編碼器和解碼器就不會(huì )出現不匹配現象。它的正反變換矩陣分別為

其中的系數基本上都是整數,1/2可以用移位代替。在變換中由于乘法均可由移位運算代替,因此,復雜度降低的同時(shí),也解決了精度問(wèn)題。
H.264中的宏塊大小為16×16,對其中每個(gè)4×4大小的塊進(jìn)行上述4×4的DCT變換后,得到16個(gè)4×4的變換矩陣。為了進(jìn)一步提高壓縮效率,該建議還允許把每個(gè)4×4的變換矩陣中的直流分量DC,單獨取出組成一新的4×4矩陣,對此矩陣進(jìn)行Hardamard變換。宏塊的數據傳送順序如圖5所示。

3.4 熵編碼
H.264建議同時(shí)采用了兩種熵編碼模式:基于上下文的二進(jìn)制算術(shù)編碼CABAC,以及可變長(cháng)編碼VLC。VLC編碼又包括基于上下文的自適應可變長(cháng)編碼CAVLC。
CABAC方式利用了算術(shù)編碼的方法,一個(gè)符號可以用少于1bit來(lái)表示。根據無(wú)誤碼的假設條件下的試驗所得的數據可知,在所有碼率下,CABAC的表現都強于CAVLC。但是CAVLC的抗誤碼性要強于CABAC,且運算的復雜度也遠遠低于CABAC。因此,H.264規定在Baseline Profile 中采用CAVLC,而在Main Profile 中采用CABAC進(jìn)行熵編碼。
4 小結
與以往的視頻編碼標準相比,H.264建議在其系統結構、運動(dòng)估計和運動(dòng)補償、宏塊的變換和量化以及熵編碼等各方面都有明顯的提高,具有更高的編碼效率和更強的網(wǎng)絡(luò )適應性。在相同的圖象質(zhì)量下,H.264/AVC的算法比以前的標準如H.263或MPEG-4節約了50%左右的碼率。H.264的不同Profile既可以應用于實(shí)時(shí)通信,也可應用于對時(shí)延要求不高的其他應用中。此外,該建議增加了NAL層,負責將編碼器的輸出碼流適配到各種類(lèi)型的網(wǎng)絡(luò )中,從而對網(wǎng)絡(luò )傳輸具有更好的支持功能。同時(shí),它具有較強的抗誤碼特性,可適應丟包率高、干擾嚴重的無(wú)線(xiàn)信道中的視頻傳輸。因此,H.264支持不同網(wǎng)絡(luò )資源下的分級編碼傳輸,從而獲得平穩的圖像質(zhì)量,能適應于不同網(wǎng)絡(luò )中的視頻傳輸,網(wǎng)絡(luò )親和性好。
評論