【HEVC學習與研究】9.HEVC視訊編碼技術

biubiu_scut發表於2014-12-11
成功執行HM10.0後,下面開始進入真正對HEVC標準採用的編碼技術的討論。參考文獻選用IEEE TCSVT 201212期的Overview of HEVC。
同H.264等前代的視訊編碼標準類似,HEVC依然採用了混合編碼框架,利用幀間預測去除時域相關,利用幀內預測去除空間相關,利用變換、熵編碼去除統計相關性。同前代技術相比,HEVC並未採用革命性的創新技術,而是針對現有技術進行小步快跑的改進,用積少成多的方法提高編碼的效能。
1、影像的畫素表示:
HEVC通常採用4:2:0取樣的YCbCr顏色空間表示視訊訊號,每個分量支援8位元或10位元,通常情況採用8位元,且視訊為逐行掃描訊號。在影像幀的大小方面,兩個色度分量的解析度均為亮度分量的1/4。
2、由影像幀到樹形編碼單元的分割
一幀影像分割成樹形編碼單元(coding tree units,CTUs),CTU包含亮度和色度分量CTB,是基本的處理單元。亮度分量CTB為邊長為16、32或者64的矩形塊,色度CTB的邊長為亮度的一半,CTB的實際大小由碼流中的序列引數集合指定。更大尺寸的分塊可以更好地處理高清視訊訊號。
3、由CTB分割為CB:
亮度和色度CTB可以按照四叉樹結構進一步分解為CB。四叉樹結構可以根據視訊訊號的區域特徵將CTB分割成合適大小的CB塊。分割過程可反覆迭代,知道亮度CB的大小為可支援的最小值8×8。在影像的邊界處,CB為最小支援尺寸。解碼器對可能“越界”的CTB會做專門處理。
4、PB和PU
每個CU的預測模式可能為幀內或者幀間。若預測模式為幀內,除了最小尺寸模式外,PB的尺寸等於CB。若是最小尺寸模式,則用標誌位表示是否將CB分割成四個PB塊。這樣最小可以支援到4×4大小的幀內預測塊(此時色度分量PB也為4×4)。
若預測模式為幀間預測,亮度和色度CB可能分割為1/2/4個PB。只有CB為最小尺寸模式時才能分割為4個PB塊。CB分割為四個PB時,每個PB佔據CB的1/4;CB分為兩個PB時,可選擇6種分割模式的一種,其中包含不平均分割模式(只針對16×16及以上的亮度塊)。每個幀間預測PB包含一個或者兩個運動向量和參考幀索引。為控制編碼效率,4×4亮度塊不允許使用幀間預測,8×4和4×8最多隻允許單向預測編碼。
5、樹結構分解為變換塊和變換單元
CB的殘差訊號可按照殘差四叉樹分解為變換塊(transform blocks,TBs),只能分解為方塊,其最大和最小尺寸由編碼器指定。除了4×4之外,色度TB的邊長為亮度TB的一半。
6、Slices和Tiles
Slice是幀中按光柵掃順序排列的CTU序列。一幀可以由多個slice組成,每個slice可以獨立解碼,因為slice內畫素的預測編碼不能跨越slice的邊界。每個slice可按照編碼型別的不同分為I/P/B slice。該結構的主要目的是在傳輸中遭遇資料丟失後的重新同步。每個slice可攜帶的最大位元數通常受限,因此根據視訊場景的運動程度,slice所包含的的CTU數量可能有很大不同。
Tile是幀內可以獨立進行解碼的矩形區域,包含多個按矩形排列的CTU(數目不要求一定相同),定義這一結構的初衷是增強編解碼的並行處理效能。同一個slice內的多個tiles可共享相同的頭資訊,一個tile也可以包含多個slice。另外還可以定義依賴性條帶的概念。
由於引入了波前並行編碼模式(wavefront parallel processing),一個slice可以按行分割成多個CTU,每一行的解碼可以在上一行的幾個CTU解碼完成後開始,採用這種方式支援CTU的並行處理。
7、幀內預測
【這是多少年的老問題,都快被研究爛了……現在真的一看見什麼“幀內”或者“運動搜尋”之類的就睏意頓生……】HEVC的幀內預測要依據先前解碼完成的TB塊和TB的大小確定。對於從4×4到32×32大小的TB塊而言,定義了33種預測方向以及DC和planar兩種特殊模式。對於色度塊,可顯式指定水平、垂直、planar和DC模式,也可以採用跟亮度預測一致的模式。同H.264類似,HEVC的幀內預測在各種不同型別slice中都可支援。【視訊編碼的各個技術中,我覺得幀內算是最簡單最容易理解的,沒有之一。所以具體的細節也不多寫了,感興趣的可以去看參考文獻(“Overview of HEVC”,IEEE TCSVT 2012.12),相信熟悉H.264的童鞋馬上就能看懂】。
8、幀間預測
HEVC幀間預測的PB分塊方法比幀內預測複雜,分塊模式可以將CB分割成1整塊、水平二等分、垂直二等分等。在CB為最小尺寸模式下,可分割為等大小的4小塊。另外非對稱運動分割(asymmetric motion partitions)支援分割成不同大小的塊。
同H.264類似,HEVC支援亮度的亮度的1/4精度的亞畫素差值。色度訊號的精度由取樣格式確定,對4:2:0訊號而言,為1/8精度。
合併模式:該模式可以從當前塊的時間或空間鄰域塊匯出運動向量,將共享運動資訊的區域生成一個合併區域。合併模式的候選資料集合包括空間鄰域塊,一個時間鄰域塊和生成鄰域塊。每個候選快需驗證其可用性。對空間候選塊,若當前PU的候選要參考同CU內的PU,則排除該候選塊,運動資訊相同的候選塊也樣一併排除。對時間候選塊的位置,選擇參考幀中相應位置的PU區域外右下方(如果可用),否則選用居中位置。
非合併模式下的運動向量精度:以運動向量預測的方式進行編碼,利用運動向量預測、預測索引和運動向量殘差。
9、變換量化
HEVC使用的變換編碼方法同前期標準類似,仍然採用二維DCT變換,變換塊的大小為4×4, 8×8,16×16或32×32。對於4×4大小的塊,採用二維DST變換。
量化演算法同H.264類似,量化矩陣為降低空間複雜度,只採用4×4和8×8大小。
10、熵編碼
HEVC僅採用CABAC一種熵編碼方法。同H.264相比,捨棄了CAVLC。
11、環路濾波器
HEVC中環路濾波分為兩步,即去塊濾波(Deblocking filter, DBF)和取樣自適應濾波(SAO filter)。SAO是HEVC中新引入的技術,它不僅限於在邊界,而是自適應地處理所有滿足一定條件的畫素。
除非PU或TU塊的邊緣也是幀的邊緣或在條帶及tiles邊緣被禁用(由SPS和條帶頭控制),DBF會作用於所有塊的邊界。為了在不造成明顯畫質降低的前提下減小最差情況運算複雜度,在對亮度和色度4×4處理時,DBF僅僅處理對齊於8×8邊界的塊邊緣。DBF強度根據不同情況採用0、1、2三檔。
SAO作用於DBF之後,根據查表法,對符合一定條件的畫素加一個偏移量。偏移量表由編碼器端傳送。
12、特定的編碼模式
除了以上編碼技術之外,HEVC還制定了I_PCM,無損模式和變換跳過模式。
【很多內容我也還沒有理解透徹,因此經常一筆帶過。在研究編解碼器的程式時,將結合程式仔細研究用到的技術。】

相關文章