❶ 壓縮演算法原理
哈夫曼
哈夫曼編碼是無損壓縮當中最好的方法。它使用預先二進制描述來替換每個符號,長度由特殊符號出現的頻率決定。常見的符號需要很少的位來表示,而不常見的符號需要很多為來表示。
哈夫曼演算法在改變任何符號二進制編碼引起少量密集表現方面是最佳的。然而,它並不處理符號的順序和重復或序號的序列。
2.1 原理
我不打算探究哈夫曼編碼的所有實際的細節,但基本的原理是為每個符號找到新的二進製表示,從而通常符號使用很少的位,不常見的符號使用較多的位。
簡短的說,這個問題的解決方案是為了查找每個符號的通用程度,我們建立一個未壓縮數據的柱狀圖;通過遞歸拆分這個柱狀圖為兩部分來創建一個二叉樹,每個遞歸的一半應該和另一半具有同樣的權(權是 ∑ N K =1 符號數 k , N 是分之中符號的數量,符號數 k 是符號 k出現的次數 )
這棵樹有兩個目的:
1. 編碼器使用這棵樹來找到每個符號最優的表示方法
2. 解碼器使用這棵樹唯一的標識在壓縮流中每個編碼的開始和結束,其通過在讀壓縮數據位的時候自頂向底的遍歷樹,選擇基於數據流中的每個獨立位的分支,一旦一個到達葉子節點,解碼器知道一個完整的編碼已經讀出來了。
壓縮後的數據流是 24 位(三個位元組),原來是 80 位( 10 個位元組)。當然,我應該存儲哈夫曼樹,這樣解碼器就能夠解碼出對應的壓縮流了,這就使得該例子中的真正數據流比輸入的流數據量大。這是相對較短的數據上的副作用。對於大數據量來說,上面的哈夫曼樹就不佔太多比例了。
解碼的時候,從上到下遍歷樹,為壓縮的流選擇從左 / 右分支,每次碰到一個葉子節點的時候,就可以將對應的位元組寫到解壓輸出流中,然後再從根開始遍歷。
2.2 實現
哈夫曼編碼器可以在基本壓縮庫中找到,其是非常直接的實現。
這個實現的基本缺陷是:
1. 慢位流實現
2. 相當慢的解碼(比編碼慢)
3. 最大的樹深度是 32 (編碼器在任何超過 32 位大小的時候退出)。如果我不是搞錯的話,這是不可能的,除非輸出的數據大於 2 32位元組。
另一方面,這個實現有幾個優點:
1. 哈夫曼樹以一個緊密的形式每個符號要求 12 位(對於 8 位的符號)的方式存儲,這意味著最大的頭為 384 。
2. 編碼相當容易理解
哈夫曼編碼在數據有噪音的情況(不是有規律的,例如 RLE )下非常好,這中情況下大多數基於字典方式的編碼器都有問題。
❷ 無損數據壓縮的無損壓縮編碼技術
最早闡述和實現這種編碼的是Shannon(1948年)和Fano(1949年),因此被稱為香農-范諾(Shannon-Fano)演算法。
這種方法採用從上到下的方法進行編碼。首先按照符號出現的頻度或概率排序,例如,A、B、C、D和E,如表1所示。然後使用遞歸方法分成兩個部分,每一部分具有近似相同的次數。按照這種方法進行編碼得到的總位數為91。壓縮比約為1.3 : 1。
表1 Shannon-Fano演算法舉例表 符號 出現的次數(Pi) log2(1/P) 分配的代碼 需要的位數 A 15 (0.375) 1.4150 00 30 B 7 (0.175) 2.5145 01 14 C 7 (0.175) 2.5145 10 14 D 6 (0.150) 2.7369 110 18 E 5 (0.125) 3.0000 111 15 詞典編碼(dictionary encoding)的根據是數據本身包含有重復代碼這個特性。例如文本文件和光柵圖像就具有這種特性。詞典編碼法的種類很多,歸納起來大致有兩類。
第一類詞典法的想法是企圖查找正在壓縮的字元序列是否在以前輸入的數據中出現過,然後用已經出現過的字元串替代重復的部分,它的輸出僅僅是指向早期出現過的字元串的「指針」。這里所指的「詞典」是指用以前處理過的數據來表示編碼過程中遇到的重復部分。這類編碼中的所有演算法都是以Abraham Lempel和Jakob Ziv在1977年開發和發表的稱為LZ77演算法為基礎的,例如1982年由Storer和Szymanski改進的稱為LZSS演算法就是屬於這種情況。
第二類演算法的想法是企圖從輸入的數據中創建一個「短語詞典(dictionary of the phrases)」,這種短語不一定是像「嚴謹勤奮求實創新」和「國泰民安是坐穩總統寶座的根本」這類具有具體含義的短語,它可以是任意字元的組合。編碼數據過程中當遇到已經在詞典中出現的「短語」時,編碼器就輸出這個詞典中的短語的「索引號」,而不是短語本身。
❸ 編碼技術的種類
什麼方面的編碼啊?
有壓縮編碼,文字編碼,語音編碼,數據編碼太多了
就說壓縮:
無損壓縮編碼種類
哈夫曼編碼
算術編碼
行程編碼
Lempel
zev編碼
(2)有損壓縮編碼種類
預測編碼:DPCM,運動補償頻率域方法:正文變換編碼(如DCT),子帶編碼
空間域方法:統計分塊編碼
模型方法:分形編碼,模型基編碼
基於重要性:濾波,子采樣,比特分配,矢量量化
信息量壓縮方法,也稱有損壓縮,失真度編碼或熵壓縮編碼