基于DCT圖像 壓縮編碼 算法的MATLAB實現_第1頁
基于DCT圖像 壓縮編碼 算法的MATLAB實現_第2頁
基于DCT圖像 壓縮編碼 算法的MATLAB實現_第3頁
基于DCT圖像 壓縮編碼 算法的MATLAB實現_第4頁
基于DCT圖像 壓縮編碼 算法的MATLAB實現_第5頁
已閱讀5頁,還剩4頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、基于DCT圖像 壓縮編碼 算法的MATLAB實現原文地址:基于DCT圖像壓縮編碼算法的MATLAB實現作者:lpyy1801摘要:首先介紹了基于離散余弦變換的圖像壓縮編碼算法,接著用MATLAB6.5對圖像進行仿真,并對同一幅cameraman.tif圖像做不同的壓縮。實驗結果表明,在很大的壓縮范圍內,在不同的壓縮比和編碼比特率下,重建圖像的峰值信噪比都在30dB以上,仍然能滿足人們的視覺需要。對圖像做不同的壓縮,滿足了不同的場合不同的控制碼率下要求不同的圖像質量的實際需要。用MATLAB做仿真實驗,方法簡單而且誤差小,大大提高了圖像壓縮的效率和精度。關鍵詞:圖像壓縮算法;MATLAB軟件;D

2、CT;壓縮編碼1引言隨著信息技術的發展,圖像信息被廣泛應用于多媒體通信和計算機系統中。但是圖像具有龐大的數據量,不便于存儲和傳輸,必須采用合適的方法對其進行壓縮,因此有必要對圖像壓縮編碼標準進行研究。本研究在介紹圖像壓縮原理的基礎上,用Matlab6.5對標準灰度圖像進行壓縮與重建,并分析實驗結果,得出結論。1.1基于DCT的圖像壓縮編碼理論算法及Matlab仿真基礎1)圖像壓縮編碼的概念壓縮的理論基礎是信息論。從信息論的角度來看,壓縮就是去掉信息中的冗余,即保留不確定的信息,去掉確定的信息(可推知的),也就是用一種更接近信息本質的描述來代替原有冗余的描述。這個本質的東西就是信息量(即不確定因

3、素)。2)圖像壓縮編碼的一般框圖熵編碼器量化器映射變換原始圖像碼流信道碼流熵解碼器反量化器反映射變換復原圖像圖像壓縮的過程可以概括成圖所示的三個步驟,原始圖像經映射變換后的數據再經量化器和熵編碼器成為碼流輸出。(1)映射變換。其目的是通過映射改變圖像數據的特性,使之更有利于壓縮編碼。(2)量化器。在限失真編碼中要對映射后的數據進行量化,若量化是對映射后的數據逐個的進行的,則稱標準量化,若量化是成組的進行的,則稱矢量量化,量化總會造成某些信息丟失,形成失真,即量化失真或量化噪聲,為使失真小,應量化的精細,但壓縮比就高不了,這是一對矛盾,應選用恰當的量化級數和量化曲線形狀來緩解這對矛盾,量化器的引

4、入是圖像編碼產生失真的根源,在要求復原圖像與原圖完全一致的無失真編碼器中必須不用量化器,但這樣一來,壓縮比難以提高,在多數應用中,存在少量失真并不可怕,只要把失真的程度和性質控制在允許的范圍內,也就是把復原圖像的主觀質量控制在允許的程度內,就可以在滿足應用要求的前提下提高壓縮比,值得注意的是,對于同樣的量化失真,不同的映射變換和反變換反映不同性質的復原圖像的失真,人眼對某些性質的失真敏感而對另一些性質的失真不敏感。(3)熵編碼器。這一步是用來消除符號編碼冗余度的,它一般不產生失真,理想的情況是編出的碼流的平均碼長等于量化后數據的信息熵,常用的編碼方法有許多種,例如分組碼、行程碼(RLC)和變長

