Skip宏塊與Direct預測模式淺析



來自:http://blog.chinaunix.net/uid-13423116-id-2894428.html


B_Skip類型宏塊(200503版標準,表7-14最後一行): 無像素殘差,無運動矢量殘差(MVD)。解碼時,通過Direct預測模式(時間或空間)計算出前、後向MV後,直接利用前、後向MV得到像素預測值。像素重構值=像素預測值        

B_Direct_16*16 類型宏塊(200503版標準,表7-14第一行):有像素殘差,無運動矢量殘差(MVD)。解碼時,通過Direct預測模式(時間或空間)計算出前、 後向MV後,利用前、後向MV得到像素預測值。然後,像素重構值=像素預測值+像素殘差解碼值      

P_Skip類型宏塊(200503版標準,表7-13最後一行):也就是COPY宏塊。無像素殘差,無運動矢量殘差(MVD)。直接利用預測MV得到像素預測值。像素重構值=像素預測值  。

 
請一定不要把 Direct 類型宏塊、Skip 類型宏塊、Direct 預測模式這三個混淆了。B_Skip 類型宏塊(大小爲 16*16)、B_Direct_8*8 類型塊(大小爲 8*8)和B_Direct 類型宏塊(大小爲 16*16)都採用的是 Direct 預測模式;可以看到兩種skip類型既無殘差也無運動矢量差值,B_Direct分爲對16*16和8*8,都是無MVD但是帶殘差。解碼時,通過預測計 算MVPred,再依靠幀間運動補償恢復宏塊的亮度色度信息。
 
Skipped Macroblock 是宏塊類型,Direct Prdeiction 是宏塊的預測方式
Skipped Macroblock 顧名思義就是跳過不編碼的宏塊,那麼在解碼端如何重構這個宏塊呢?這就有兩種選擇:
1、採用 Direct 方式(這是一種特殊的預測方式)先預測出其 MV,後面的處理就跟一般的幀間宏塊類似了(根據 MV 獲取參考圖像,再進行插值重構);
2、不採用 Direct 方式進行預測,而直接 copy 參考宏塊。

第一種選擇正是 B 片中的 Skip 宏塊所採取的方式,同時又分爲空間和時間 Direct 預測方式
第二種選擇正是 P 片中的 Skip 宏塊所採用的方式,也就是直接 copy 參考宏塊

現 在應該明白 Skip 與 Direct 的聯繫了吧?但要注意的是 B 片中有一種類型的宏塊:B_Direct_16*16,它很特殊,它的名字裏有“Direct”這個單詞 ,它的預測方式也採用的 Direct 方式。這種類型的宏塊即有 B 片中的 Skip 宏塊的特性(MV 採用 Direct 預測方式得到),同時又有一般幀間宏塊的特性(有像素殘差,Skip 宏塊是沒有像素殘差的)。
 
給大家一個直觀的理解:
1,在圖像序列裏確實存在這樣的情況:當前MB(或者submb)的數據和以往圖像中的某一塊完全一樣(主要針對視頻中的運動物體),所以從理論上完全可以不傳輸這一塊的數據,而有以往的數據。

2.那麼這個以往的數據採用哪一幀呢?顯然對於運動物體採用緊鄰那一幀最好(至少mv最小的可能性大)。
3.採用哪一塊呢?  這個有一點麻煩,但是從邏輯上講如果運動物體的邊緣確定了,中間的塊和邊緣的塊的mv應該一致,所以從臨近塊中得到mv就是很自然的想法了。

以上就是P幀SIKP的想法。當然按照這個想法做,不是所有的運動物體都能很好的找到匹配塊,但是視頻編碼考慮的是效果和算法的平衡。
當一個skip宏塊在比特流中被申明,就不必爲這個宏塊傳輸數據了。解碼器會爲這個跳過宏塊計算向量和利用來自list0的首參考幀的MC預 測去重構這個宏塊。普通的(非skip)幀間預測, 先得到MVPRED, 然後搜索得到最佳匹配塊. (判斷最佳的方法....是可能使用MAD作爲判斷標準....) 然後把模式, 運動殘差(MVD), CBP, 和像素殘差一起編碼傳輸 (或者還有其他一些flags)



那麼在編碼時怎樣判斷當前塊可以是skip塊呢? 沒什麼好辦法,只能先假定它就是,然後算一下參差是否爲0。當然你可以用量化後的數值計算,這樣會在一定程度上增大找到sikp的概率。
如果滿足以下三個條件則將宏塊按 Skip 類型進行編碼:
(1)最佳模式選擇爲Inter16×16;
(2)MC得到的最終運動矢量等於預測運動矢量,即運動矢量的殘差爲0;
(3)變換系數均被量化爲0。

B幀和P幀的想法類似,說起來有點累(因爲它有2個參考幀,2種所謂的預測模式),大家可以自己想一想。

總結一下:
圖 像壓縮研究了很久,但是基本思想卻沒有什麼突破:空間的相關性和時間的相關性。在加上要考慮實現的難度,所以基本的思路很簡單。不要看264寫的那麼復 雜,其實每一條的出處的想法都很簡單,所以建議大家多考慮一下實際的圖形序列是什麼樣的,再來理解爲什麼這樣做和各種做法的區別,就沒那麼困難了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章