在hevc中主要包括截斷萊斯編碼(truncated rice),指數哥倫布編碼(exp-golomb)和定長編碼。
tr二值化需要輸入三個引數:synval表示將要進行tr二值化的值,criceparam表示萊斯引數,cmax表示門限值。tr二值化的結果由兩部分組成:字首prefixval是一元碼,字尾suffixval是定長碼,字尾長度為criceparam。
其中,prefixval =synval >> criceparam
suffixval = synval − ( ( prefixval ) << criceparam)
即:synval = prefixval << criceparam + suffixval
當prefixval < (cmax>> criceparam)時字首長度為prefixval+1,由prefixval個1和乙個0組成;否則字首由(cmax >>criceparam)個1組成,如表1-1所示。
表1-1 tr字首表
prefixval字首0
01102
110…
…cmax>>criceparam
cmax>>criceparam "1"
suffixval按定長碼計算,位數為
criceparam
。有兩種情況無字尾:
a) criceparam=0;
b) synval =cmax。
以criceparam=1,cmax=7時tr二值化為例,如表1-2所示。 當synval=6時,(synval>> criceparam)=3,(cmax>> criceparam)也等於3,因此字首由(cmax >>criceparam)=3個1組成,字尾suffixval = synval − ( ( prefixval) << criceparam)=6-(3<<1)=0,因此二進位制串為1110。
表1-2 criceparam=1,cmax=7時tr二值化表
criceparam=1, cmax=7
synval
bin string 字首
字尾 0
0 01 0
1 210 0
3 10
1 4110 0
5110 1
6111 0
7111 1
指數哥倫布編碼也是變長編碼的一種,指數哥倫布編碼也是由字首和字尾組成,下面以非負整數的k階指數哥倫布為例講解二進位制串的生成步驟。
1. 將n以二進位制形式表示,去掉最低的k個位元,之後加1;
2. 計算剩餘的位元數,將此數減1,即是需要增加的字首0的個數;
3. 將1中去掉的最低k個位元補回位元串末尾。
以數字6的一階指數哥倫布編碼為例:
1. 6的二進位制串為110,去掉最低位的1個位元變成11,加上1變成100;
2. 100的位元數為3,將此數減1,得到字首0的個數為2;
3. 將位元串最低位的0補回位元串末尾,得到00 100 0。
解析k階指數哥倫布碼的方式如圖1所示。圖1(a)展示了指數哥倫布編碼的組成:由m個前導0,m+1個二進位制串和k個末尾串組成;但在指數哥倫布進行解析的時候是按照圖1(b)所示形式進行解析的,首先從位元流當前位置開始尋找第乙個非零位元,並將找到的0位元個數記為m,第乙個非零位元之後的m+k個二進位制串的十進位制值記為value,如圖1(c)所示,根據步驟1所述:去掉最低的k個位元,之後加1,相當於value的值中包含了乙個額外新增的2^k,同時,在進行碼流解析時,m個前導0之後的第乙個非零位元沒有被計算在value值內。
(a) 指數哥倫布編碼組成 (b) 指數哥倫布解析形式
(c) 指數哥倫布值的計算
圖1. 指數哥倫布編碼
因此解碼值codenum的計算方式如下:
codenum =2^(m+k) – 2^(k) + value
在hevc中常用的是0階指數哥倫布編碼,分為無符號0階哥倫布指數編碼和有符號數0級哥倫布指數編碼,如表1-3所示,其中codenum表示解碼值,有符號所對應的列表示無符號編碼是所對應的值,有符號表示採用有符號0階指數哥倫布編碼時所對應的十進位制數。
表1-3 0階有符號和無符號指數哥倫布編碼
碼字codenum
無符號有符號10
00010111
01122-1
0010033
20010144
-20011055
30011166
-3………
…定長編碼比較簡單,再次不再詳述。
以上詳細說明了trk和egk二值化演算法的過程,表1-4簡單列舉了各種二值化方法的結果。
表1-4 二值化trk、egk和fl二值化結果
nunary(u)
truncated
unary(tru)
truncated
rice(trk)
exp-golomb
(egk)
fixed-length
(fl)
cmax=7
k = 1; cmax=7
k = 0
cmax=700
0 00 1 0
110
10 01
010 12
110
110
100
011 103
1110
1110
101
00100 114
11110
11110
1100
00101
1005
111110
111110
1101
00110
1016
1111110
1111110
1110
00111
1107
11111110
1111111
1111
1000
111
ITK基礎 一 二值化分割
itk 全稱為 insight toolkit 是一款開源 跨平台 用於影象分析工具包,開發遵循極限程式設計,主流使用語言為 c 但目前開發團隊已經提供了面向 python 的介面。itk 內部封裝了許多優秀演算法。itk 可用於影象處理 配準 分割等領域,處理影象維度面向二維 三維或者更高維度 原...
格式化輸出輸入一二事
輸出輸入流可以通過各種方式設定多種多樣的格式化操作,給輸出輸入提供多種選項。每種格式化將輸出將通過兩種方式進行描述,一種是操縱符,一種是成員函式。操作符一般在流中插入以進行格式化輸出,成員函式則是通過物件呼叫起作用。注意,流操縱符一般都在iomanip.h中,而成員函式一般都在iostream.h中...
幾何模板總結(一) 二維基礎
實數比較 const double eps 1e 8 int dcmp double x 點積 double length point a 向量的長度 double angle point a,point b 兩向量的夾角叉積 cross u,v 為兩向量組成的三角形的有向面積的2倍 double ...