引言
最近在看H.264/AVC的一些編碼資訊,印象最深的就是sps,pps 中的指數哥倫布(Golomb)熵編碼算法,從網上搜了一些内容,發現講解的不是很詳細,是以自己總結一下便于自己檢視
sps,pps中常用的指數哥倫布編碼算法有
1、無符号指數哥倫布熵編碼 ue(v)
2、有符号指數哥倫布熵編碼 se(v)
3、映射指數哥倫布熵編碼 me(v)
4、截斷指數哥倫布熵編碼 te(v)
後兩者不是很常用,目前也沒有搞明白,先略過,隻解釋前兩者
1、無符号指數哥倫布熵編碼
1.1 編碼過程
1、将待編碼的數加1轉換為最小的二進制序列(假設一共M位);
2、此二進制序列前面補充M-1個0;
3、enjoy!
1.1.1 示例
對 4 進行無符号指數哥倫布熵編碼
1、将4加1(為5)轉換為最小的二進制序列即 101 (此是M=3)
2、此二進制序列前面補充M-1即兩個0
3、得出的4的無符号指數哥倫布熵編碼的序列為 00101
1.2 解碼過程
1、擷取二進制序列開頭連續的N個0
2、讀取之後的N+1位的值,假設為X
3、X-1擷取解碼後的值
1.2.1 示例
如對 00101進行無符号指數哥倫布熵解碼
1、擷取開頭連續的N個0, 此時N = 2
2、再向後讀取N+1位的值,即 101,為5
3、 5 - 1 =4 擷取其解碼後碼值,enjoy!
1.3 其他
注意0的無符号指數哥倫布熵編碼的二進制序列為 1
2 有符号指數哥倫布熵編碼
2.1 編碼過程
1、将待編碼的數的絕對值轉換為最小的二進制序列(假設一共M位)
2、在此二進制序列後補充一位符号位0表示正,1表示負
3、在此二進制序列前補充M個0
4、enjoy
2.1.1 示例1
如對4進行有符号指數哥倫布熵編碼
1、4的絕對值轉為最小二進制序列,即 100 (此時M = 3)
2、後面補充符号位,0 即 1000
3、前面補充M個0, 即 0001000
4、enjoy
2.1.2 示例2
如對-15進行有符号指數哥倫布熵編碼
1、-7的絕對值轉為最小二進制序列,即 1111 (此時M = 4)
2、後面補充符号位,1,即 11111
3、前面補充M個0,即 000011111
4、enjoy
2.2 解碼過程
1、擷取二進制序列開頭連續的N個0
2、讀取之後的N位的值,假設為X
3、擷取最後1位符号位
4、擷取解碼後碼值
2.2.1 示例1
如對二進制序列 0001000 進行有符号指數哥倫布熵解碼
1、擷取開頭連續的N個0, 此時N = 3
2、再擷取N為數值,即 100 即為4
3、擷取最後的符号位,0,即為正值
4、故此序列解碼後的碼值為4
2.2.2 示例2
如對二進制序列 000011111 進行有符号指數哥倫布熵解碼
1、擷取開頭連續的N個0, 此時N = 4
2、再擷取N為數值,即 1111 即為15
3、擷取最後的符号位,1,即為負值
4、故此序列解碼後的碼值為-15
2.3 其他
注意0的有符号指數哥倫布熵編碼的二進制序列為 1
3、映射指數哥倫布熵編碼 me(v)
略,以後補充