5、碼(VLC)、不分組碼以及算術碼(ArithmaticCoing等)。行程碼傳輸的是數據行程長度而不是數據本身,例如要傳108個0,用行程碼是改為傳行程碼標記和行程長度1080在變長碼中最常用的是霍夫曼(Hufman)碼,基本原則是對出現概率大的數值用短碼來編,對出現概率小的數值用長碼來編,從而使平均碼長減小。降低碼率,在實際編碼器中常把RLc和Hufman碼結合起來,稱為霍夫曼行程碼,在H.261,JPEG,啪PEG等國際昧準中用到它,而算術碼則用于JPEG,H.263,JBIG等國際標準中。3)MATLAB仿真實現根據壓縮編碼算法,要將一幅灰度圖像進行壓縮編碼,首先把圖像分成8×

6、8的像素塊,分塊進行DCT變換后,根據標準量化表Es對變換系數進行量化后,再對直流系數(DC)進行預測編碼,然后根據標準的Huffman碼表蜘進行熵編碼,輸出壓縮圖像的比特序列,實現了圖像壓縮。在接收端,則經過Huffman熵解碼、DC系數和AC系數可變長解碼、反量化后,再進行反DCT變換得到重建圖像。對一幅圖像進行編解碼的MATLAB程序流程圖:2、離散余弦變換(DCT)2.1DCT的定義DCT變換利用傅立葉變換的性質.采用圖像邊界褶翻將像變換為偶函數形式,然后對圖像進行二維傅立葉變換,變后僅包含余弦項.所以稱之為離散余弦變換。二維離散余弦變換DCT(DiscreteCosineTransf

7、orm)的定為.假設矩陣A的大小為MxN。其中。Bpq稱為矩陣A的DCT系數。在MATLAB中,矩陣的下標從l開始而不是從0開始的,所以MATLAB中的矩陣元素A(1,1)和B(1,1)分別對應于上面定義中的值A加和B。,依此類推。DCT是一種可逆變換,離散反余弦變換定義如下:上式的含義是任何MxN的矩陣A都nJ以表示為一系列有下面形式的函數的和:這些函數稱為DCT變換的基函數。這樣.Bpq就可以看成是應用于每個基函數的加權。2.2DCT和圖像壓縮DCT編碼屬于正交變換編碼方式.用于去除圖像數據的空間冗余。變換編碼就是將圖像光強矩陣(時域信號)變換到系數空間(頻域信號)上進行處理的方法。在空問

8、上具有強相關的信號,反映在頻域上是在某些特定的區域內能量常常被集中在一起,或者是系數矩陣的分布具有某些規律。我們可以利用這些規律在頻域上減少量化比特數,達到壓縮的目的。圖像經DCT變換以后,DCT系數之間的相關性已經很小。而且大部分能量集中在少數的系數上,因此,DCT變換在圖像壓縮中非常有用,是有損圖像壓縮國際標準JPEG的核心。從原理上講可以對整幅圖像進行DCT變換,但由于圖像各部位上細節的豐富程度不同,這種整體處理的方式效果不好。為此,發送者首先將輸入圖像分解為8x8或16x16的塊,然后再對每個圖像塊進行二維DCT變換,接著再對DCT系數進行量化、編碼和傳輸;接收者通過對量化的DCT系數

