H.265將圖像划分為“樹編碼單元(coding tree units, CTU)”,而不是像H.264那樣的16×16的宏塊。根據不同的編碼設置,樹編碼塊的尺寸可以被設置為64×64或有限的32×32或16×16。很多研究都展示出更大的樹編碼塊可以提供更高的壓縮效率(同樣也需要更高的編碼速度)。每個樹編碼塊可以被遞歸分割,利用四叉樹結構,分割為32×32、16×16、8×8的子區域,下圖就是一個64×64樹編碼塊的分區示例。每個圖像進一步被區分為特殊的樹編碼塊組,稱之為切割(Slices)和拼貼(Tiles)。編碼樹單元是H.264的基本編碼單位,如同H.264的宏塊。編碼樹單元可向下分成編碼單元(Coding Unit,CU)、預測單元(Prediction Unit,PU)及轉換單元(Transform Unit,TU)。
每個編碼樹單元內包含1個亮度與2個色度編碼樹塊,以及記錄額外信息的語法元素。一般來說影片大多是以YUV 4:2:0色彩采樣進行壓縮,因此以16 x 16的編碼樹單元為例,其中會包含1個16 x 16的亮度編碼樹區塊,以及2個8 x 8的色度編碼樹區塊。

編碼單元是H.265基本的預測單元。通常,較小的編碼單元被用在細節區域(例如邊界等),而較大的編碼單元被用在可預測的平面區域。

實線為編碼單元,虛線為轉換單元。
編碼樹單元(Coding Tree Unit, CTU)
CTU是H.265/高效率視訊編碼(High Efficiency Video Coding, HEVC)的處理單元。此處理單元類似H.264/高階視訊編碼(Advanced Video Coding, AVC)中的宏區塊(Macroblock)。編碼樹單元的大小可以從16x16到64x64,使用比H.264更大的處理單元得到更好的壓縮效果
單元(Unit)與區塊(Block)
區塊是真正儲存資料的地方,許多區塊加上語法元素組成一個單元。輸入影像采用YUV的格式,所以一個編碼樹單元是由一個亮度(Luma)編碼樹區塊(Coding Tree Block,CTB)、兩個色度(Chroma)編碼樹區塊及語法元素(Syntax Element)組成。
由於輸入影像采用4:2:0的取樣方式,因此亮度編碼樹區塊的大小為色度編碼樹區塊的四倍,如圖一所示。

編碼樹單元與AVC的宏區塊最大的不同之為編碼樹單元可以變得更大且大小可以調整,而宏區塊的大小固定為16。HEVC的編碼樹單元支援更大的大小可以讓編碼器對高分辨率的影像編碼時更有效率。編碼樹單元的大小定義在序列參數集(Sequence Parameter Set, SPS)內,高效率視訊編碼內支援的大小為LxL,其中L=16、32或64。
除了編碼樹單元,高效率視訊編碼(HEVC)中還有另外三種單元分別為編碼單元(Coding Unit, CU)、預測單元(Prediction Unit, PU)及轉換單元(Transform Unit, TU)。

編碼單元(Coding Unit, CU)
編碼單元 CU 是碼樹 CT 結構上的一個葉子 Leaf Node.
碼樹單元(CTU)可以包含有一個編碼單元(Coding Unit, CU)或是切割成多個較小的編碼單元,如圖二(左)所示。

高效率視訊編碼 (HEVC) 用編碼單元 CU 指示這個單元是屬於畫面內預測(Intra Prediction)或是畫面間預測(Inter Prediction)。
這些編碼單元CU可以很方便地利用四分樹(Quadtree)的方式呈現,如圖二(右)所示。
四分樹是一種遞回結構,四分數上的數字表示這個節點是否繼續做分割,若此節點會繼續分割則為1,若不繼續分割則為0。由圖二可看出節點上的數字為0時,此節點為編碼單元。換句話說,在編碼樹內葉子節點(Leaf Node)為編碼單元。編碼樹的順序如圖三左的虛線所示,在編碼單元上采用Z-scan的方式,對編碼樹來說即為深度優先遍歷。
編碼單元CU的大小支援2Nx2N,其中N=4、8、16或32,因此高效率視訊編碼(HEVC)的四分樹最高深度(Depth)為4。
對於YUV=420的彩色視頻:一個CU由一個CB_luma samples、2個CB_choma samples和相關的語法元素。
CU = Syntax(CB_Y, CB_Cb, CB_Cr)
一個Luma CB是2^N x 2^N(此處的N與CTU中的N大小不同)的像素區域,而相應的choma CB是2^(N-1) x 2^(N-1)的像素區域,
N的值同樣在編碼器中確定,並在SPS中傳輸。
CB是之前已經分割好的CTB根據塊中的圖像內容而自適應划分的(划分規則:相對比較平坦的區域采用大尺寸的CB,而細節多的區域則采用較小尺寸的CB)。
通常情況下,CB的形狀是正方形,亮度分量CB的尺寸可以由8x8大小到亮度CTB的大小,色度CB的尺寸可以由4x4大小到色度CTB的大小(也就是說,亮度CTB的尺寸是亮度CB的最大可支持的尺寸;色度CTB的尺寸是色度CB的最大可支持的尺寸)。如下圖所示。

