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

下載本文檔

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

文檔簡介

1、摘要隨著科學技術的發展,圖像壓縮技術越來越引起人們的關注。為此從眾多的圖像壓縮編碼標準中選取了基于DCT變換的JPEG圖像壓縮編碼算法進行研究,并通過對比分析各種軟件特性選取了MATLAB進行實驗仿真。首先說明了圖像壓縮在現代通信中的必要性和可行性,然后講述了MATLAB及其圖像處理工具箱的相關知識,并對基于DCT變換的JPEG圖像壓縮算法進行了詳細的研究,重點介紹了JPEG壓縮編碼的具體過程和方法 ,詳細介紹了編碼中DCT變換、量化、熵編碼和霍夫曼編碼等模塊的原理和數學推導以及各模塊的功能分析。最后應用MATLAB進行了實驗仿真并分析結果得出結論。實驗結果表明基于DCT 變換的JPEG 圖像

2、壓縮方法簡單、方便,既能保證有較高的壓縮比,又能保證有較好的圖像質量,應用MATLAB仿真出來的結果較好的反應了其編碼算法原理。關鍵詞JPEG圖像壓縮;DCT;MATLAB;圖像處理工具箱I / 39 目 錄摘要IAbstract錯誤!未定義書簽。第1章 緒論11.1 課題背景11.1.1 離散余弦變換21.1.2 預測技術31.2 圖像壓縮技術的發展和現狀31.2.1 圖像編碼技術發展歷史31.2.2 圖像編碼技術的現狀41.3 MATLAB 及其圖像處理工具箱4第2章 圖像壓縮編碼理論算法62.1 DCT變換的思想來源62.2 基于DCT的JPEG圖像壓縮編碼步驟82.2.1 顏色空間的轉

3、換和采樣82.2.2 二維離散余弦變換92.2.3 DCT系數的量化122.2.4 量化系數的編排132.2.5 DC系數的編碼142.2.6 AC系數的編碼152.2.7 組成位數據流162.2.8 DCT變換在圖像壓縮中的應用192.3代碼實現錯誤!未定義書簽。第1章 緒論1.1 課題背景隨著信息技術的發展,圖像信息被廣泛應用于多媒體通信和計算機系統中,但是圖像數據的一個顯著特點就是信息量大。具有龐大的數據量,如果不經過壓縮,不僅超出了計算機的存儲和處理能力,而且在現有的通信信道的傳輸速率下,是無法完成大量多媒體信息實時傳輸的,因此,為了更有效的存儲、處理和傳輸這些圖像數據,必須對其進行壓

4、縮,因此有必要對圖像壓縮編碼進行研究。由于組成圖像的各像素之間,無論是在水平方向還是在垂直方向上都存在著一定的相關性,因此只要應用某種圖像壓縮編碼方法提取或者減少這種相關性, 就可以達到壓縮數據的目的1。數字圖像的冗余主要表現在以下幾種形式:空間冗余:規則物體和規則背景的表面物理特性都具有相關性,數字化后表現為數字冗余。例如:某圖片的畫面中有一個規則物體,其表面顏色均勻,各部分的亮度、飽和度相近,把該圖片作數字化處理,生成位圖后,很大數量的相鄰像素的數據是完全一樣或十分接近的,完全一樣的數據當然可以壓縮,而十分接近的數據也可以壓縮,因為恢復后人亦分辨不出它與原圖有什么區別,這種壓縮就是對空間冗

5、余的壓縮。時間冗余:序列圖像(如電視圖像和運動圖像)和語音數據的前后有著很強的相關性,經常包含著冗余。在播出該序列圖像時,時間發生了推移,但若干幅畫面的同一部位沒有變化,變化的只是其中某些地方,這就形成了時間冗余。統計冗余:空間冗余和時間冗余是把圖像信號看作概率信號時所反應出的統計特性,因此,這兩種冗余也被稱為統計冗余。編碼冗余:同樣長度的編碼可以表示不同的信息。結構冗余:相似的,對稱的結構如果都加以記錄就出現結構冗余。知識冗余:由圖像的記錄方式與人對圖像的知識差異而產生的冗余。人對許多圖像的理解與某些基礎知識有很大的相關性。許多規律性的結構,人可以由先驗知識和背景知識得到。而計算機存儲圖像時

