1. 程式人生 > >H 264的兩個概念 DC係數和AC係數 MV預測過程詳解(附圖)

H 264的兩個概念 DC係數和AC係數 MV預測過程詳解(附圖)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

在做熵編碼之前,先明確兩個概念:DC係數和AC係數。
量化後得到的仍是64個係數,量化並沒有改變係數的性質。大家知到DCT變換是將資料域從時(空)域變換到頻域,在頻域平面上變換系數是二維頻域變數u和v的函式。對應於u=0,v=0的係數,稱做直流分量,即DC係數,其餘63個係數稱做AC係數,即交流分量。

DC係數:對應於u=0,v=0的係數,稱做直流分量,即DC係數。
AC係數:其餘63個係數稱做AC係數,即交流分量。

===========第一步:確定相鄰塊===========

      MV 預測以巨集塊分割(或亞巨集塊分割,如果巨集塊存在亞分割)為單位,同一個巨集塊分割(或亞巨集塊分割)內所有 4*4 塊 MV 預測值相同。以每個巨集塊分割(或亞巨集塊分割)的左上角畫素 pixel1 和右上角畫素 pixel2 為參考點來確定相鄰塊則:
      pixel1 左側相鄰畫素所在 4*4 塊為當前巨集塊分割(或亞巨集塊分割)的相鄰塊 A
      pixel1 上方相鄰畫素所在 4*4 塊為當前巨集塊分割(或亞巨集塊分割)的相鄰塊 B
      pixel2 右上對角線畫素所在 4*4 塊為當前巨集塊分割(或亞巨集塊分割)的相鄰塊 C
      pixel1 左上對角線畫素所在 4*4 塊為當前巨集塊分割(或亞巨集塊分割)的相鄰塊 D

MV預測示意圖

下載 (85.25 KB)
2006-9-29 11:14 AM



      以最複雜的 8*8 巨集塊分割型別為例(此時只存在亞巨集塊分割),分析如下:
      假設圖中黑色框表示巨集塊、每個綠色框表示一個 4*4 塊、每個紅色框表示一個 8*8 塊。當前巨集塊的巨集塊分割模式為 8*8(如圖中紅色線),其亞巨集塊分割模式分別為:第一個 8*8 塊為 8*8,第二個 8*8 塊為 4*4(如圖中藍色線),第三個 8*8 塊為 4*8(如圖中藍色線),第四個 8*8 塊為 8*4(如圖中藍色線)。則按照上述方法來確定相鄰塊的方法如下:
      第一個預測物件為第一個 8*8 塊,以其左上角畫素 pixel1 和右上角畫素 pixel2 為參考點,則:A 為 7 號 4*4 塊,B 為 2 號 4*4 塊,C 為 4 號 4*4 塊,D 為 1 號 4*4 塊。9、14、15 與 8 具有相同 MV 預測值
      第二個預測物件為第二個 8*8 塊的第一個 4*4 塊,即 10 號塊,以其左上角畫素 pixel1 和右上角畫素 pixel2 為參考點,則:A 為 9 號4*4塊,B 為 4 號4*4塊,C 為 5 號 4*4 塊, D 為 3 號 4*4 塊
      第三個預測物件為第二個 8*8 塊的第二個 4*4 塊,即 11 號塊,以其左上角畫素 pixel1 和右上角畫素 pixel2 為參考點,則:A 為 10 號4*4塊,B 為 5 號4*4塊,C 為 6 號 4*4 塊,D 為 4 號 4*4 塊
      第四個預測物件為第二個 8*8 塊的第三個 4*4 塊,即 16 號塊,以其左上角畫素 pixel1 和右上角畫素 pixel2 為參考點,則:A 為 15 號4*4塊,B 為 10 號4*4塊,C 為 11 號 4*4 塊,D 為 9 號 4*4 塊
      第五個預測物件為第二個 8*8 塊的第四個 4*4 塊,即 17 號塊,以其左上角畫素 pixel1 和右上角畫素 pixel2 為參考點,則:A 為 16 號4*4塊,B 為 11 號4*4塊,C 為 12 號 4*4 塊,D 為 10 號 4*4 塊
      第六個預測物件為第三個 8*8 塊的第一個 4*8 塊,以其左上角畫素 pixel1 和右上角畫素 pixel2 為參考點,則:A 為 19 號 4*4 塊,B 為 14 號 4*4 塊,C 為 15 號 4*4 塊,D 為 13 號 4*4 塊。26 與 20 具有相同 MV 預測值
      第七個預測物件為第三個 8*8 塊的第二個 4*8 塊,以其左上角畫素 pixel1 和右上角畫素 pixel2 為參考點,則:A 為 20 號 4*4 塊,B 為 15 號 4*4 塊,C 為 16 號 4*4 塊,D 為 14 號 4*4 塊。27 與 21 具有相同 MV 預測值
      第八個預測物件為第四個 8*8 塊的第一個 8*4 塊,以其左上角畫素 pixel1 和右上角畫素 pixel2 為參考點,則:A 為 21 號 4*4 塊,B 為 16 號 4*4 塊,C 為 18 號 4*4 塊,D 為 15 號 4*4 塊。23 與 22 具有相同 MV 預測值
     第九個預測物件為第四個 8*8 塊的第二個 8*4 塊,以其左上角畫素 pixel1 和右上角畫素 pixel2 為參考點,則:A 為 27 號 4*4 塊,B 為 22 號 4*4 塊,C 為 24 號 4*4 塊,D 為 21 號 4*4 塊。29 與 28 具有相同 MV 預測值