9、進行解碼,并對每個圖像塊進行的二維DCT反變換.最后將操作完成后所有的塊拼接起來構成一幅單一的圖像。對于一般的圖像而言,大多數DCT系數值都接近于0,町以去掉這些系數而不會對重建圖像的質量產生霞大影響。此,利用DCT進行圈像壓縮確實可以節約大量的存儲空間在宴驗中,先將輸入的原始lena圖像分為8x8的塊,然后再對每個塊進行二維DCT變換。MATLAB圖像處理上具箱中提供的二維DCT變換及DCT反變換函數如下。2.2.1.dcL2dct2實現罔像的二維離散余弦變換.其語法格式為:(1)B=dct2(A)返回圖像A的二維離散余弦變換值,其大小與A相同且各元素為離散余弦變換的系數B(K1,k2)。(

10、2)B=dct2(A,in,n)或B=dct2(A,m,n)如果m和n比圖像A大,在對圖像進行二維離散余弦變換之前,先將圖像A補零至mxn如果m和n比圖像A小。則進行變換之前,將圖像A剪切。2.2.2idct2idct2可以實現圖像的二維離散余弦反變換,其語法格式為:B=idct2(A);B=idct2(A,m,n)或B=idct2(A,m,n)。3圖像編碼3.1圖像編碼的分類圖像編碼壓縮的方法目前有很多,其分類方法根據出發點不同而有差異。根據解壓重建后的圖像和原始圖像之間是否具有誤差(對原圖像的保真程度),圖像編碼壓縮分為無誤差(亦稱無失真、無損、信息保持)編碼和有誤差(有失真或有損)編碼兩

11、大類。無損壓縮(冗余度壓縮、可逆壓縮):是一種在解碼時可以精確地恢復原圖像,沒有任何損失的編碼方法,但是壓縮比不大,通常只能獲得15倍的壓縮比。用于要求重建后圖像嚴格地和原始圖像保持相同的場合,例如復制、保存十分珍貴的歷史、文物圖像等;有損壓縮(不可逆壓縮):只能對原始圖像進行近似的重建,而不能精確復原,適合大數工用于存儲數字化了的模擬數據。壓縮比大,但有信息損失。3.2無損編碼3.2.1行程編碼(RLE)在一個逐行存儲的圖像中,具有相同灰度值的一些象素組成的序列稱為一個行程。在編碼時,對于每個行程只存儲一個灰度值的碼,再緊跟著存儲這個行程的長度。這種按照行程進行的編碼被稱為行程編碼(RunL

12、engthEncoding)。行程編碼對于僅包含很少幾個灰度級的圖像,特別是二值圖像,比較有效。3.2.2Huffman編碼Huffman編碼是50年代提出的一種基于統計的無損編碼方法,它利用變長的碼來使冗余量達到最小。通過一個二叉樹來編碼,使常出現的字符用較短的碼代表,不常出現的字符用較長的碼代表。靜態Huffman編碼使用一棵依據字符出現的概率事先生成好的編碼樹進行編碼。而動態Huffman編碼需要在編碼的過程中建立編碼樹。由于Huffman編碼所得到的平均碼字長度可以接近信源的熵,因此在變長編碼中是最佳的編碼方法,故也稱為熵編碼。具體編碼方法是:把輸入元素按其出現概率的大小順序排列起來,

13、然后把兩個具有最小概率的元素之概率加起來;把該概率之和同其余概率大小順序排隊,然后再把兩個最小概率加起來,再重新排隊;重復,直到最后得到和為1的根節點。3.3有損編碼3.3.1量化將圖像用較少的灰度級別來表示是最簡單的減小數據量的方法,這種方法就是標量量化方法。更一般的情況是,針對連續量的采樣過程,量化是用有限個狀態來表示連續值。3.3.2預測編碼預測編碼根據數據在時間和空間上的相關性,根據統計模型利用已有樣本對新樣本進行預測,將樣本的實際值與其預測值相減得到誤差值,再對誤差值進行編碼。由于通常誤差值比樣本值小得多,因而可以達到數據壓縮的效果。模擬量到數字量的轉換過程是脈沖編碼調制過程PCM,

14、也稱PCM編碼。對于圖像而言,直接以PCM編碼,存儲量很大。預測編碼可以利用相鄰象素之間的相關性,用前面已出現的象素值估計當前象素值,對實際值與估計值的差值進行編碼。常用的一種線性預測編碼方法是差分脈沖編碼調制DPCM。預測編碼通常不直接對信號編碼,而是對預測誤差編碼。當預測比較準確,誤差較小時,即可達到編碼壓縮的目的。這種編碼稱之為差分脈沖編碼調制(DPCM),上圖是原理框圖。在該系統中,xN為tN時刻的亮度取樣值。預測器根據tN時刻之前的樣本x1,x2,xN-1對xN作預測,得到預測值x'N。xN與x'N之間的誤差為量化器對eN進行量化得到e'N。編碼器對e'

