一、 行程長度壓縮
原理是將一掃描行中的顏色值相同的相鄰像素用一個計數值和那些像素的顏色值來代替。例如:aaabccccccddeee,則可用3a1b6c2d3e來代替。對於擁有大面積,相同顏色地區的映像,用RLE壓縮方法非常有效。由RLE原理派生出許多具體行程壓縮方法:
1.PCX行程壓縮方法: 該演算法實際上是位映射格式到壓縮格式的轉換演算法,該演算法對於連續出現1次的位元組Ch,若Ch>0xc0則壓縮時在該位元組前加上0xc1,否則直接輸出Ch,對於連續出現N 次的位元組Ch,則壓縮成0xc0+N,Ch這兩個位元組,因而N最大隻能為ff-c0=3fh(十進位為63),當N大於63時, 則需分多次壓縮。
2.BI_RLE8壓縮方法:在WINDOWS的位元影像檔案中採用了這種壓縮方法。該壓縮方法編碼也是以兩個位元組為基本單位。其中第一個位元組規定了用第二個位元組指定的顏色重複次數。 如編碼 0504表示從當前位置開始連續顯示5個顏色值為04的像素。當第二個位元組為零時第二個位元組有特殊含義:0表示行末;1表示圖末;2轉義後面2個位元組, 這兩個位元組分別表示下一像素相對於當前位置的水平位移和垂直位移。這種壓縮方法所能壓縮的映像像素位元最大為8位(256色)映像。
3.BI_RLE壓縮方法: 該方法也用於WINDOWS位元影像檔案中,它與 BI_RLE8編碼類別似,唯一不同是:BI_RLE4的一個位元組包含了兩個像素的顏色,因此,它只能壓縮的顏色數不超過16的映像。因而這種壓縮應用範圍有限。
4.緊縮位壓縮方法(Packbits):該方法是用於Apple公司的Macintosh機上的位元影像資料壓縮 方法, TIFF 規範中使用了這種方法, 這種壓縮方法與BI_RLE8壓縮方法相似,如1c1c1c2132325648 壓縮為:83 1c 21 81 32 56 48,顯而易見, 這種壓縮方法最好情況是每連續128個位元組相同,這128個位元組可壓縮為一個數值7f。這種方法還是非常有效。
二、霍夫曼編碼壓縮:
也是一種常用的壓縮方法。是1952年為文字檔建立的,其基本原理是頻繁使用的資料用較短的代碼代替,很少使用的資料用較長的代碼代替,每個資料的代碼各不相同。這些代碼都是二進位碼,且碼的長度是可變的。如: 有一個未經處理資料序列,ABACCDAA則編碼為A(0),B(10),C(110),(D111),壓縮後為010011011011100。產生霍夫曼編碼需要對未經處理資料掃描兩遍,第一遍掃描要精確地統計出未經處理資料中的每個值出現的頻率,第二遍是建立霍夫曼樹並進行編碼,由於需要建立二叉樹並遍曆二叉樹產生編碼,因此資料壓縮和還原速度都較慢,但簡單有效,因而得到廣泛的應用。
哈夫曼編碼是無損壓縮當中最好的方法。它使用預先二進位描述來替換每個符號,長度由特殊符號出現的頻率決定。常見的符號需要很少的位來表示,而不常見的符號需要很多為來表示。
哈夫曼演算法在改變任何符號二進位編碼引起少量密集表現方面是最佳的。然而,它並不處理符號的順序和重複或序號的序列。
三、LZW壓縮方法
LZW壓縮技術比其它大多數壓縮技術都複雜, 壓縮效率也較高。其基本原理是把每一個第一次出現的字串用一個數值來編碼,在還原程式中再將這個數值還成原來的字元 串,如用數值0x100代替字串"abccddeee"這樣每當出現該字串時,都用0x100代替,起到了壓縮的作用。 至於0x100與字串的對應關係則是在壓縮過程中動態產生的,而且這種對應關係是隱含在壓縮資料中,隨著解壓縮的進行這張編碼錶會從壓縮資料中逐步得到恢複,後面的壓縮資料再根據前面資料產生的對應關係產生更多的對應關係。直到壓縮檔結束為止。LZW是可逆的, 所有資訊全部保留。
屬於無損壓縮編碼,該編碼主要用於映像資料的壓縮(如GIF)。對於簡單映像和平滑且雜訊小的訊號源具有較高的壓縮比,並且有較高的壓縮和解壓縮速度。
LZW壓縮技術把資料流中複雜的資料用簡單的代碼來表示,並把代碼和資料的對應關係建立一個轉換表,又叫“字串表”。
轉換表是在壓縮或解壓縮過程中動態產生的表,該表只在進行壓縮或解壓縮過程中需要,一旦壓縮和解壓縮結束,該表將不再起任何作用。
四、算術壓縮方法
算術壓縮與霍夫曼編碼壓縮方法類似,只不過它比霍夫曼編碼更加有效。算術壓縮適合於由相同的重複序列組成的檔案,算術壓縮接近壓縮的理論極限。這種方法,是將不同的序列映像到0到1之間的地區內,該地區表示成可變精度(位元 )的二進位小數,越不常見的資料要的精度越高(更多的位元),這種方法比較複雜,因而不太常用。
五、Rice
對於由大word(例如:16或32位)組成的資料和教低的資料值,Rice編碼能夠獲得較好的壓縮比。音頻和高動態變化的映像都是這種類型的資料,它們被某種預言預先處理過(例如delta相鄰的採樣)。
儘管哈夫曼編碼處理這種資料是最優的,卻由於幾個原因而不適合處理這種資料(例如:32位大小要求16GB的柱狀圖緩衝區來進行哈夫曼樹編碼)。因此一個比較動態方式更適合由大word組成的資料。
Rice編碼背後的基本思想是儘可能的用較少的位來儲存多個字(正像使用哈夫曼編碼一樣)。實際上,有人可能想到Rice是靜態哈夫曼編碼(例如,編碼不是由實際資料內容的統計資訊決定,而是由小的值比高的值常見的假定決定)。
編碼非常簡單:將值X用X個‘1’位之後跟一個0位來表示。
六、Lempel-Ziv (LZ77)
Lempel-Ziv壓縮模式有許多不同的變數。基本壓縮庫有清晰的LZ77演算法的實現(Lempel-Ziv,1977),執行的很好,原始碼也非常容易理解。
LZ編碼器能用來一般目標的壓縮,特別對於文本執行的很好。它也在RLE和哈夫曼編碼器(RLE,LZ,哈夫曼)中使用來大多數情況下獲得更多的壓縮。
在LZ壓縮演算法的背後是使用RLE演算法用先前出現的相同位元組序列的引用來替代。
簡單的講,LZ演算法被認為是字串匹配的演算法。例如:在一段文本中某字串經常出現,並且可以通過前面文本中出現的字串指標來表示。當然這個想法的前提是指標應該比字串本身要短。
例如,在上一段短語“字串”經常出現,可以將除第一個字串之外的所有用第一個字串引用來表示從而節省一些空間。
一個字串引用通過下面的方式來表示:
1. 唯一的標記
2. 位移數量
3. 字串長度
由編碼的模式決定引用是一個固定的或變動的長度。後面的情況經常是首選,因為它允許編碼器用引用的大小來交換字串的大小(例如,如果字串相當長,增加引用的長度可能是值得的)。
七、DEFLATE是同時使用了LZ77演算法與哈夫曼編碼(Huffman Coding)的一個無損資料壓縮演算法。它最初是由Phil Katz為他的PKZIP歸檔工具第二版所定義的,後來定義在RFC 1951規範中。
人們普遍認為DEFLATE不受任何專利所制約,並且在LZW(GIF檔案格式使用)相關的專利失效之前,這種格式除了在ZIP檔案格式中得到應用之外也在gzip壓縮檔以及PNG影像檔中得到了應用。
DEFLATE壓縮與解壓的原始碼可以在自由、通用的壓縮庫zlib上找到。
更高壓縮率的DEFLATE是7-zip所實現的。AdvanceCOMP也使用這種實現,它可以對gzip、PNG、MNG以及ZIP檔案進行壓縮從而得到比zlib更小的檔案大小。在Ken Silverman的KZIP與PNGOUT中使用了一種更加高效同時要求更多使用者輸入的DEFLATE程式。
PS:見維基百科http://zh.wikipedia.org/zh/DEFLATE
| 資料壓縮方法 |
|
| 無損資料壓縮 |
| 理論 |
熵 · 複雜性 · 資訊冗餘 · 有損資料壓縮 |
|
| 熵編碼法 |
Shannon-Fano · Shannon–Fano–Elias · 哈夫曼樹 · 算術編碼 · Range · Golomb · Exp-Golomb · 統一編碼(Elias · Fibonacci) |
|
| 字典編碼 |
RLE · LZ77/78 · LZSS · LZW · LZWL · LZO · DEFLATE · LZMA · LZX · LZJB |
|
| 其他 |
CTW · BWT · PPM · DMC |
|
|
| 音頻 |
| 理論 |
卷積 · 採樣 · 採樣定理 |
|
| 音訊編解碼器 |
LPC · WLPC · CELP · ACELP · A-law · μ-law · MDCT · 傅裡葉變換 · 音響心理學 |
|
| 其他 |
動態範圍壓縮 · 語音編碼 · 子帶編碼 |
|
|
| 映像 |
| 條件 |
色彩空間 · 像素 · 色度抽樣 · Compression artifact |
|
| 方法 |
RLE · 分形壓縮 · 小波壓縮 · SPIHT · DCT · KLT |
|
| 其他 |
位元速率 · 標準測試映像 · 峰值信噪比 |
|
|
| 視頻 |
| 條件 |
視訊特性 · Frame · 視訊類型 · 視訊質量 |
|
| 視頻轉碼器 |
運動補償 · DCT · 量化 |
|
| 其他 |
率失真理論(CBR · ABR · VBR) |
|