===========第二步:確定 A、B、C 的可用性===========

根據 A、B、C 所在巨集塊是否存在或者是否允許參與預測來判斷。如果 C 不可用,採用 D 代替 C




===========第三步:預測 MV ===========

1、如果 A、B、C 三個參考塊中只有一個與當前預測物件為同一參考幀,則選取該參考塊的 MV 作為最終 MV 預測值
2、當前巨集塊是否為 8*16 或者 16*8 分割:
(1)、如果當前巨集塊為 8*16 分割型別:
          對於左邊 8*16 分割,如果 A 與當前分割為同一參考幀,則採用 A 的 MV 為該分割的最終 MV 預測值
          對於右邊 8*16 分割,如果 C 與當前分割為同一參考幀,則採用 C 的 MV 為該分割的最終 MV 預測值
(2)、如果當前巨集塊為 16*8 分割型別:
          對於上邊 16*8 分割,如果 B 與當前分割為同一參考幀,則採用 B 的 MV 為該分割的最終 MV 預測值
          對於下邊 16*8 分割,如果 A 與當前分割為同一參考幀,則採用 A 的 MV 為該分割的最終 MV 預測值
3、其餘情況並且 B、C 中有一個可用或者兩者都可用,則採用中值預測(取 A、B、C 三者中MV的中值為最終 MV 預測值)
4、其餘情況並且 B、C 皆不可用,則採用 A 的 MV 為最終 MV 預測值


【注】:1、巨集塊分割時的相鄰塊確定方法與第一步所述過程雷同:16*16 相當於 8*8,8*16、16*8 分別相當於 4*8、8*4
            2、對於不可用的相鄰塊,其 MV 仍然可能參與 MV 預測,但其值為 0。例如:A 不可用,B、C 可用,則最終可能仍然是在 A、B、C 中取中值,但此時 A 的 MV 為 0;
            3、對於不可用的相鄰塊,其參考幀索引被設定為 -1,即必然與當前預測物件非同一參考幀;
            4、可以驗證:同時滿足第三步的第一、第二兩種情況時,按第一種情況計算 MV 預測值與按第二種情況計算 MV 預測值等效;
            5、該預測過程即為標準 8.4.1.3 小節的內容,在 JM86 中對應的程式碼為 SetMotionVectorPredictor 函式;
            6、MBAFF 情況下的相鄰塊均指對應位置(co-locate)塊。

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述