CU可以分為兩類:跳過型CU(Skipped CU)和普通CU。
- 跳過型CU只能采用幀間預測模式,而且產生的運動向量和圖像的殘差信息不需要傳送給解碼器;
- 普通CU則可以采用幀內預測和幀間預測兩種方式進行預測,然后對殘差數據以及附加的控制信息進行編碼。
通常,在圖像的右邊界和下邊界,一些CTU可能會覆蓋部分超出圖像邊界的區域,這時CTU四叉樹會自動分割,減小CB尺寸,使整個CB剛好進入圖像。
編碼時,在CTU layer通過傳輸split_cu_flags標志指明CTU是否進一步划分成四個CU。
類似地,對於一個CU,也通過一個split_cu_flags標志指明是否進一步划分成子CU。
CU通過split_cu_flags標志指示進行遞歸的划分,直到split_cu_flags==0或者達到最小的CU尺寸(mininum CU size). 對於達到最小尺寸的CU,不需要傳輸split_cu_flags標志,
CU的最小尺寸參數(通過CTU深度確定)在編碼器中確定,並在SPS中進行傳輸。
所以CU的大小范圍是:minunum size CU ~CTU,一般情況設置CTU為64,最小CU為8(通過CTU深度確定),所以此時CU大小可取8、16、32、64。
一個CTU進行編碼時,是按照深度優先的順序進行CU編碼,類似於z-scan,如下圖:右邊表示CTU的遞歸四叉樹划分,左邊表示CTU中CU的編碼順序。

視頻序列的分辨率(長和寬參數)也會在SPS中傳輸,要求長寬必須是mininum CU size的整數倍,但是可以不是 CTU size的整數倍。對於長寬不是CTU size整數倍的情況,圖像邊界處的CTU被認為已經分割成和圖像邊界重合(the CTUs at the borders are inferred to be split until the boundaries of the resulting blocks coincide with the picture boundary),對於這種邊界處默認的分割,不需要傳輸split_cu_flags標志。
CU塊是進行決策幀間、幀內、Skip/Merge模式的基本單元。
編碼單元的簡單語法


預測單元(Prediction Unit, PU)
在轉換和量化之前,首先是預測階段(包括幀內預測和幀間預測)。一個編碼單元CU可以使用以下八種預測模式中的一種進行預測。

HEVC在CU layer決定prediction mode,並將一個CU的prediction mode傳輸在bitstream中。
PU是是進行預測的基本單元,有一個PB_luma、2個PB_choma和相應的語法元素syntax element組成。
PU = Syntax(PB_Y, PB_Cb, PB_Cr)
一個編碼單元(CU)可以根據預測模式的切割類型(Splitting Type)分割成一個、兩個或是四個預測單元(Prediction Units, PUs)。
幀內編碼的編碼單元只能使用2N×2N或N×N的平方划分。幀間編碼的編碼單元可以使用平方和非對稱的方式划分。
編碼單元與預測單元的不同之處在於預測單元只能被切割一次,而且示基於編碼單元做切割。預測單元是一個預測資訊的呈現區塊,在一個預測單元內使用同預測方式(Prediction Process)。
高效率視訊編碼 (HEVC) 依照不同的預測模式將編碼單元CU分成三類,分別為以下三種,其分割方法如圖三所示:
- 畫面內編碼單元(Intra Coded CU):采用的預測方式為使用周圍影像做重建的取樣樣本,即畫面內預測(Intra Prediction)。畫面內編碼單元內僅允許方形(Square)的切割方法,分別為2Nx2N或NxN兩種。
- 畫面間編碼單元(Inter Coded CU):使用運動補償的方式做預測,即畫面間預測(Inter Prediction)。畫面間編碼單元允許八種分割方法,這些方法又可分為兩大類,
- 一為方形與矩形(Square and Rectangular)切割,這種類型的切割方法所產生的區塊皆為對稱的方式,總共含括了其中四種分割,分別為2Nx2N、NxN、2NxN及Nx2N。
- 另一類分割方式是相對於前一類的對稱方式來說,所有的分割會產生出兩個不對稱的區塊,因此稱為非對稱式(Asymmetric)切割,分別為2NxnU、NxnD、nLx2N及nRx2N(nX:表示較短的邊的位置)。這種非對稱式的切割對於輪廓或是物件邊緣的分割可以達到較好的分割效果,如圖四所示。

