CTU: 編碼樹單元
CU: 編碼單元
PU: 以CU爲根,對CU進行劃分,一個預測單元PU包含一個亮度預測塊PB和兩個色度預測塊PB.
TU: 以CU爲根,變換單元TU是在CU的基礎上劃分的,跟PU沒有關係,採用四叉樹劃分方式,具體劃分有率失真代價決定,下圖給出了某個CU劃分紅TU的結構。html
HEVC Encoder總體框架:算法
CU是用做幀間和幀內編碼的基礎模塊,它的特色是方塊,它的大小從8×8到最小64×64,LCU是64x64,可使用遞歸分割的四分樹的方法來獲得,大的CU適用於圖像中比較平滑部分,而小的部分則適用於邊緣和紋理較豐富的區域。CU採用四叉樹的分割方式,具體的分割過程經過兩個變量來標記:分割深度(Depth)和分割標記符(Split_flag)。網絡
在設置CTU大小爲64X64的狀況下,一個亮度CB最大爲64X64即一個CTB直接做爲一個CB,最小爲8X8,則色度CB最大爲32X32,最小爲4X4。每一個CU包含着與之相關聯的預測單元(PU)和我變換單元(TU).框架
Z掃描順序:ide
PU是預測的最基本的單元,是從CU中分割出來的,HEVC中對於skip模式、幀內模式和幀間模式。
幀內預測有2種劃分模式,只有在CU尺寸爲8x8時,才能用PART_NxN。
幀間有8種劃分模式,PU可使方形也可使矩形,可是其分割不是遞歸的,與CU的分割仍是有區別的。尺寸最大爲64×64到最小4×4。性能
TU也是採用四叉樹劃分,以CU爲根,TU能夠大於PU,可是卻不能夠大於CU的大小。
在幀內編碼過程當中,TU 的尺寸嚴格小於 PU 的尺寸;
在幀間編碼過程當中,TU 的尺寸不必定小於PU 的尺寸,但必定小於其對應 CU 的尺寸。優化
Slice能夠包含一個獨立的Slice Segment(SS)和多個非獨立的SS,一個Slice中的SS能夠互相依賴,但不能依賴其它Slice。圖中,虛線是SS分隔線,實線是Slice分隔線。編碼
Tile是一個矩形塊,Slice是一個條帶。
Tile、Slice須要知足如下兩個條件之一:spa
幀內預測模式共35個(h264有9個),包括Planar,DC,33個方向模式:3d
模式編號 | 模式名稱 |
---|---|
0 | Planar模式 |
1 | DC模式 |
2~34 | 33種角度預測模式 |
除了Intra_Angular預測外,HEVC還和H.264/MPEG-4 AVC同樣,支持Intra_Planar, Intra_DC預測模式;
. Intra_DC 使用參考像素的均值進行預測;
. Intra_Planar 使用四個角的參考像素獲得的兩個線性預測的均值;
劃分模式:幀內只能使用PART_2Nx2N、PART_NxN兩種。
Skipped模式:無MV差別和殘差信息的幀間預測模式
針對運動向量預測,H.265有兩個參考表:L0和L1。每個都擁有16個參照項,可是惟一圖片的最大數量是8。H.265運動估計要比H.264更加複雜。它使用列表索引,有兩個主要的預測模式:合併和高級運動向量(Merge and Advanced MV.)。
最小均方偏差(Mean Square Error,MSE)
最小平均絕對偏差(Mean Absolute Difference,MAD)
最大匹配像素數(Matching-Pixel Count,MPC)
絕對偏差和(Sum Of Absolute Difference,SAD)
最小變換域絕對偏差和(Sum Of Absolute Transformed Difference,SATD)
通常用SAD或者SATD。SAD不含乘除法,且便於硬件實現,於是使用最普遍。實際中,在SAD基礎上還進行了別的運算來保證失真率。
全搜索: 全部可能的位置都計算兩個塊的匹配偏差,至關於原塊在搜索窗口內一個像素一個像素點的移動匹配
菱形搜索: 在x265中實際是十字搜索,僅對菱形對角線十字上的塊進行搜索
HM的則是全搜索和TZSearch以及對TZSearch的優化的搜索。
HEVC在預測方面提出了兩種新的技術–Merge && AMVP (Advanced Motion Vector Prediction)都使用了空域和時域MV預測的思想,經過創建候選MV列表,選取性能最優的一個做爲當前PU的預測MV,兩者的區別:
Merge
當前塊的運動信息能夠經過相鄰塊的PUs運動信息推導出來,只須要傳輸合併索引,合併標記,不須要傳輸運動信息。
空間合併候選:從5個不一樣位置候選中選擇4個合併候選
圖中即是5個PU,可是標準規定最多四個,則列表按照A1–>B1–>B0–>A0–>(B2)的順序創建,B2爲替補,即當其餘有一個或者多個不存在時,須要使用B2的運動信息。
時間合併候選:從2個候選中選擇1個合併候選
從C三、H中選擇一個:
AMVP
構造一個時空PUs的運動矢量候選列表,當前PU遍歷候選列表,經過SAD選擇最優預測運動矢量。
空間運動矢量候選:從5個位置中左側、上側分別選1個共2個候選
而AMVP的選擇順序,左側爲A0–>A1–>scaled A0–>scaledA1,其中scaled A0表示將A0的MV進行比例伸縮。
上方爲B0–>B1–B2–>(scaled B0–>scaled B1–>scaled B2)。
然而,x265並不在意標準,咱們要的就是速度,因此在x265的代碼中,只能看到它使用AMVP且對應的變量是
圖中的代號 | x265中代碼變量中包含 |
---|---|
B2 | ABOVE_LEFT |
B1 | ABOVE |
B0 | ABOVE_RIGHT |
A1 | LEFT |
A0 | BELLOW_LEFT |
且對左側和上側分別if-else,選出兩個。
時間運動矢量候選:從2個不一樣位置候選中選擇1個候選
C0(右下) represents the bottom right neighbor and C1(中心) represents the center block.
Skip vs Merge:
分數像素內插:
用於產生非整數採樣位置像素值的預測樣本。
熵編碼
目前HEVC規定只使用CABAC算術編碼。
去塊效應濾波器
消除反量化和反變換後因爲預測偏差產生的塊效應,即塊邊緣處的像素值跳變。
自適應樣點補償
經過對重建圖像進行分類,對每一類圖像像素值進行加減1,從而達到減小失真,提升壓縮率,減小碼流的做用。
目前自適應樣點補償分爲帶狀補償,邊緣補償:
Wavefront Parallel Processing (WPP) WPP的並行技術是以一行LCU塊爲單位進行的,可是不徹底截斷LCU行之間的關係,以下圖,Thread1的第二個塊的CABAC狀態保存下來,用於Thread2的起始CABAC狀態,依次類推動行並行編碼或解碼,所以行與行之間存在很大的依賴關係。一般該方法的壓縮性高於tiles。