6、還得把一個個像素信息存入,這就形成冗余。視覺冗余:視覺系統對于圖像場的注意是非均勻和非線性的,視覺系統不是對圖像的任何變化都能感知。所謂的圖像壓縮編碼技術就是對要處理的圖像數據按一定的規則進行變換和組合, 從而達到以盡可能少的數據流(代碼)來表示盡可能多的數據信息。在眾多的圖像壓縮編碼標準中,JPEG(Joint Photographic Experts Group)格式是一種稱為聯合圖像專家組的圖像壓縮格式,它適用于不同類型、不同分辨率的彩色和黑白靜止圖像2。在JPEG圖像壓縮算法中,一種是以離散余弦變換(DCT,Discrete Cosine Transform)為基礎的有損壓縮算法,另一

7、種是以預測技術為基礎的無損壓縮算法。1.1.1 離散余弦變換 DCT變換利用傅立葉變換的性質。采用圖像邊界褶翻將像變換為偶函數形式,然后對圖像進行二維傅立葉變換,變換后僅包含余弦項,所以稱之為離散余弦變換。DCT編碼屬于正交變換編碼方式,用于去除圖像數據的空間冗余。變換編碼就是將圖像光強矩陣(時域信號)變換到系數空間(頻域信號)上進行處理的方法。在空間上具有強相關的信號,反映在頻域上是在某些特定的區域內能量常常被集中在一起,或者是系數矩陣的分布具有某些規律。我們可以利用這些規律在頻域上減少量化比特數,達到壓縮的目的。圖像經DCT變換以后,DCT系數之間的相關性就會變小。而且大部分能量集中在少數

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

9、儲空間。在實驗中,先將輸入的原始lena圖像分為8*8塊,然后再對每個塊進行二維DCT變換。MATLAB圖像處理上具箱中提供的二維DCT變換及DCT反變換函數如下。dct2實現圖像的二維離散余弦變換。其語法格式為:(1)B=dct2(A) 返回圖像A的二維離散余弦變換值,其大小與A相同且各元素為離散余弦變換的系數B(K1,k2)。(2)B=dct2(A,in,n)或B=dct2(A,m,n) 如果m和n比圖像A大,在對圖像進行二維離散余弦變換之前,先將圖像A補零至m*n如果m和n比圖像A小。則進行變換之前,將圖像A剪切。idct2可以實現圖像的二維離散余弦反變換,其語法格式為:B=idct2(

10、A);B=idct2(A,m,n)或B=idct2(A,m,n)。1.1.2 預測技術它是利用空間中相鄰數據的相關性,利用過去和現在出現過的點的數據情況來預測未來點的數據。通常用的方法是差分脈沖編碼調制(DPCM)和自適應差分脈沖編碼調制(ADPCM)。1.2 圖像壓縮技術的發展和現狀1.2.1 圖像編碼技術發展歷史1948年提出電視信號數字化后,圖像壓縮編碼的研究工作就宣告開始了。在這項技術發展的早期,限于客觀條件,僅對幀內預測法和亞取樣內查復原法進行研究,對視覺特性也做了一些極為有限但可貴的研究工作。1966年J.B.O Neal對比分析了DPCM和PCM并提出了用于電視的實驗數據。196

11、9年進行了線性預測編碼的實際實驗。1969年舉行首屆圖像編碼會議。70年代開始進行了幀間預測編碼的研究。80年代開始對運動估值和模型編碼進行研究3。進入90年代,ITU-T和ISO制定了一系列圖像編碼國際建議,如H.261、JPEG、MPEG-1、H.262、H.263、MPEG-4等。 變換編碼是1968年H.C.Andrews等人提出的,采用的是二維離散傅立葉變換,此后相繼出現用其他變換方法的變換編碼,其中包括二維離散余弦變換。1.2.2 圖像編碼技術的現狀經過幾十年的發展,圖像編碼技術業已成熟,一些國際建議的制定極大地推動了圖像編碼技術的實現和產業化,從而推動圖像編碼技術以更快的速度發展

