實驗三 基于DCT的數字圖像壓縮及Matlab實現_第1頁
實驗三 基于DCT的數字圖像壓縮及Matlab實現_第2頁
實驗三 基于DCT的數字圖像壓縮及Matlab實現_第3頁
實驗三 基于DCT的數字圖像壓縮及Matlab實現_第4頁
實驗三 基于DCT的數字圖像壓縮及Matlab實現_第5頁
已閱讀5頁,還剩7頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、實驗三 基于DCT的數字圖像壓縮及Matlab實現 2011通一 劉一強一、實驗原理u 圖像壓縮基本原理及模型(一)圖像壓縮基本原理圖像數據壓縮的目的是在滿足一定圖像質量的條件下,用盡可能少的比特數來表示原始圖像,以提高圖像傳輸的效率和減少圖像存儲的容量,在信息論中稱為信源編碼。圖像壓縮是通過刪除圖像數據中冗余的或者不必要的部分來減小圖像數據量的技術,壓縮過程就是編碼過程,解壓縮過程就是解碼過程。壓縮技術分為無損壓縮和有損壓縮兩大類,前者在解碼時可以精確地恢復原圖像,沒有任何損失;后者在解碼時只能近似原圖像,不能無失真地恢復原圖像。假設有一個無記憶的信源,它產生的消息為ai,1iN,其出現的概

2、率是已知的,記為P(ai)。則其信息量定義為:由此可見一個消息出現的可能性越小,其信息量就越多,其出現對信息的貢獻量越大,反之亦然。信源的平均信息量稱為“熵”(entropy),可以表示為:對上式取以2為底的對數時,單位為比特(bits):根據香農(Shannon)無噪聲編碼定理,對于熵為H的信號源,對其進行無失真編碼所可能達到的最低比特數為,這里為一任意小的正數,因此可能達到的最大壓縮比為:       其中B是原始圖像的平均比特率。在圖像壓縮中,壓縮比是一個重要的衡量指標。可以定義壓縮比為:(二)圖像壓縮的基本模型 圖像編碼包括兩

3、個階段,前一個階段就是利用預測模型或正交模型對圖像信號進行變換;后一個階段是利用已變換信號的統計特性,對其分配適當的代碼來進行編碼傳輸。編碼器與解碼器的結構分別如圖(a)、(b)。在發送端,輸入的原始圖像首先經過DCT變換后,其低頻分量都集中在左上角,高頻分量分布在右下角(DCT變換實際上是空間域的低通濾波器)。由于該低頻分量包含了圖像的主要信息,而高頻分量與之相比就不那么重要了,所以可以忽略高頻分量,從而達到壓縮的目的。將高頻分量去掉就要用到量化,這是產生信息損失的根源。“量化”的主要任務是用有限個離散電平來近似表達已抽取出的信息。在此采用均勻量化,通過改變程序中的量化因子Q的值以得到不同壓

4、縮比的圖像。Huffman編碼時,首先對經DCT變換及量化后的圖像收據掃描一遍,計算出各種像素出現的概率;然后按概率的大小指定不同長度的唯一碼字,由此得到一張Huffman表。編碼后的圖像記錄的是每個像素的碼字,而碼字與量化后像素值的對應關系記錄在碼表中。生成的一維字符矩陣即為實際中要傳輸的序列,壓縮后的圖像數據在信道中進行傳輸。在接收端,接收到的壓縮圖像數據首先經過Huffman譯碼,通過搜索已生成的Huffman表,根據碼字與量化后像素值的對應關系,搜索出與碼字對應的像素值,并轉換為二維矩陣。反量化時將以上二維矩陣中的每一個像素值乘以量化因子Q。最后通過DCT反變換得到重建圖像。u 離散余

5、弦變換(DCT)當前處于信息高速流通時代,要求在保證質量的前提下,以較小的空間存儲圖像和較小的比特率傳輸圖像,這就需要采用各種圖像壓縮編碼技術來實現。DCT變換是最小均方誤差條件得出的次最佳正交變換,且已經獲得廣泛的應用,并已經成為許多圖像編碼國際標準的核心。離散余弦變換的變換核是余弦函數,計算速度較快,有利于圖像壓縮和其他處理。在大多數情況下,DCT用于圖像的壓縮操作中。JPEG圖像格式的壓縮算法采用的是DCT。(一) DCT的定義DCT變換利用傅立葉變換的性質,采用圖像邊界褶翻將圖像變換為偶函數形式,然后對圖像進行二維傅立葉變換,變換后僅包含余弦項,所以稱之為離散余弦變換。離散余弦變換的概