15、;N進行編碼發送。接收端解碼時的預測過程與發送端相同,所用預測器亦相同。接收端恢復的輸出信號是xN的近似值,兩者的誤差是當xN足夠小時,輸入信號xN和DPCM系統的輸出信號幾乎一致。3.3.3DCT編碼DCT變換是圖像壓縮標準中常用的變換方法,如JPEG標準中將圖像按8x8分塊利用DCT變換編碼實現壓縮3.4保真度準則在圖像壓縮編碼中,解碼圖像與原始圖像可能會差異,因此,需要評價壓縮后圖像的質量。描述解碼圖像相對原始圖像偏離程度的測度一般稱為保真度(逼真度)準則。常用的準則可分為兩大類:客觀保真度準則和主觀保真度準則。3.4.1客觀保真度準則最常用的客觀保真度準則是原圖像和解碼圖像之間的均方根

16、誤差和均方根信噪比兩種。令f(x,y)代表原圖像,代表對f(x,y)先壓縮又解壓縮后得到的f(x,y)的近似,對任意x和y,f(x,y)和之間的誤差定義為:若f(x,y)和均為M×N,則它們之間均方根誤差為:如果將看作原始圖f(x,y)和噪聲信號e(x,y)的和,那么解壓圖像的均方信噪比為:如果對上式求平方根,就得到均方根信噪比3.4.2主觀保真度準則盡管客觀保真度準則提供了一種簡單、方便的評估信息損失的方法,但很多解壓圖最終是供人觀看的。事實上,具有相同客觀保真度的不同圖像,在人的視覺中可能產生不同的在視覺效果。這是因為客觀保真度是一種統計平均意義下的度量準則,對于圖像中的細節無法

17、反映出來。而人的視覺系統具有獨特的特性,能夠覺察出來。這種情況下,用主觀的方法來測量圖像的質量更為合適。1種常用的方法是對1組(不少于20人)觀察者顯示圖像,并將他們對該圖像的評分取平均,用來評價一幅圖像的主觀質量。4MATLAB仿真及效果4.1程序%程序功能:模擬DCT編碼解碼過程,生成帶"塊效應"的圖像%步驟:灰度圖像DCT量化反量化IDCT%下一步目標:實現對任意大小圖象的處理。(判斷圖象大小,若不是2的整數次方,則補零)I=imread('cameraman.tif')I=im2double(I)%轉換圖像矩陣為雙精度型。T=dctmtx(8)%產生

18、二維DCT變換矩陣%計算二維DCT,矩陣T及其轉置是DCT函數P1*X*P2的參數a1=1611101624405161;1212141926586055;1413162440576956;1417222951878062;182237566810910377;243555648110411392;49647887103121120101;7292959811210010399;fori=1:8:200forj=1:8:200P=I(i:i+7,j:j+7);K=T*P*T'I2(i:i+7,j:j+7)=K;K=K./a1;%量化K(abs(K)0.03)=0;I3(i:i+7,j:

19、j+7)=K;endendfigure;imshow(I2);title('DCT變換后的頻域圖像');%顯示DCT變換后的頻域圖像fori=1:8:200forj=1:8:200P=I3(i:i+7,j:j+7).*a1;%反量化K=T'*P*T;I4(i:i+7,j:j+7)=K;endendfigure;imshow(I4);title('復原圖像');imwrite(I4,'復原圖像6.jpg');B=blkproc(I,8,8,'P1*x*P2',T,T')%二值掩模,用來壓縮DCT系數,只留下DCT系數中左上角的1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論