12、,目前的研究方向有兩個:(1) 更好地實現現有的圖像編碼國際建議。 研制出集成度更高、性能更好的圖像編碼專用芯片,使編碼系統成本更低、可靠性更高。解決好現有的圖像編碼系統開發中的技術問題。例如:提高圖像質量、提高抗碼能力等。 (2) 對圖像編碼理論和其他圖像編碼方法的研究。 目前已經提出和正在進行研究的圖像編碼方法有:多分辨率編碼、基于表面描述的編碼、模型編碼、利用人工神經網絡的編碼、利用分形幾何的編碼、利用數學形態學的編碼等等。1.3 MATLAB 及其圖像處理工具箱 如果應用高級語言(如Basic,C,Fortran)編寫仿真程序來實現這一基于DCT的圖像壓縮編碼算法比較麻煩,而且仿真效果

13、也不是十分理想。本文主要應用MATLAB發布的圖像處理工具箱中的相關函數和命令來實基于DCT的圖像壓縮編碼理論算法的仿真。MATLAB語言是由美國MathWorks公司推出的計算機軟件,經過多年的逐步發展與不斷完善,現已成為國際公認的最優秀的科學計算與數學應用軟件之一,它集數值分析、矩陣運算、信號處理和圖形顯示于一體,構成了一個方便的、界面友好的用戶環境,而且還具有可擴展性特征。MATLAB中的數字圖像是以矩陣形式表示的,矩陣運算的語法對MATLAB中的數字圖像同樣適用,這意味著MATLAB強大的矩陣運算能力對用于圖像處理非常有利。圖像處理工具箱(Image Processing Toolbo

14、x)提供了一套全方位的參照標準算法和圖形工具,用于進行圖像處理、分析、可視化和算法開發。可進行圖像壓縮、空間轉換、圖像增強、特征檢測、降噪、圖像分割和圖像配準等功能。工具箱中大部分函數均以開放式 MATLAB 語言編寫,這意味著可以檢查算法、修改源代碼和創建自定義函數。本文利用MATLAB圖像處理工具箱對基于DCT的JPEG圖像壓縮編碼理論算法進行仿真,實驗證明該軟件功能強大,語言簡潔易學,工具箱具有豐富的技術支持并集成了該領域專家的智慧,應用簡單而效果良好。第2章 圖像壓縮編碼理論算法2.1 DCT變換的思想來源信號的變換分析方法中,通常是通過一組適當的基函數對信號進行分解,得到信號在變換域

15、的表示方法,利用信號在變換域中某些特征趨于集中的特點來提取其特征從而進行分析。自1822年傅立葉(Fourier)發表“熱傳導解析理論”以來,傅立葉變換一直是信號處理領域中應用最廣泛、效果最好的一種分析手段。但傅立葉變換只是一種純頻域的分析方法,它在頻域的定位性是完全準確的(即頻域分辨率最高),而在時域無任何定位性(或分辯能力),也即傅立葉變換所反映的是整個信號全部時間下的整體頻域特征,而不能提供任何局部時間段上的頻率信息。事實上,在我們生活中的常見信號通常都具有非平穩的性質,即其頻域性質都是隨時間而變化的。對這一類信號用傅立葉變換進行分析,雖然可以知道信號所包含有哪些頻率信息,但不能知道這些

16、頻率信息具體出現在哪個時間段上,因此不能提供關于信號完整的信息。可見,傅立葉變換不適用于提取局部時間段(或瞬間)的頻域特征信息4。為了研究信號在局部時間范圍的頻域特征,1946年Gabor提出了著名的Gabor變換。其基本思想是,取時間函數作為窗口函數,用與待分析函數相乘,然后再進行傅立葉變換。在Gabor變換的基礎上,為了適應不同問題的需要,進一步發展了多種形式的窗口函數,如矩形窗、漢寧窗、哈明窗等,這一類加窗的傅立葉變換統稱為短時傅立葉變換(STFT)。STFT從本質上講,是用窗函數截取原始信號的一個待分析段進行傅立葉變換,因而可以描述信號在某一局部時間段上的頻率信息。目前,STFT在許多

17、領域獲得了廣泛的應用,但由于STFT的定義決定了其窗函數的大小和形狀均與時間和頻率無關,一旦選定窗口就保持固定不變,不利于分析時變信號。實際上一般的高頻信號持續時間較短,而低頻信號持續時間較長,因此我們期望對于高頻信號采用小時間窗,對于低頻信號采用大時間窗進行分析。在進行信號分析時,這種變時間窗的要求同STFT的固定時窗(窗不隨頻率而變化)的特性是相矛盾的5。離散余弦變換(DCT)從本質上是一種變換分析方法,要在變換時最大的去除分析信號的相關性提取其特征,就必須適當的構造一組基函數,這組基函數以某種形式類似于我們所要表示的數據,甚至具有與數據相同的相關結構。在我們日常生活中常遇到的信號在空間域

