複製鏈接
請複製以下鏈接發送給好友

Rice編碼

鎖定
Rice編碼是一種壓縮編碼,它的基本思想類似於哈夫曼編碼,即儘可能的用較少的位來存儲多個字。
中文名
Rice 編碼
外文名
Ricecoding
分    類
計算機/壓縮編碼

目錄

Rice編碼簡介

Rice編碼背後的基本思想是儘可能的用較少的位來存儲多個字(正像使用哈夫曼編碼一樣)。實際上,有人可能想到Rice是靜態的哈夫曼編碼(例如,編碼不是由實際數據內容的統計信息決定,而是由小的值比高的值常見的假定決定)。
編碼非常簡單:將值X用X個‘1’位之後跟一個0位來表示。
對於由大word(例如:16或32位)組成的數據和教低的數據值,Rice編碼能夠獲得較好的壓縮比。音頻和高動態變化的圖像都是這種類型的數據,它們被某種語言預處理過(例如delta相鄰的採樣)。
儘管哈夫曼編碼處理這種數據是最優的,卻由於幾個原因而不適合處理這種數據(例如:32位大小要求16GB的柱狀圖緩衝區來進行哈夫曼樹編碼)。因此一個比較動態的方式更適合由大word組成的數據。

Rice編碼實現

在基本壓縮庫針對Rice做了許多優化:
1.每個字最沒有意義的位被存儲為k和最有意義的N-k位用Rice編碼。K作為先前流中少許採樣的位平均數。這是通常最好使用Rice編碼的方法,隱藏噪音且對於動態變化的範圍並不導致非常長的Rice編碼。
2.如果rice編碼比固定的開端長,T,一個可選的編碼:輸出T個‘1’位,緊跟(log2(X-T))個‘1’和一個‘0’位,接着是X-T(最沒有意義的(log2(X-T))-1位)。這對於大值來説都是比較高效的代碼並且阻止可笑的長Rice編碼(最壞的情況,對於一個32位word單個Rice編碼可能變成232位或512MB)。
如果開端是4,下面是結果編碼表:
X
bin
Rice
Thresholded
Rice
0
00000
0
0

1
00001
10
10

2
00010
110
110

3
00011
1110
1110

4
00100
11110
11110

5
00101
111110
111110

6
00110
1111110
11111100
+1
7
00111
11111110
11111101

8
01000
111111110
1111111000
+1
9
01001
1111111110
1111111001

10
01010
11111111110
1111111010
-1
11
01011
111111111110
1111111011
-2
12
01100
1111111111110
111111110000

13
01101
11111111111110
111111110001
-1
14
01110
111111111111110
111111110010
-2
15
01111
1111111111111110
111111110011
-3
16
10000
11111111111111110
111111110100
-4
17
10001
111111111111111110
111111110101
-5
18
10010
1111111111111111110
111111110110
-6
19
10011
11111111111111111110
111111110111
-7
20
10100
111111111111111111110
11111111100000
-5
就像你看到的一樣,在這個實現中使用threshold方法僅僅兩個編碼導致一個最壞的情況;剩下的編碼產生比標準Rice編碼還要短的編碼。