略過的編碼單元(Skipped CU):此為畫面間編碼單元的特例,意指移動向量差值(Motion Vector Difference)與殘余能量(residual energy)皆為零。略過的編碼單元內只允許2Nx2N的方式。
如果一個CU的prediction mode是intra prediction
對於luma CU
有35個可選的幀內預測方向
- Plannar(0)、
- DC(1)
- 方向預測(2~34)

對於mininum size的luma CB,可以平均划分成4個方形的subblocks,對於每個subblock進行獨立的幀內預測,有獨立的intra prediction mode。
也就是說對於幀內預測的CU,可以進行2Nx2N和NxN兩種PU划分模式,且NxN模式只有對mininum size CB可以使用。
幀內預測模式可以應用於4×4、8×8、16×16和32×32的變換單元。
一個幀內luma PU塊,預測模式確定之后,需要對預測模式進行編碼。
HEVC在進行幀內預測模式編碼時,先為每個intra PU確定3個最可能模式(確定策略后面介紹),假設為S={M1,M2,M3}。
然后通過判斷luma PU的幀內預測模式是否在S中,
- 如果在S中,則需要2bit編碼預測模式在S中的索引,
- 否則需要5bit編碼預測模式在另外32種模式中的索引。
最可能模式策略
對於luma PU,確定最可能3個預測模式是根據當前PU左邊和上邊的預測模式,假設左邊和上邊的預測模式分別是A和B,
- 如果左邊或上邊PU不是幀內預測模式或是PCM模式,則A或B為DC;
- 另外,如果上邊PU塊不在當前CTU內,那么B也為DC。
確定好A和B之后:
當A=B時,如果A,B都大於2,即A和B都不是Planar或DC,那么:
M1=A;
M2=2+((A-2-1+32)%32)
M3=2+((A-2+1)%32)
當A=B時,如果A,B至少有一個小於2,即A或B是Planar或DC,那么:
M1=Planar,M2=DC,M3=26(豎直方向預測)
當A!=B時,M1=A,M2=B,對於M3按照下面規則決定:
如果A和B都不是Planar,那么M3=Planar;
如果A和B都不是DC,那么M3=DC;
否則,說明{A,B}={Planar,DC},那么M3=26。
對於choma CU
有5個可選的幀內預測方向
- Planar/0、
- DC/1、
- Vertical/26、
- Horizontal/10
- luma PU的預測方向
對於預測模式的編碼,通過0表示luma PU的預測方向,100、111、101和110分別表示Planar/0、DC/1、Vertical/26和Horizontal/10。
另外,在進行幀內預測時,如果CU是mininum size CU,且將CU划分成4個PU時,那么要保證TU小於等於PU,如下圖:

表示一個8x8的CU塊分成4個PU,那么必須分成四個4x4的TU塊,至於每個TU是否進一步划分成更小的TU不作限定,只根據正常TU划分的條件判斷。這是為了提高intra預測的精確度。
圖a表示如果CU不化成4個TU,那么intra預測的距離就會較遠。
圖b則表示了將CU划分成4個TU,這時候預測右邊的小PU時,左邊的PU已經預測完成,並進行了變換和重建,可以保證預測距離更近。
如果一個CU的prediction mode是inter prediction
針對運動向量預測,H.265有兩個參考表:L0和L1。每一個都擁有16個參照項,但是唯一圖片的最大數量是8。
H.265運動估計要比H.264更加復雜。它使用列表索引,有兩個主要的預測模式:合並和高級運動向量(Merge and Advanced MV.)。
對於inter PU,luma PB和choma PBs擁有相同的PU划分模式和motion parameters(包括運動估計方向數目(1/2),參考幀索引,和對每個運動估計方向的運動矢量MV)。
HEVC中有8中PU划分模式(2Nx2N、NxN、2個SMP和4個AMP),如下圖所示:


對於NxN模式,只有mininum size CU可以使用,且8x8CU不能使用。
對於AMP模式,只有32x32和16x16的CU可以使用,8x8和64x64的CU不能使用,所以inter PU的最小尺寸為8x4和4x8,這是因為TU最小尺寸為4x4,進行變換的最小單元也是4x4。另外,HEVC可以在SPS中通過一個syntax禁用AMP。
從H.262到HEVC過程中,PU的可選大小變化如下圖:

如果一個CU的prediction mode是Skip
那么PU的划分模式只能是2N x 2N。
PS:對於4x8和8x4,HEVC規定只能用單向預測,不能用雙向預測。
在HM1中,實際可以通過inter_4x4_enabled_flag(在SPS中)指示是否使用4x4的PU。
限制
預測單元的切割在不同的預測模式有不同的限制,討論如下:
- 畫面內編碼單元(Intra Coded CU):由於輸入影像是采用YUV4:2:0的影像格式,因此對於亮度(Luma)與色度(Chroma)的切割及大小需要討論。當亮度的畫面內預測的大小為4x4的區塊,由於區塊大小最小為4x4,因此色度區塊不會繼續切割,而繼續使用4x4方式。換句話說,每一個4x4的色度區塊,會對應到4個4x4的亮度區塊。
- 畫面間編碼單元(Inter Coded CU):為了節省內存帶寬,當編碼單元的大小為8x8時,畫面間的編碼單元就不采用NxN的方式做切割,在此即為4x4的區塊大小不會出現。而且不對稱分割的方式,在編碼單元的大小不等於最小時,此種切割方式才是允許的。
轉換單元(Transform Unit, TU)
轉換單元是呈現殘量(Residual)或是轉換系數(Transform Coefficients)的區塊,這個區塊主要是做整數轉換(Integer Transform)或是量化(Quantization)。[1][3]轉換單元(Transform Unit, TU)與預測單元(PU)相似,因為編碼單元可以只有一個轉換單元或是由許多個較小的轉換單元所組成。不同之處為轉換單元可以遞回地往下繼續分割,也是用四分樹(Quadtree)的方式儲存,而預測單元只能在編碼單元做分割一次。圖五顯示出編碼單元與轉換單元的關系,實線為編碼單元,虛線為轉換單元,虛線的四分樹會長在實線四分樹的葉子節點,這是因為只有實線四分樹的葉子節點是編碼單元。[1]轉換單元內只有支援方形的分割方割(Square Partition),其大小為64、32、16、8、4。

殘量四分樹
轉換單元TU的編碼樹CT可以稱為轉換樹(Transform Tree)或是殘量四分樹(Residual Quadtree, RQT)。
殘量四分樹可以分成兩類,分別為方形殘量四分樹(Square Residual Quadtree, SRQT)或是非方形殘量四分樹(Nonsquare Residual Quadtree, NSRQT),
但是在最后的草案中非方形殘量四分樹(NSRQT)被移除掉。
圖六為非方形殘量四分樹的切割方式。

CU划分成TU中,TU的大小范圍取決於max TU size、min TU size和max TU depth三個參數決定,這三個參數在SPS level進行傳輸。
- max TU size為5表示最大TU是32x32,
- min TU size為2表示最小TU是4x4。
- max depth為3表示CU划分成TU最多划分成3層(如上圖10、11、12、13就在第3層)。
對於intra predition,要確保PU大於等於TU(即TU不跨多個intra PU),而inter predition沒有相應的限制。
另外,對於一個CU,最多有一個trasform tree syntax,所以一個CU的luma CB 和choma CBs擁有相同的TU划分。但是除了對於8x8的luma CB划分成4x4的TB時,4x4的choma CBs不會划分成2x2的TB。
限制
在相同編碼單元(CU)內的預測單元(PU)與轉換單元(TU),轉換單元的大小可以比預測單元的大小還要來的大,在同一個編碼單元內不同預測單元的殘量(Residuals)可以一起被轉換。換句話說,當編碼單元的大小等於轉換單元的大小時,轉換是對整個編碼單元去做轉換而不是對單一的預測單元一個一個做轉換。而這種情況只會出現在畫面間編碼單元(Inter Coded CU)中,因為畫面內編碼單元(Intra Coded CU)總是會造成轉換單元(TU)分割。
原文鏈接:https://zhuanlan.zhihu.com/p/67303770
CTU:
傳統的視頻編碼都是基於宏塊實現的,對於4:2:0采樣格式的視頻,個宏塊包含一個16×16大小的亮度塊和兩個8×8大小的色度塊。考慮到高清視頻超高清視頻的自身特性,H.265/HEVC標准中引入了樹形編碼單元CTU,其尺寸由編碼器指定,且可大於宏塊尺寸。同一位置處的個亮度CTB和兩個色度CTB,再加上相應的語法元素形成一個CTU。對於一個大小為L×L的亮度CTB,L的取值可以是16、32或64。在高分辨率視頻的編碼中,使用較大的CTB可以獲得更好的壓縮性能。
為了靈活、高效地表示視頻場景中的不同紋理細節、運動變化的視頻內容或者視頻對象,H.265/HEⅤC為圖像划分定義了一套全新的語法單元,包括編碼單元CU、預測單元( Prediction Unit, PU)和變換單元Transform Unit, TU)。其中編碼單元是進行預測、變換、量化和熵編碼等處理的基本單元,預測單元是進行幀內幀間預測的基本單元,變換單元是進行變換和量化的基本單元。這三個單元的分離,不僅使得變換預測和編碼各個處理環節更加靈活,也使得各環節的划分更加符合視頻圖像的紋理特征,保證編碼性能的最優化。
CU
近年來標清和高清視頻產業得到了蓬勃發展。大尺寸圖像的一個特點是平緩區域的面積更大,用較大的塊進行編碼能夠極大地提升編碼效率。在H264AVC中,編碼塊( Coding block,CB)的大小是固定的。而在H265/HEVC中,一個CTB可以直接作為一個CB,也可以進一步以四叉樹的形式划分為多個小的CB。所以H265HEVC中CB的大小是可變的,亮度CB最大為64×64,最小為8×8。一方面大的CB可以使得平緩區域的編碼效率大大提高,另一方面小的CB能很好地處理圖像局部的細節,從而可以使復雜圖像的預測更加准確。一個亮度CB和相應的色度CB及它們相關的句法元素共同組成一個編碼單元(CU)。在H265HEVC中,一幅圖像可以被划分為若干個互不重疊的CTU,在CTU內部,采用基於四叉樹的循環分層結構。同一層次上的編碼單元具有相同的分割深度。一個CTU可能只包含一個CU(沒有進行划分),也可能被划分為多個CU。