18、和頻域都具有相關性。在空間上相隔較近的樣值間的相關性比相隔較遠的大的多,而在頻域上通常呈帶狀。為了分析和表示這樣的信號,我們需要基函數在空間域和頻域是局域性的。由于離散余弦函數的頻域分辨率與時域分辨率成反比,剛好與實際信號長時低頻、短時高頻的特性相吻合,既能精確定位信號的突發跳變,又能把握信號的整體變化率。由此可見,離散余弦變換是一種比較理想的進行信號處理的數學工具6。圖像壓縮編碼的理論算法。(1)基于DCT的JPEG圖像壓縮編碼理論算法 基于DCT編碼的JPEG編碼壓縮過程框圖,如圖2-1所示。壓縮數據原始圖像數據分成8*8的小塊量化器DCT變換熵編碼器碼表量化表圖2-1 基于DCT編碼的J

19、PEG壓縮過程簡化圖上圖是基于DCT變換的圖像壓縮編碼的壓縮過程,解壓縮與上圖的過程相反。在編碼過程中,首先將輸入圖像顏色空間轉換后分解為8×8大小的數據塊,然后用正向二維DCT把每個塊轉變成64個DCT系數值,其中1個數值是直流(DC)系數,即8×8空域圖像子塊的平均值,其余的63個是交流(AC)系數,接下來對DCT系數進行量化,最后將變換得到的量化的DCT系數進行編碼和傳送,這樣就完成了圖像的壓縮過程。在解碼過程中,形成壓縮后的圖像格式,先對已編碼的量子化的DCT系數進行解碼,然后求逆量化并把DCT系數轉化為8×8樣本像塊(使用二維DCT反變換),最后將操作完

20、成后的塊組合成一個單一的圖像。這樣就完成了圖像的解壓過程。2.2 基于DCT的JPEG圖像壓縮編碼步驟2.2.1 顏色空間的轉換和采樣JPEG文件使用的顏色空間為1982年推薦的電視圖像數字化標準CCIR 601(現為ITU-RB T.601)。在這個色彩空間中,每個分量、每個像素的電平規定為255級,用8位代碼表示。JPEG只支持YCbCr顏色模式。其中Y代表亮度,CbCr代表色度。全彩色圖像RGB模式轉換到YCbCr模式,用下組公式。 (2-1) 其逆變換為: (2-2)JPEG是以8×8的塊為單位來進行處理的,由于人眼對亮度Y的敏感度比色度CbCr的敏感度大的多,所以采用縮減取

21、樣的方式,通常采用YUV422取樣,圖2-2所示。圖2-2 YUV422取樣示意圖即對于16×16的塊,Y取4個8×8的塊,CbCr各取2個8×8的塊。也有YUV411方式,Y取4個8×8的塊,CbCr各取1個8×8的塊。YUV422取樣方式,數據減少1/3。YUV411取樣方式,數據減少1/2。縮減取樣一般采用圖2-3所示方法。abcdeb'd'圖2-3 壓縮取樣示意圖2.2.2 二維離散余弦變換 在傅里葉級數展開式中,如果被展開的函數是實偶函數,那么,其傅里葉技術中只包含余弦項,在將其離散化由此可導出余弦變換,或稱之為離散余

22、弦變換(DCT,Discrete Cosine Transform)7。二維離散余弦正變換公式為 (2-3)式中,。二維離散余弦逆變換公式為 (2-4)式中,。 JPEG采用的是8×8大小的子塊的二維離散余弦變換。在編碼器的輸入端,把原始圖像順序地分割成一系列8×8的子塊,子塊的數值在-128到127之間。采用余弦變換獲得64個變換系數8。變換公式,如式(2-5)所示。 (2-5)式中,。 在MATLAB的圖像處理工具箱中,可以直接調用dct2和idct2來實現二維離散余弦變換及其反變換。(1) dct2dct2函數實現圖像的二維離散余弦變換,其語法為:F=dct2(f)運

