當前位置:首頁 » 文件管理 » 壓縮編碼演算法

壓縮編碼演算法

發布時間: 2022-06-05 18:25:30

① 什麼是壓縮演算法

LZW壓縮演算法的基本概念:LZW壓縮有三個重要的對象:數據流(CharStream)、編碼流(CodeStream)和編譯表(String Table)。在編碼時,數據流是輸入對象(文本文件的據序列),編碼流就是輸出對象(經過壓縮運算的編碼數據);在解碼時,編碼流則是輸入對象,數據流是輸出對象;而編譯表是在編碼和解碼時都須要用藉助的對象。字元(Character):最基礎的數據元素,在文本文件中就是一個位元組,在光柵數據中就是一個像素的顏色在指定的顏色列表中的索引值;字元串(String):由幾個連續的字元組成; 前綴(Prefix):也是一個字元串,不過通常用在另一個字元的前面,而且它的長度可以為0;根(Root):一個長度的字元串;編碼(Code):一個數字,按照固定長度(編碼長度)從編碼流中取出,編譯表的映射值;圖案:一個字元串,按不定長度從數據流中讀出,映射到編譯表條目. LZW壓縮演算法的基本原理:提取原始文本文件數據中的不同字元,基於這些字元創建一個編譯表,然後用編譯表中的字元的索引來替代原始文本文件數據中的相應字元,減少原始數據大小。看起來和調色板圖象的實現原理差不多,但是應該注意到的是,我們這里的編譯表不是事先創建好的,而是根據原始文件數據動態創建的,解碼時還要從已編碼的數據中還原出原來的編譯表.

② 數據無損壓縮演算法

所謂無損壓縮格式,顧名思義,就是毫無損失地將聲音信號進行壓縮的音頻格式。常見的像MP3、WMA等格式都是有損壓縮格式,相比於作為源的WAV文件,它們都有相當大程度的信號丟失,這也是它們能達到10%的壓縮率的根本原因。而無損壓縮格式,就好比用Zip或RAR這樣的壓縮軟體去壓縮音頻信號,得到的壓縮格式還原成WAV文件,和作為源的WAV文件是一模一樣的!但是如果用Zip或RAR來壓縮WAV文件的話,必須將壓縮包解壓後才能播放。而無損壓縮格式則能直接通過播放軟體實現實時播放,使用起來和MP3等有損格式一模一樣。總而言之,無損壓縮格式就是能在不犧牲任何音頻信號的前提下,減少WAV文件體積的格式。

經常使用的無損壓縮演算法有 Shannon-Fano 編碼,Huffman 編碼,行程(Run-length)編碼,LZW(Lempel-Ziv-Welch)編碼和算術編碼等。

Huffman 編碼
該方法完全依據字元出現概率來構造異字頭的平均長度最短的碼字,有時稱之為最佳編碼,一般就叫做Huffman編碼。它是統計獨立信源能達到最小平均碼長的編碼方法。編碼效率高 。

基本原理:

依據信源字元出現的概率大小來構造代碼,對出現概率較大的信源字元,給予較短碼長,而對於出現概率較小的信源字元,給予較長的碼長,最後使得編碼的平均碼字最短。

編碼步驟:

(1)初始化,根據符號概率的大小按由大到小順序對符號進行排序。

(2)把概率最小的兩個符號組成一個節點。

(3)重復步驟2。

(4)從根節點開始到相應於每個符號的「樹葉」,從上到下標上「0」(上枝)或者「1」(下枝)至於哪個為「1」哪個為「0」則無關緊要,最後的結果僅僅是分配的代碼不同,而代碼的平均長度是相同的。

(5)從根節點開始順著樹枝到每個葉子分別寫出每個符號的代碼。

無損壓縮演算法有哪些

Huffman編碼的注意點:

Huffman編碼沒有錯誤保護功能,如果碼中有錯誤,則可能引起接下來的一連串解碼錯誤。

Huffman編碼是可變長編碼,因此很難隨意查找或調用中的文件內容。

Huffman依賴於信源的統計特性。 Huffman編碼的每個碼字都是整數:因此實際上平均碼長很難達到信息熵的大小。

Huffman編碼解碼必須要有碼表,如果消息數目很多,那麼

③ 壓縮演算法原理

哈夫曼
哈夫曼編碼是無損壓縮當中最好的方法。它使用預先二進制描述來替換每個符號,長度由特殊符號出現的頻率決定。常見的符號需要很少的位來表示,而不常見的符號需要很多為來表示。

