第四章 視頻編碼基礎
1. 壓縮碼流
-
語法:碼流中各個元素的位置關系
- 01001001…
- 圖像編碼類型(01),宏塊類型(00),編碼系數1001等
-
語義:每個語法元素所表達的意義。
- 例如:圖像編碼類型
2. 編碼層次
- 序列(Sequence)
- 圖像組(Group of Pictures,GOP)
- 圖像(Picture)
- 條帶(Slice)
- 宏塊(Macroblock,MB)
- 塊(Block)
3. 碼流結構
3. PB幀編碼
4. 序列編碼對象
(1)IBBP序列
- 序列:一段連續編碼的並具有相同參數的視頻圖像。
-
序列起始碼:專有的一段比特串,標識一個序列的壓縮數據的開始
- MPEG-2的序列起始碼為十六進制數000001(B3)。
-
序列頭:記錄序列信息
- 檔次(Profile),級別(Level),寬度,高度,是否是逐行序列,幀率等。
-
序列結束碼:專有的一段比特串,標識該序列的壓縮數據的結束
- MPEG-2的序列結束碼為十六進制數000001(B7)。
5. 圖像組編碼對象
6. 圖像編碼結構
- 圖像:
-
圖像起始碼:專有的一段比特串,標識一個圖像的壓縮數據的開始
- MPEG-2的圖像起始碼為十六進制數000001(00)。
-
圖像頭:記錄圖像信息
- 圖像編碼類型,圖像距離,圖像編碼結構,圖像是否為逐行掃描。
7. 圖像分塊編碼
8. 條帶編碼結構
- 條帶:多個宏塊的組合。
-
條帶起始碼:專有的一段比特串,標識一個條帶的壓縮數據的開始
- MPEG-2的條帶起始碼為十六進制數000001(0~AF)。
-
條帶頭:記錄當前圖像的相關信息
- 條帶位置,條帶量化參數,宏塊編碼技術標識等。
9. 條帶編碼對象
10. 宏塊編碼結構
- 宏塊:16x16的像素塊(對亮度而言)。
- 宏塊內容:宏塊編碼類型,編碼模式,參考幀索引,運動矢量信息,宏塊編碼系數等。
11. 宏塊編碼對象
12. 塊編碼結構
- 8x8或4x4塊的變換量化系數的熵編碼數據。
-
CBP (Coded Block Patten):用來指示塊的變換量化系數是否全為零。
- 對於YUV(4:2:0)編碼,CBP通常6比特長,每個比特對應一個塊,當某一塊的變換量化系數全為零時,其對應比特位值為0,否則為1。
- 每個塊的變換量化系數的最后用一個EOB (End of Block)符號來標識。
13. 視頻編解碼關鍵技術
- 預測:通過幀內預測和幀間預測降低視頻圖像的空間冗余和時間冗余。
- 變換:通過從時域到頻域的變換,去除相鄰數據之間的相關性,即去除空間冗余。
- 量化:通過用更粗糙的數據表示精細的數據來降低編碼的數據量,或者通過去除人眼不敏感的信息來降低編碼數據量。
- 掃描:將二維變換量化數據重新組織成一維的數據序列。
- 熵編碼:根據待編碼數據的概率特性減少編碼冗余。
14. 預測
-
空間預測:利用圖像空間相鄰像素的相關性來預測的方法。
- 幀內預測技術:利用當前編碼塊周圍已經重構出來的像素預測當前塊
- Intra圖像編碼(I幀)
-
時間預測:利用時間上相鄰圖像的相關性來預測的方法。
- 幀間預測:運動估計(Motion Estimation,ME),運動補償(Motion Compensation,MC)
- Inter圖像編碼:前向預測編碼圖像(P幀),雙向預測編碼圖像(B幀)
15. 幀內預測
- I幀圖像的每個宏塊都采用幀內(Intra)預測編碼模式。
- 宏塊分成8x8或者4x4塊,對每個塊采用幀內預測編碼,稱作Intra8x8或者Intra4x4。
- 幀內預測有多個預測方向:水平,垂直,左下,右上。
- 幀內預測還有直流(DC)預測。
-
色度塊預測還有平面預測。
16. 幀間預測
- 塊基運動估計:為待預測塊在參考幀上找到最佳的預測塊,並記錄預測塊在參考幀上的相對位置。
-
運動矢量(MV):參考幀上的預測塊與當前幀上的的待預測塊的相對位置。
- MV有兩個分量:(x,y)
-
分像素運動估計
- 最佳的預測塊不在整像素位置,而在分像素位置;
- 1/2,1/4,1/8像素插值得到分像素值。
-
幀間預測流程:
- 運動補償:給定MV和參考幀,為待解碼塊從參考幀上獲取預測塊。
-
運動矢量編碼
- MV預測:用當前塊的周圍可得到鄰塊的運動矢量來預測當前塊的運動矢量
- 運動矢量差(MV difference,MVD):實際運動矢量與預測運動矢量的差,即:
-
運動矢量差采用變長編碼。
17. 預測殘差
18. 變換編碼
- 變換編碼:通過變換將空域信號轉換為頻域信號來去除空間信號的冗余信息,減少編碼數據。
-
二維離散余弦變換
- 4x4變換,8x8變換
- 二維離散余弦變換
例:
- 變換系數:直流(DC)系數,交流(AC)系數
19. 量化
- 量化原理:將含有大量的數據集合映射到含有少量的數據集合中。
- 一般情況下量化后高頻部分包含大量的零系數
- 量化對主觀質量的影響
20. 掃描
- 掃描:將二維數據轉換為一維的數據序列。
21. 熵編碼
- 熵編碼:根據符號出現的概率,對經常出現的符號分配較短的碼字,對不常出現的符號分配較長的碼字。
- Level-Run編碼:用數據中非零值和其前面非零值之間出現零值的個數重新描述量化系數序列為(Level,Run)二元組序列
-
變長編碼
- 將Level-Run編碼后的(level,run)變長編碼成最終的比特串。
22. 碼率控制
- 受到緩沖區,帶寬的限制,編碼碼率不能無限制的增長,因此需要通過碼率控制來將編碼碼流控制在目標碼率范圍內。
-
一般通過調整量化參數的手段控制碼率
- 幀級控制
- 條帶級控制
- 宏塊級控制
-
碼率控制考慮的問題
- 防止碼流有較大的波動,導致緩沖區發生溢出,
- 同時保持緩沖區盡可能的充滿,讓圖像質量盡可能的好而且穩定
-
CBR(Constant Bit Rate)
- 比特率穩定,但圖像質量變化大
-
VBR(Variable Bit Rate)
- 比特率波動大,但圖像質量穩定
-
碼率控制算法
- 碼率分配
- 碼率控制
-
碼率控制屬於非標准技術
- 編碼端有,解碼端沒有
第5章 預測
1. 預測技術
- 目的:去除空間冗余和時間冗余。
-
視頻存在大量的空間冗余和時間冗余
-
空間冗余:用幀內預測編碼去除
- 基於塊的幀內預測
-
時間冗余:用幀間預測編碼去除
- 基於塊匹配(Block Matching)的幀間預測
-
- 預測后得到去除大部分空間或時間冗余的殘差
2. 空間冗余
- 圖像空間相鄰像素具有很強的相關性。
- 幀內預測技術去除空間冗余
3. 亮度預測模式
4. 色度預測模式
5. 時間冗余
- 視頻圖像在時間上有較強的相關性,即存在時間冗余
-
去除時間冗余的編碼技術
-
運動估計(Motion Estimation,ME)
- 為待編碼塊搜索最相似的預測塊
- 記錄運動矢量(Motion Vector,MV)
- 記錄預測殘差:
-
運動補償(Motion Compensation,MC)
- 根據運動矢量獲取預測塊
- 根據預測殘差計算重構塊:
-
6. 運動模型
(1)平移
7. 匹配准則
8. 匹配准則簡化
-
簡化技術方法
- 分別計算當前塊和預測塊的象素值和
- 根據簡化形式,比較當前塊和預測塊
- 如果用簡化准則對預測塊和當前塊比較的結果比以前最好的結果差,可以確定預測效果不好,不必對預測塊再進行比較。
9. 運動估計
- 去除視頻圖像的時間冗余
- 運動估計在搜索范圍內為當前塊尋找匹配最好的預測塊
- 全搜索方式的運動估計計算復雜度高
10. 全搜索復雜度分析
- 圖像大小:MxM
- 預測塊大小:NxN
- 搜索范圍:(-R,R)
- 每個搜索點象素比較個數:N2
- 搜索點個數(2R+1)2
- 在搜索范圍內的象素比較個數總和N2(2R+1)2
- 一幀圖像所有塊的全搜索象素比較個數總和N2(2R+1)2(M/N)2=(2R+1)2M2
-
例:M=512,N=4,R=8,幀率:30幀/秒
(2R+1)2M2
=172X5122
= 75759616次/幀
= 75759616x30次/秒
=2272788480次/秒
采用SSD匹配准則:每次象素比較需1個減法,1個乘法,1個加法,則上述全搜索計算每秒需要2272788480x2次加減法和2272788480次乘法操作。
11. 快速運動估計
-
在保持預測精度的同時減少運動估計的搜索次數。
- 三步搜索(Three Step Search,TSS)
- 二維Log搜索(2D Logarithmic Search,2DLOG)
- 正交搜索(Orthogonal Search Algorithm,OSA)
- 十字搜索(Cross Search Algorithm,CSA)
- 新三步搜索(New Three Step Search,NTSS)
- 四步搜索(Four Step Search,FSS)
- 共軛方向搜索(Conjugate Direction Search,CDS)
- 梯度下降搜索(Gradient Descent Search,GDS)
- 層次塊搜索(Hierarchical Block Matching Algorithm,HBMA)
12. 三步搜索
- 由粗到精搜索最優點,初始步長為R/2.
- 第一步:檢查起始點和其周圍步長為R/2的8個點,將最優點作為第二步的起始點;
- 第二步:以新的起始點為中心檢查其周圍步長為R/4的8個點,找到最優點作為第三步的起始點;
- 第三步:以新的起始點為中心檢查其周圍步長為R/8的8個點,找到最優點,如果R/8=1則搜索終止,最優點位置的預測塊作為最優的預測塊,否則重復該過程直到R/n2=1;
- 三步搜索方法檢查點的個數為1+8log2(d+1),當d=8時,檢查點個數為9+8+8=25
13. 二維Log搜索
- 每一步采用十字搜索模式
- 如果每一步的最優點為中心點或者搜索窗的邊界點,搜索步長減半,否則搜索步長不變
- 當搜索步長為1時,中心點周圍的8個點都要檢查
- 兩個搜索路徑一個需要5+3+3+8=19,另外一個需要5+3+2+3+2+8=23
14. 正交搜索
- 起始搜索步長R/2,從起始點開始水平搜索三個點,得到最優點並沿着最優點垂直方向搜索相鄰的兩個點,得到最優點,以搜索步長為R/4再以同樣的方式先水平再垂直搜索,當步長為1時停止搜索
- 搜索方法檢查點的個數為1+4log2(d+1),當d=8時,檢查點個數為3+2+2+2+2+2=13。
15. 十字搜索
- 起始搜索步長R/2,從起始點開始以"X"形十字搜索,當搜索步長降為1時,如果上一步的最優點為中心點,左上點或右下點,則這一步搜索以"+"形狀十字搜索,然后結束搜索,否則還是以"X"形十字搜索,然后結束搜索。
- 十字搜索方法檢查點的個數為1+4log22d,當d=8時,檢查點個數為5+4+4+4=17
16. 新三步搜索
- 與三步搜索方法不同的是,考慮到運動矢量高的中心分布特點,新三步搜索方法,除了圍繞起始點為中心搜索步長為R/2的8個點之外,在起始點周圍增加了步長為1的8個搜索點,如果最優點為步長為1的8個搜索點之一,則在最優點鄰近的三個點中搜索最優點,然后結束搜索,否則,和三步搜索方法過程一樣
- 其中一個搜索路徑需要檢查點個數為17+3=20,另一個需要17+8+8=33。
17. 塊梯度下降搜索
- 該方法以起始點為中心搜索8個步長為1的相鄰點,確定最優點,再以最優點為中心搜索8個步長為1的相鄰點,如此循環下去,不限制搜索步驟,但當搜索得到的最優點為中心點或者到搜索窗的邊界,搜索終止。
18. 層次塊搜索
- 對編碼圖像和參考圖像下采樣,分別得到編碼圖像和參考圖像的下采樣圖像,未經采樣處理的編碼圖像和參考圖像屬於第0層,一次下采樣的編碼圖像和參考圖像屬於第1層,對第1層圖像再進行下采樣得到的編碼圖像和參考圖像屬於第2層,依次重復上述過程,得到第n層下采樣的編碼圖像和參考圖像。
- 然后在n層下采樣參考圖像的搜索范圍中找到與下采樣編碼圖像塊最佳匹配塊的MV,該MV作為n-1層的運動估計搜索范圍的中心點,依次重復上述過程,直到n=0為止,此時得到的最佳匹配塊就是編碼圖像的預測塊,其對應的MV為最終的最優MV。
19. 搜索算法復雜度比較
20 . 分像素運動估計與運動補償
- 時域運動位置更可能在整象素之間,即分像素上。
-
利用相鄰的整象素可以估計出分象素的值
- 常用線性或雙線性插值得到分象素的值。
-
分象素運動估計有更高的預測精度,但復雜度也更高,
- 1/2分象素運動估計,圖像存儲空間增加4倍,運動矢量需要放大2倍,1/4分象素運動估計,圖像存儲空間增加16倍,運動矢量需要放大4倍,計算復雜度也成倍增加。
21. 分像素插值
22. 多參考幀預測
- 有更多的候選圖像,搜索更精確的預測塊
- 需要更多的參考圖像存儲空間
- 碼流需要標識參考幀索引的語法元素
23. 圖像分塊編碼
- 視頻內容的運動非常復雜,圖像分塊編碼可以更好的提高運動預測精度,提高壓縮效率。
- 要在編碼塊大小和附信息(MV,Mode)編碼比特數之間權衡,小的編碼塊大小會有更好的預測但有更多的附信息比特數。
23. 雙向預測編碼
24. B幀有更好的編碼效率
-
B幀有更好的編碼效率
- 新出現的對象參考將來的幀有更好的預測效果
- 前后兩個預測的平均值可以減少預測方差
25. 全局運動估計
- 基於全局仿射運動模型
- 預測精度不如基於塊的運動估計
- MV數目少,適合簡單運動場景的運動估計