23、行下列程序:f=imread('cameraman.tif');f=im2double(f);F=dct2(f);subplot(121),imshow(f, );subplot(122),imshow(log(1+20*abs(F), );運行結果如圖24所示。圖24 圖像顯示及圖像DCT變換后頻譜顯示由運行結果可知,DCT變換具有能量集中的性質,數據集中在左上角。因此進行圖像壓縮時離散余弦變換矩陣可以舍棄右下角的高頻數據。(2) idct2 idct2函數實現圖像的二維離散余弦逆變換,其語法為:F=idct2(f)在MATLAB圖像處理工具箱中,有一個對圖像進行塊操作的函數

24、blkproc,利用這個函數,可以直接實現圖像一系列8×8子塊的DCT變換。其語法格式為:B = blkproc(A,m n,fun, parameter1,,parameter2, .)B = blkproc(A,m n,mborder nborder,fun,.)B = blkproc(A,'indexed',.)m n是指圖像以m*n為分塊單位,對圖像進行處理(如8像素*8像素)Fun:應用此函數對分別對每個m*n分塊的像素進行處理parameter1, parameter2:要傳給fun函數的參數mborder nborder:對每個m*n塊上下進行mbord

25、er個單位的擴充,左右進行nborder個單位的擴充,擴充的像素值為0,fun函數對整個擴充后的分塊進行處理。如下列程序:I = imread('cameraman.tif'); fun = idct2;J = blkproc(I,8 8,fun);imagesc(J), colormap(hot)運行結果如圖2-5所示。圖2-5 DCT變換后圖像8×8的圖像經過DCT變換后,其低頻分量都集中在左上角,高頻分量分布在右下角(DCT變換實際上是空間域的低通濾波器)。由于該低頻分量包含了圖像的主要信息(如亮度),而高頻與之相比,就不那么重要了,所以我們可以忽略高頻分量,從

26、而達到壓縮的目的。將高頻分量去掉,這就要用到量化,它是產生信息損失的根源。這里的量化操作,就是將某一個值除以量化表中對應的值。由于量化表左上角的值較小,右上角的值較大,這樣就起到了保持低頻分量,抑制高頻分量的目的。JPEG使用的顏色是YUV格式。我們提到過,Y分量代表了亮度信息,UV分量代表了色差信息。相比而言,Y分量更重要一些。我們可以對Y采用細量化,對UV采用粗量化,可進一步提高壓縮比。所以上面所說的量化表通常有兩張,一張是針對Y的,一張是針對UV的。2.2.3 DCT系數的量化量化是對經過DCT變換后的頻率系數進行量化,其目的是減小非“0”系數的幅度以及增加“0”值系數的數目,它是圖像質

27、量下降的最主要原因。對于基于DCT的JPEG圖像壓縮編碼算法使用如圖2-6所示的均勻量化器進行量化,量化步距是按照系數所在的位置和每種顏色分量的色調值來確定。因為人眼對亮度信號比對色差信號更敏感,因此使用了表2-1所示的種量化表。此外,由于人眼對低頻分量的圖像比對高頻分量的圖像更敏感,因此表中的左上角的量化步距要比右下角的量化步距小9。DCT系數輸入量化系數輸出圖2-6 均勻量化器亮度和色度因為代表的圖像的信息量不同,亮度代表了圖像的低頻分量,色度代表了圖像的高頻分量,要分別對亮度和色度進行量化,所以量化表也是不同的。JPEG壓縮色度和亮度量化表如表2-1所示。表2-1 JPEG壓縮色度和亮度

28、量化表亮度量化表色度量化表161110162440516117182447999999991212141926586055182126669999999914131624405769562426569999999999141722295187806247669999999999991822375668109103779999999999999999243555648110411392999999999999999949647887103121120101999999999999999979929598112100103999999999999999999量化會產生誤差,上圖是綜合大量的圖像測試

29、的實驗結果,對于大部分圖像都有很好的結果。表中可以看出,高頻部分對應的量化值大,目的就是將高頻部分編程接近于0,以便以后處理。JPEG可以在壓縮比和圖像質量間作取舍。方法就是改變量化值。如果量化值放大一倍,則有更多的系數量化為0,提高了壓縮比。2.2.4 量化系數的編排經過DCT變換后,低頻分量集中在左上角,其中F(0,0)(即第一行第一列元素)代表了直流(DC)系數,即8×8子塊的平均值,要對它單獨編碼。由于兩個相鄰的8×8子塊的DC系數相差很小,所以對它們采用差分編碼DPCM,可以提高壓縮比,也就是說對相鄰的子塊DC系數的差值進行編碼。8×8的其它63個元素是

30、交流(AC)系數,采用行程編碼10。所以量化后的系數要重新編排,目的是為了增加連續的“0”系數的個數,就是“0”的游程長度,方法是按照Z字形的式樣編排。DCT變換后低頻分量多呈圓形輻射狀向高頻率衰減,因此可以看成按Z字形衰減。因此,量化系數按Z字形掃描讀數,這樣就把一個8×8的矩陣變成一個1×64的矢量,頻率較低的系數放在矢量的頂部。量化后的DCT系數的編排如圖2-7所示。圖2-7 量化DCT系數的編排量化后的DCT系數的序號如表2-2所示。表2-2 量化DCT系數的序號0156141527282471316262942381217253041439111824314044

31、531019233239455254202233384651556021343747505659613536484957586263 2.2.5 DC系數的編碼8×8子塊的64個變換系數經量化后,按直流系數DC和交流系數AC分成兩類處理。坐標u=v=0的直流系數DC實質上就是空域圖像中64個像素的平均值。圖像塊經過DCT變換之后得到的DC直流系數有兩個特點,一是系數的數值比較大,二是相鄰8×8圖像塊的DC系數值變化不大。根據這個特點,JPEG算法使用了差分脈沖調制編碼技術。差分脈沖編碼調制(DPCM,Differential Pulse Code Modulation),是

32、一種對模擬信號的編碼模式,先根據前一個抽樣值計算出一個預測值,再取當前抽樣值和預測值之差作為編碼用。此差值稱為預測誤差。抽樣值和預測值非常接近(因為相關性強),預測誤差的可能取值范圍比抽樣值變化范圍小。所以可用少幾位編碼比特來對預測誤差編碼,從而降低其比特率。這是利用減小冗余度的辦法,降低了編碼比特率。因此,對DC系數編碼進行差分脈沖編碼就是對相鄰圖像塊之間量化DC系數的差值(Delta)進行編碼,即對相鄰塊之間的DC系數的差值DIFF=DC-DC編碼。DC采用差值脈沖編碼的主要原因是由于在連續色調的圖像中,其差值多半比原值小,對差值進行編碼所需的位數,會比對原值進行編碼所需的位數少許多。例如

33、差值為5,它的二進制表示值為101,如果差值為-5,則先改為正整數5,再將其二進制轉換成1的補數即可。所謂1的補數,就是將每個Bit若值為0,便改成1;Bit為1,則變成0。差值5應保留的位數為3,列出差值所應保留的Bit數與差值內容的對照。 在差值前端另外加入一些差值的霍夫曼碼值,例如亮度差值為5(101)的位數為3,則霍夫曼碼值應該是100,兩者連接在一起即為100101。2.2.6 AC系數的編碼DCT變換所得系數除直流系數之外的其余63個系數稱為交流系數(AC系數)。量化AC系數的特點是1× 64矢量中包含有許多“0”系數,并且許多“0”是連續的,因此使用非常簡單和直觀的游程

34、長度編碼(RLE)對它們進行編碼。所謂行程編碼(Run-Length Encoding)就是指僅存儲一個像素值以及具有相同顏色的像素數目的圖像數據編碼方式,或稱游程編碼,常用RLE(Run-Length Encoding)表示。該壓縮編碼技術相當直觀和經濟,運算也相當簡單,因此解壓縮速度很快。RLE壓縮編碼尤其適用于計算機生成的圖形圖像,對減少存儲容量很有效果11。 63個AC系數采用行程編碼的方式進行編碼的格式如圖2-8所示。也即在AC01到AC63中,找出每一個非零的AC值,將其表示成(NN/SS)VV的形式,其中:NN表示該AC值前的0的個數。而SS、VV與DC的定義一樣。如果連續的非0

35、超過15個時,增加一個擴展字節:(15/0)表示連續16個0。另外若有一串0延伸到AC63,一律用(0/0)表示結束。7654321076543210第一字節第二字節兩個非零值之間的連續零的個數下一個非零值所占的比特數下一個非零系數的實際值圖2-8 AC編碼格式對于AC系數,有兩個符號。符號1為行程和尺寸,即上面的(RunLength,Size)。(0,0)和(15,0)是兩個比較特殊的情況。(0,0)表示塊結束標志(EOB), (15,0)表示ZRL,當行程長度超過15時,用增加ZRL的個數來解決,所以最多有三個ZRL(3×16+15=63)。符號2為幅度值(Amplitude)。

36、對于DC系數,也有兩個符號。符號1為尺寸(Size);符號2為幅度值(Amplitude)。對于AC系數,符號1和符號2分別進行編碼。零行程長度超過15個時,有一個符號(15,0),塊結束時只有一個符號(0,0)。對符號1進行Huffman編碼(亮度,色差的Huffman碼表不同)。對符號2進行變長整數VLI編碼。舉例來說:Size=6時,Amplitude的范圍是-63-32,以及3263,對絕對值相同,符號相反的碼字之間為反碼關系。所以AC系數為32的碼字為100000,33的碼字為100001,-32的碼字為011111,-33的碼字為011110。符號2的碼字緊接于符號1的碼字之后。對

37、于DC系數,Y和UV的Huffman碼表也不同。2.2.7 組成位數據流JPEG編碼的最后一個步驟是把各種標記代碼和編碼后的圖像數據組成一幀一幀的數據,這樣做的目的是為了便于傳輸、存儲和譯碼器進行譯碼,這樣的組織的數據通常稱為JPEG位數據流(JPEG bit stream)12。舉個例子來說明上述過程。下面為8×8的亮度(Y)圖像子塊經過量化后的系數,如表2-3所示。表2-3 亮度量化后的系數150-100000-2-1000000-1-10000000000000000000000000000000000000000000000可見量化后只有左上角的幾個點(低頻分量)不為零,這樣

38、采用行程編碼就會很有效。第一步,熵編碼的中間格式表示。先看DC系數。假設前一個8×8子塊DC系數的量化值為12,則本塊DC系數與它的差為3,根據下表表2-4 DC系數表SizeAmplitude0011,123,-2,2,337-4,47415-8,815531-16,1631663-32,32637127-64,641278255-128,1282559511-256,256511101023512,5121023112047-1024,10242047查表得Size=2,Amplitude=3,所以DC中間格式為(2)(3)。下面對AC系數編碼。經過Zig-Zag掃描后,遇到的第

39、一個非零系數為-2,其中遇到零的個數為1(即RunLength),根據下面這張AC系數表:表2-5 AC系數表 SizeAmplitude11,123,-2,2,337-4,47415-8,815531-16,1631663-32,32637127-64,641278255-128,1282559511-256,256511101023512,5121023查表得Size=2。所以RunLength=1,Size=2,Amplitude=3,所以AC中間格式為(1,2)(-2)。其余的點類似,可以求得這個8×8子塊熵編碼的中間格式為(DC)(2)(3),(1,2)(-2),(0,1)

40、(-1),(0,1)(-1),(0,1)(-1),(2,1)(-1),(EOB)(0,0)第二步,熵編碼。對于(2)(3):2查DC亮度Huffman表得到11,3經過VLI編碼為011;對于(1,2)(-2):(1,2)查AC亮度Huffman表得到11011,-2是2的反碼,為01;對于(0,1)(-1):(0,1)查AC亮度Huffman表得到00,-1是1的反碼,為0;.最后,這一8×8子塊亮度信息壓縮后的數據流為11011,1101101,000, 000, 000,111000,1010。總共31比特,其壓縮比是64×8/31=16.5,大約每個象素用半個比特。

41、以上是圖像壓縮編碼的整個過程。從上面的例子可以看出,壓縮比和圖像質量是呈反比的,以下是壓縮效率與圖像質量之間的大致關系,可以根據需要,選擇合適的壓縮比。壓縮比和圖像質量的關系如表2-6所示。表2-6 壓縮比與圖像質量的關系壓縮效率(單位:bits/pixel)圖像質量0.250.50中好,可滿足某些應用0.500.75好很好,滿足多數應用0.751.5極好,滿足大多數應用1.52.0與原始圖像幾乎一樣2.2.8 DCT變換在圖像壓縮中的應用JPEG格式是目前網絡上最流行的圖像格式,是可以把文件壓縮到最小的格式,在 Photoshop軟件中以JPEG格式儲存時,提供11級壓縮級別,以010級表示

42、。其中0級壓縮比最高,圖像品質最差。即使采用細節幾乎無損的10 級質量保存時,壓縮比也可達 5:1。以BMP格式保存時得到428MB圖像文件,在采用JPG格式保存時,其文件僅為178KB,壓縮比達到24:1。經過多次比較,采用第8級壓縮為存儲空間與圖像質量兼得的最佳比例。JPEG格式的應用非常廣泛,特別是在網絡和光盤讀物上,都能找到它的身影。目前各類瀏覽器均支持JPEG這種圖像格式,因為JPEG格式的文件尺寸較小,下載速度快13。2.3 JPEG圖像壓縮MATLAB仿真實現具體代碼% JPEGdemo.m%組員:池國錕 朱巖 黃曉 秦世寧%本次我們采用的是JPEG標準中的順序編碼,也叫JPEG

43、算法。%其中只考慮灰度圖片%部分代碼我們參考了:數字圖像處理及matlab實現(第二版)-楊杰matlab數字圖像處理實戰-趙小川數字圖像處理與分析基礎-matlab實現-孔明 博客hesays-jpeg圖像編碼解碼 百度文庫-基于matlab的圖像編解碼技術%其實現主要有一下4個步驟:%1)分塊%2)離散余弦變換(DCT變換)%3)量化%4)哈弗曼編碼% a)直流分量的編碼過程-(差分編碼:對當前快的直流分量與上一塊的直流分量之差進行編碼);% b)交流分量的編碼過程-除了和直流分量編碼一樣的話,還采用將連續為零的系數長度及其組合號結合后再進行哈弗曼編碼的方法。;clear allclc%