哈夫曼演算法在改變任何符號二進制編碼引起少量密集表現方面是最佳的。然而,它並不處理符號的順序和重復或序號的序列。

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 )下非常好,這中情況下大多數基於字典方式的編碼器都有問題。

④ JPEG壓縮編碼演算法的主要步驟是什麼其中哪些步驟是有損的,那些是無損的

JPEG壓縮編碼演算法的主要計算步驟如下:
1、正向離散餘弦變換(FDCT)。
2、量化(quantization)。
3、Z字形編碼(zigzag scan)。
4、使用差分脈沖編碼調制(differential pulse code molation,DPCM)對直流系數(DC)進行編碼。
5、使用行程長度編碼(run-length encoding,RLE)對交流系數(AC)進行編碼。
6、熵編碼(entropy coding)。

⑤ 應用感知編碼的主要壓縮編碼的方法有哪些

在介紹圖象的壓縮編碼之前,先考慮一個問題:為什麼要壓縮?其實這個問題不用我回答,你也能想得到。因為圖象信息的數據量實在是太驚人了。舉一個例子就明白:一張A4(210mm×297mm)幅面的照片,若用中等解析度(300dpi)的掃描儀按真彩色掃描,其數據量為多少?讓我們來計算一下:共有(300×210/25.4)×(300×297/25.4)個象素,每個象素佔3個位元組,其數據量為26M位元組,其數據量之大可見一斑了。如今在Internet上,傳統基於字元界面的應用逐漸被能夠瀏覽圖象信息的WWW(WorldWideWeb)方式所取代。WWW盡管漂亮,但是也帶來了一個問題:圖象信息的數據量太大了,本來就已經非常緊張的網路帶寬變得更加不堪重負,使得WorldWideWeb變成了WorldWideWait。總之,大數據量的圖象信息會給存儲器的存儲容量,通信干線信道的帶寬,以及計算機的處理速度增加極大的壓力。單純靠增加存儲器容量,提高信道帶寬以及計算機的處理速度等方法來解決這個問題是不現實的,這時就要考慮壓縮。壓縮的理論基礎是資訊理論。從資訊理論的角度來看,壓縮就是去掉信息中的冗餘,即保留不確定的信息,去掉確定的信息(可推知的),也就是用一種更接近信息本質的描述來代替原有冗餘的描述。這個本質的東西就是信息量(即不確定因素)。壓縮可分為兩大類:第一類壓縮過程是可逆的,也就是說,從壓縮後的圖象能夠完全恢復出原來的圖象,信息沒有任何丟失,稱為無損壓縮;第二類壓縮過程是不可逆的,無法完全恢復出原圖象,信息有一定的丟失,稱為有損壓縮。選擇哪一類壓縮,要折衷考慮,盡管我們希望能夠無損壓縮,但是通常有損壓縮的壓縮比(即原圖象占的位元組數與壓縮後圖象占的位元組數之比,壓縮比越大,說明壓縮效率越高)比無損壓縮的高。圖象壓縮一般通過改變圖象的表示方式來達到,因此壓縮和編碼是分不開的。圖象壓縮的主要應用是圖象信息的傳輸和存儲,可廣泛地應用於廣播電視、電視會議、計算機通訊、傳真、多媒體系統、醫學圖象、衛星圖象等領域。壓縮編碼的方法有很多,主要分成以下四大類:(1)象素編碼;(2)預測編碼;(3)變換編碼;(4)其它方法。所謂象素編碼是指,編碼時對每個象素單獨處理,不考慮象素之間的相關性。在象素編碼中常用的幾種方法有:(1)脈沖編碼調制(PulseCodeMolation,簡稱PCM);(2)熵編碼(EntropyCoding);(3)行程編碼(RunLengthCoding);(4)位平面編碼(BitPlaneCoding)。其中我們要介紹的是熵編碼中的哈夫曼(Huffman)編碼和行程編碼(以讀取.PCX文件為例)。所謂預測編碼是指,去除相鄰象素之間的相關性和冗餘性,只對新的信息進行編碼。舉個簡單的例子,因為象素的灰度是連續的,所以在一片區域中,相鄰象素之間灰度值的差別可能很小。如果我們只記錄第一個象素的灰度,其它象素的灰度都用它與前一個象素灰度之差來表示,就能起到壓縮的目的。如248,2,1,0,1,3,實際上這6個象素的灰度是248,250,251,251,252,255。表示250需要8個比特,而表示2隻需要兩個比特,這樣就實現了壓縮。常用的預測編碼有Δ調制(DeltaMolation,簡稱DM);微分預測編碼(DifferentialPulseCodeMolation,DPCM),具體的細節在此就不詳述了。所謂變換編碼是指,將給定的圖象變換到另一個數據域(如頻域)上,使得大量的信息能用較少的數據來表示,從而達到壓縮的目的。變換編碼有很多,如(1)離散傅立葉變換(DiscreteFourierTransform,簡稱DFT);(2)離散餘弦變換(DiscreteCosineTransform,簡稱DCT);(3)離散哈達瑪變換(DiscreteHadamardTransform,簡稱DHT)。其它的編碼方法也有很多,如混合編碼(HybirdCoding)、矢量量化(VectorQuantize,VQ)、LZW演算法。在這里,我們只介紹LZW演算法的大體思想。值得注意的是,近些年來出現了很多新的壓縮編碼方法,如使用人工神經元網路(ArtificialNeuralNetwork,簡稱ANN)的壓縮編碼演算法、分形(Fractl)、小波(Wavelet)、基於對象(ObjectBased)的壓縮編碼演算法、基於模型(Model–Based)的壓縮編碼演算法(應用在MPEG4及未來的視頻壓縮編碼標准中)。

