第四章 視頻編碼基礎
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數目少,適合簡單運動場景的運動估計