44、Load datadisp('Enter .')disp('0 - 加載256 x 256的圖片, ')disp('1 - 使用文本輸入8*8的矩陣')chos=input('輸入你的選擇 0/1: ');if isempty(chos), chos=0;return, end % 默認選擇,若為空就默認為0,load 64 x 64;if chos=0, load lena.mat; %加載妮娜的圖像 %在數字圖像處理中,Lena(Lenna)是一張被廣泛使用的標準圖片, %特別在圖像壓縮的算法研究中 f=x; imshow(m

45、at2gray(f) whos; clear xelse % f為文本輸入的8*8矩陣。f=139 144 149 153 155 155 155 155144 151 153 156 159 156 156 156150 155 160 163 158 156 156 156159 161 162 160 160 159 159 159159 160 161 162 162 155 155 155161 161 161 161 160 157 157 157162 162 161 163 162 157 157 157162 162 161 161 163 158 158 158;end%e

46、cho on%圖像的預處理是將每個像素灰度值減去128,%圖像數據值必須減去128,是因為DCT轉換公式所接受的數字范圍是在-128到+127之間。if chos=0, f=f-128; elseif chos=1, f=f-128, end%break;drawnowmf,nf=size(f); %返回矩陣的行列mb=mf/8; nb=nf/8; %計算f分塊后的塊數 %計算每個8×8子塊的離散DCT系數if chos=0, %blkproc()函數的功能:對圖像進行分塊的dct處理 Ff=blkproc(f,8 8,'dct'); %對f的每個子塊的列進行DCT變

47、換 Ff=blkproc(Ff',8 8,'dct'); % 對f的每個子塊的行進行DCT變換 Ff=round(Ff'); % 對矩陣Ff'中每個元素朝最近的方向取整數部分elseif chos=1, Ff=blkproc(f,8 8,'dct'), Ff=blkproc(Ff',8 8,'dct'), Ff=round(Ff'), end%break;% 按比例量化%jpeg亮度量化表Q =16 11 10 16 24 40 51 61 12 12 14 19 26 58 60 55 14 13 16

48、24 40 57 69 56 14 17 22 29 51 87 80 62 18 22 37 56 68 109 103 77 24 35 55 64 81 104 113 92 49 64 78 87 103 121 120 101 72 92 95 98 112 100 103 99;%pause% 現在進行量化取整if chos=0, %將頻率系數除以量化矩陣的值之后取整,即完成了量化過程 Fq=round(blkproc(Ff,8 8,'divq',Q);elseif chos=1, Fq=round(blkproc(Ff,8 8,'divq',Q),end%pause%echo off%經過DCT變換后的矩陣數據自然

溫馨提示

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

評論

0/150

提交評論