⑥ JPEG壓縮編碼演算法的主要計算步驟哪些對圖像的質量有損

JPEG壓縮編碼演算法的主要計算步驟如下:
(1)正向離散餘弦變換(FDCT)。 (2)量化(Quantization)。 (3)Z字形編碼(Zigzag Scan)。 (4)使用差分脈沖編碼調制(Differential Pulse Code Molation,DPCM)對直流系數(DC)進行編碼。 (5)使用行程長度編碼(Run-Length Encoding,RLE)對交流系數(AC)進行編碼。 6)熵編碼(Entropy Eoding)。
JPEG是有損編碼,是在量化過程中取整而產生的。

⑦ 簡述JPEG壓縮演算法

首先你需要了解幾個概念,有損壓縮,量化,行程編碼。
對一副圖片來說,bitmap就是原始格式,沒經過任何壓縮的。
量化就是把所有0-255的像素值進行歸類,然後分成盡量少的積累,這要存儲量就小很多了,對於JEPG來說量化是有損壓縮的起源。
最後就是對所有的已經歸類過的點進行行程編碼,然後就壓縮完了

⑧ 請高手解釋一下編碼演算法與壓縮演算法的區別

編碼一般利用規則(某個符號用另外某些符號代替)
壓縮一般利用字典(某些常用的單詞用其它較短符號代替)

⑨ 多媒體數據壓縮編碼方法可分為哪兩大類

無損壓縮編碼
有損壓縮編碼
通常解碼的運算復雜度低於編碼.通過比較解碼前後數據的是否一致,把數據編碼方法分為無損編碼和有損編碼2類(即無損壓縮和有損壓縮)前者是解碼前後數據完全一致,沒有任何失真和偏差.後者有一定程度偏差和失真,但是沒多大影響.常見的壓縮演算法有信息熵編碼(主要有行程長度編碼,哈夫曼編碼和算術編碼),通用編碼,預測編碼,模型法編碼等等.無損壓縮的演算法一般比較復雜,而且一般的演算法多為有損演算法.考慮文件和圖象的重要型,有時可採用無損壓縮,但要注意此種壓縮壓縮比不會很高.

熱點內容
大學生java課程培訓 發布:2025-01-15 18:45:53 瀏覽:486
asp網路驗證源碼 發布:2025-01-15 18:39:10 瀏覽:889
我的世界100人伺服器電腦配置 發布:2025-01-15 18:38:02 瀏覽:227
抽盒機演算法 發布:2025-01-15 18:31:07 瀏覽:253
萬網雲伺服器雲虛擬主機 發布:2025-01-15 18:20:58 瀏覽:949
手動安裝交叉編譯鏈 發布:2025-01-15 18:15:30 瀏覽:565
java調用clinux 發布:2025-01-15 18:13:02 瀏覽:294
如何給孩子配置一份保險 發布:2025-01-15 18:07:53 瀏覽:457
思科模擬器ftp配置 發布:2025-01-15 18:01:53 瀏覽:198
wd軟體如何修改密碼 發布:2025-01-15 17:59:57 瀏覽:716