天天看點

H.264(三)熵編碼和指數哥倫布編碼

                                                                H.264中的文法元素符

H.264(三)熵編碼和指數哥倫布編碼

編碼器

H.264(三)熵編碼和指數哥倫布編碼

解碼器

H.264(三)熵編碼和指數哥倫布編碼

1. 熵編碼(Entropy encoding)

熵(shang)編碼屬于無損編碼,它聽着很高大上,其實簡單來說,就是代表了一類編碼方法。熵編碼包括的編碼方法有:香農-範諾編碼、哈夫曼編碼、算術編碼、指數哥倫布編碼、CAVLC、CABAC等,這一類編碼方法的宗旨,就是找到一種編碼,使得碼字的平均碼長達到熵極限。

具體實施起來就是,對出現機率較大的符号,取較短的碼長,而對出現機率較小的符号取較大的碼長。這就是熵編碼的中心思想,隻要我們記住這一點,即使不了解“熵”是指啥,也能掌握上述幾種熵編碼。

不過我們還是簡單介紹一下,“熵”是指啥?

1.1 熵

熵在熱力學中,是表示分子狀态混亂程度的實體量,這時的熵稱為熱熵。後來資訊論之父香農(C. E. Shannon)把“熵”這一詞引入到資訊論中,稱為“資訊熵”,資訊越是随機,它的熵值越高。資訊熵也是我們在h264這樣的數字圖像編碼中使用的概念。因為我們待編碼的圖像像素資訊、碼流的各個句法元素值,其實都屬于資訊。

而資訊熵,就是為了解決資訊的量化度量問題,它描述了整個信源的平均資訊量。資訊熵在我們的熵編碼中,表示了信源無損編碼後平均碼長的下限。是以我們上面才說,熵編碼就是為了使編碼後,碼字的平均碼長盡量達到熵極限。而且平均碼長越接近熵,說明熵編碼的壓縮效率越高。

1.2 熵和熵編碼

如果第一次接觸熵,确實不好了解。因為它不僅涉及到資訊學的知識,還有機率論的知識。不過雖然熵不好了解,但是熵編碼很好掌握。熵其實就相當于内功,而熵編碼是招式。待我們學過熵編碼,再來了解熵,就容易多了。

1.3 熵編碼分類

為了便于了解,上述說的多個熵編碼方法,還可以分為以下兩類:

(1)變長編碼:香農範諾編碼、哈夫曼編碼、指數哥倫布編碼、CAVLC

(2)算術編碼、CABAC等算術編碼

而且這些熵編碼方法中,在H.264中應用的有:指數哥倫布編碼、CAVLC、算術編碼、CABAC。

2. 指數哥倫布編碼(編碼過程)

指數哥倫布編碼和哈夫曼編碼一樣,都屬于變長編碼的一種。

二者的顯著差別:

  •     信源無關性:哈夫曼編碼依賴于信源的機率分布;指數哥倫布編碼與信源無關。
  •     額外資訊:哈夫曼編碼的資料必須額外攜帶關于該信源比對的碼表;指數哥倫布編碼無需攜帶任何額外資訊。
H.264中定義的指數哥倫布編碼共分四類:
H.264(三)熵編碼和指數哥倫布編碼
其中ue(v)是其他變型算法的基礎,其他算法的結果由ue(v)的結果進一步處理得到。

ue(v)的碼字分為三個部分:

            [prefix] + 1+ [surfix]

其中,[prefix]部分為連續n個0,[surfix]部分為表示實際數值的資訊位,其長度與[prefix]一樣。

[prefix] 和 [surfix]由碼元取值确定。

                                   無符号指數哥倫布編碼:ue(v)編碼方法

H.264(三)熵編碼和指數哥倫布編碼
計算公式:        
H.264(三)熵編碼和指數哥倫布編碼
   LeadingZeroBits前面有多少個零。
H.264(三)熵編碼和指數哥倫布編碼

                                                 有符号指數哥倫布編碼:se(v)編碼方法

有符号指數哥倫布編碼通過無符号指數哥倫布編碼換算得到,換算關系為

H.264(三)熵編碼和指數哥倫布編碼
    K = code_num ,ceil():表示向上取整
H.264(三)熵編碼和指數哥倫布編碼

                                                 截斷(舍位)指數哥倫布編碼:te(v)

tel(v):截斷指數哥倫布編碼。解碼時首先判斷文法元素的取值範圍[0, x], x >= 1:

    若x > 1,解析方法同ue(v)相同;

    若x = 1,文法元素值等同于下一位bit值的取反。

也就是:

  • 如果文法元素的值為0,則編碼為1,如果文法元素值為1,則編碼為0,此時占用1個比特位。
  • 如果文法元素的值大于1,則使用ue(v)進行編碼。

                                                映射指數哥倫布編碼:me(v)

适用于預測模式為Intra_4x4,Intra_8x8或inter的宏塊的coded_block_pattern

  • 無指定的換算公式,通常查表的方式進行。

指數哥倫布編碼與哈夫曼編碼的比較

  • 哈夫曼編碼依賴于信源的機率分布特性,不同信源的哈夫曼編碼碼表不同;指數哥倫布編碼對所有信源統一;
  • 哈夫曼編碼在解碼前必須額外獲得一份目前信源的碼表;指數哥倫布編碼不需要任何額外資訊;
  • 指數哥倫布編碼的壓縮率通常較低,甚至毫無壓縮效果;而在不考慮碼表的情況下,哈夫曼編碼壓縮效率更高。