6、念1.一維離散余弦正反變換的公式2.二維離散余弦正反變換的公式正變換公式:3.二維離散余弦變換的簡化在二維離散余弦變換中,x,y為空間域采樣值。通常,數字圖像用像素方陣表示,即M=N,在這種情況下,二維離散余弦的正反變換可簡化為:(二)DCT和圖像壓縮DCT編碼屬于正交變換編碼方式,用于去除圖像數據的空間冗余。變換編碼就是將圖像光強矩陣(時域信號)變換到系數空間(頻域信號)上進行處理的方法。在空間上具有強相關的信號,反映在頻域上是在某些特定的區域內能量常常被集中在一起,或者是系數矩陣的分布具有某些規律。我們可以利用這些規律在頻域上減少量化比特數,達到壓縮的目的。圖像經DCT變換以后,DCT系數

7、之間的相關性已經很小,而且大部分能量集中在少數的系數上,因此,DCT變換在圖像壓縮中非常有用,是有損圖像壓縮國際標準JPEG的核心。從原理上講可以對整幅圖像進行DCT變換,但由于圖像各部位上細節的豐富程度不同,這種整體處理的方式效果不好。為此,發送者首先將輸入圖像分解為8×8或16×16的塊,然后再對每個圖像塊進行二維DCT變換,接著再對DCT系數進行量化、編碼和傳輸;接收者通過對量化的DCT系數進行解碼,并對每個圖像塊進行的二維DCT反變換,最后將操作完成后所有的塊拼接起來構成一幅單一的圖像。對于一般的圖像而言,大多數DCT系數值都接近于0,可以去掉這些系數而不會對重建圖

8、像的質量產生重大影響。因此,利用DCT進行圖像壓縮確實可以節約大量的存儲空間。DCT變換的特點是變換后圖像大部分能量集中在左上角,因為左上放映原圖像低頻部分數據,右下反映原圖像高頻部分數據。而圖像的能量通常集中在低頻部分。二、實驗目的:掌握基于DCT變換的圖像壓縮的基本原理及其實現步驟;通過使用MATLAB,對同一幅原始圖像進行壓縮,進一步掌握DCT和圖像壓縮。三、實驗要求:1、 學生在實驗操作過程中自己動手獨立完成,2人為1組。2、 上機過程中由指導老師檢查結果后方可做其他內容。3、 完成實驗報告:按照實驗的每個題目的具體要求完成4、 報告的格式:課程設計名稱(一) 介紹(課程設計的目的和要

9、求等內容)(二) 基本原理或方法(三) 結果與結果分析(四) 參考文獻(五) 源程序清單(要有功能性的注釋)(六) 總結設計體會和問題的討論及感想四、實驗內容:離散余弦變換的Matlab實現利用余弦變換進行圖像壓縮,首先要將輸入圖像分解成8×8或16×16的塊,然后對每個塊進行二維離散余弦變換,最后將變換得到的量化DCT系數進行編碼和傳送,形成壓縮后的圖像格式。解碼時對每個塊進行二維DCT反變換,最后在將反變換后的塊組合成一副圖像。對于通常的圖像來說,大多數的DCT系數的值非常接近于0。如果舍棄這些接近于0的值,在重構圖像時并不會帶來圖像畫面質量的顯著下降。所以,利用DCT

10、進行圖像壓縮可以節約大量的存儲空間。壓縮應該在最合理的近似原圖像的情況下使用最少的系數,使用系數的多少也決定了壓縮比的大小。按照以上的方法,使用MATLAB,將一幅圖像分成8×8的塊使用二維離散余弦變換進行壓縮(壓縮比為16:1,8:1),給出實驗仿真結果,要求顯示壓縮前后的圖像,并且計算壓縮前后圖像的均方誤差MSE。改變壓縮比為8:1,再如前所做,比較不同之處。MATLAB圖像處理工具箱中提供的二維DCT變換及DCT反變換函數如下。1dct2dct2實現圖像的二維離散余弦變換,其語法格式為:(1)B=dct2(A)返回圖像A的二維離散余弦變換值,其大小與A相同,且各元素為離散余弦變