編碼單元是否繼續被划分取決於分割標志位 Split flag。對於編碼單元CUa,假設它的大小為2N×2N,深度為d。如果它對應的 Split flag值為0,則CU不再進行四叉樹划分;反之,CU4將會被划分為4個獨立的編碼單元CU1。編碼單元CUa1的深度和大小分別變為d+1和N×N。

①編碼單元的大小可以大於傳統的宏塊大小(16×16)。對於平坦區域,用一個較大的編碼單元編碼可以減少所用的比特數,提高編碼效率。這一點在高清視頻應用領域體現得尤為明顯。
②通過合理地選擇CTU大小和最大層次深度,編碼器的編碼結構可以根據不同的圖片內容、圖片大小以及應用需求獲得較大程度的優化
③所有的單元類型都統稱為編碼單元,消除了宏塊與亞宏塊之分,並且編碼單元的結構可以根據CTU大小、最大編碼深度以及一系列划分標志 Split flag簡單地表示出來。
PU
預測單元PU規定了編碼單元的所有預測模式,一切與預測有關的信息都定義在預測單元部分。比如,幀內預測的方向、幀間預測的分割方式、運動矢量預測,以及幀間預測參考圖像索引號都屬於預測單元的范疇。
對於一個2N×2N的CU模式,幀內預測單元PU的可選模式有兩種2N×2N和NXN;幀間預測單元PU的可選模式有8種:4種對稱模式(2Nx×2N、2NXN、N×2N、NXN)和4種非對稱模式(2N×nU、2NXnD、nL×2N、nRx2N)。其中2N×nU和2N×nD分別以上下1:3、3:1的比率划分,nL×2N和nR×2N分別以左右1:3、3:1的比率划分。skjp模式是幀間預測的一種,當需要編碼的運動信息只有運動參數集索引(采用運動合並技術),編碼殘差信息不需要編碼時,為2N×2 V skip模式。此外,表3.8還給出了PU相關的語法元素。

TU
變換單元是獨立完成變換和量化的基本單元,其尺寸也是靈活變化的。H265/HEVC突破了原有的變換尺寸限制,可支持大小為4×4~32×32的編碼變換,以變換單元(TU)為基本單元進行變換和量化。它的大小依賴於CU模式,在一個CU內,允許TU跨越多個PU,以四叉樹的形式遞歸划分。對於一個2N×2N的CU,有一個標志位決定其是否划分為4個NXN的TU,是否可以進一步划分由SPS中的TU的最大划分深度決定。根據預測殘差的局部變化特性,TU可以自適應地選擇最優的模式。大塊的TU模式能夠將能量更好地集中,小塊的TU模式能夠保存更多的圖像細節。 這種靈活的分割結構,可以使變換后的殘差能量得到充分壓縮,以進一步提高編碼增益。

作者:Persistently
鏈接:https://www.jianshu.com/p/52e6184a95e6
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。