CABAC基礎一 二值化

2021-07-22 04:43:26 字數 3054 閱讀 5773

在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 ...