11、換的系數B(k1,k2)。(2)B=dct2(A,m,n)或B=dct2(A,m,n)如果m和n比圖像A大,在對圖像進行二維離散余弦變換之前,先將圖像A補零至m×n。如果m和n比圖像A小,則進行變換之前,將圖像A剪切。2idct2idct2可以實現圖像的二維離散余弦反變換,其語法格式為:B=idct2(A);B=idct2(A,m,n)或B=idct2(A,m,n)。3可將二維DCT轉化為一維DCT來計算。D=dctmtx(N)舉例說明 二維余弦正反變換在MATLAB中的實現:%裝入圖像RGB=imread('autumn.tif');I=rgb2gray(RGB);

12、%畫出圖像imshow(I);figure(2);%進行余弦變換J=dct2(I);imshow(log(abs(J),), colormap(jet(64), colorbar;figure(3);J(abs(J)<10)=0;%進行余弦反變換K=idct2(J)/255;imshow(K);原始圖像 余弦變換系數余弦反變換恢復圖像編程可能用到的函數:imreadim2doubledctmtx(8)blkproc(I,8 8,'P1*x*P2',T,T')imshow(I)title('原始圖像')figure;imshow(I2)title(&

13、#39;壓縮后的圖像')注意:在理解課程設計內容之后,在動手設計之前,建議同學們先做幾件事:1 在MATLAB的Demos中,瀏覽Image Processing/Image Transforms/DCT的演示。2 使用help images 命令,了解圖像處理工具箱的版本和它支持的所有圖像處理函數。3 同學們在設計過程中遇到不知道函數的用法,多借助help命令。I=imread('LENA.TIF');I=im2double(I);%圖像存儲類型轉換T=dctmtx(8);%離散余弦變換矩陣 B=blkproc(I,8 8,'P1*x*P2',T,T&

14、#39;);%對原圖像進行DCT變換mask=1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;B2=blkproc(B,8 8,'P1.*x',mask);%數據壓縮,丟棄右下角高頻數據I2=blkproc(B2,8 8,'P1*x*P2',T',T);%進行DCT反變換,得到壓縮后的圖像subplot(2,2,1);imshow(I)title(&

15、#39;壓縮前的圖像')subplot(2,2,2);imshow(I2)title('壓縮后的圖像')InitialImage=imread('LENA.TIF'); rat=1./8;%設置壓縮比InitialImage=double(InitialImage)/255;%設置系數保留個數T=dctmtx(8);DCTCoe=blkproc(InitialImage,8 8,'P1*x*P2',T,T');%計算離散余弦變換分塊處理CoeVar=im2col(DCTCoe,8 8,'distinct');Coe

16、=CoeVar;%得到DCT系數矩陣Y,Ind=sort(CoeVar); m,n=size(CoeVar);%求出DCT系數矩陣的大小Snum=64-64*rat;%按照壓縮比保留系數for i=1:n Coe(Ind(1:Snum),i)=0;endB2=col2im(Coe,8 8,256 256,'distinct');%重新排列系數塊I2=blkproc(B2,8 8,'P1*x*P2',T', T);%進行反余弦變換subplot(2,2,3);imshow(I2)title('壓縮比8:1')% 計算歸一化圖像的均方誤差er

17、ror=InitialImage.2-I2.2;%計算歸一化圖象的均方誤差MSE=sum(error(:)/prod(size(I2)I=imread('LENA.TIF');I=im2double(I); %圖像存儲類型轉換T=dctmtx(16); %離散余弦變換矩陣B=blkproc(I,16 16,'P1*x*P2',T,T'); %對原圖像進行DCT變換mask=1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 01 1 1 1 1 1 1 0 0 0 0 0 0 0 0 01 1 1 1 1 1 0 0 0 0 0 0 0 0 0

18、01 1 1 1 1 0 0 0 0 0 0 0 0 0 0 01 1 1 1 0 0 0 0 0 0 0 0 0 0 0 01 1 1 0 0 0 0 0 0 0 0 0 0 0 0 01 1 0 0 0 0 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;B2=blkpro

溫馨提示

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

評論

0/150

提交評論