基于DCT圖像壓縮編碼算法MATLAB實(shí)現(xiàn)_第1頁
基于DCT圖像壓縮編碼算法MATLAB實(shí)現(xiàn)_第2頁
基于DCT圖像壓縮編碼算法MATLAB實(shí)現(xiàn)_第3頁
基于DCT圖像壓縮編碼算法MATLAB實(shí)現(xiàn)_第4頁
基于DCT圖像壓縮編碼算法MATLAB實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

14、ox)提供了一套全方位的參照標(biāo)準(zhǔn)算法和圖形工具,用于進(jìn)行圖像處理、分析、可視化和算法開發(fā)??蛇M(jìn)行圖像壓縮、空間轉(zhuǎn)換、圖像增強(qiáng)、特征檢測、降噪、圖像分割和圖像配準(zhǔn)等功能。工具箱中大部分函數(shù)均以開放式 MATLAB 語言編寫,這意味著可以檢查算法、修改源代碼和創(chuàng)建自定義函數(shù)。本文利用MATLAB圖像處理工具箱對(duì)基于DCT的JPEG圖像壓縮編碼理論算法進(jìn)行仿真,實(shí)驗(yàn)證明該軟件功能強(qiáng)大,語言簡潔易學(xué),工具箱具有豐富的技術(shù)支持并集成了該領(lǐng)域?qū)<业闹腔郏瑧?yīng)用簡單而效果良好。516第2章 圖像壓縮編碼理論算法2.1 DCT變換的思想來源信號(hào)的變換分析方法中,通常是通過一組適當(dāng)?shù)幕瘮?shù)對(duì)信號(hào)進(jìn)行分解,得到信號(hào)

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

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

17、T在許多領(lǐng)域獲得了廣泛的應(yīng)用,但由于STFT的定義決定了其窗函數(shù)的大小和形狀均與時(shí)間和頻率無關(guān),一旦選定窗口就保持固定不變,不利于分析時(shí)變信號(hào)。實(shí)際上一般的高頻信號(hào)持續(xù)時(shí)間較短,而低頻信號(hào)持續(xù)時(shí)間較長,因此我們期望對(duì)于高頻信號(hào)采用小時(shí)間窗,對(duì)于低頻信號(hào)采用大時(shí)間窗進(jìn)行分析。在進(jìn)行信號(hào)分析時(shí),這種變時(shí)間窗的要求同STFT的固定時(shí)窗(窗不隨頻率而變化)的特性是相矛盾的5。離散余弦變換(DCT)從本質(zhì)上是一種變換分析方法,要在變換時(shí)最大的去除分析信號(hào)的相關(guān)性提取其特征,就必須適當(dāng)?shù)臉?gòu)造一組基函數(shù),這組基函數(shù)以某種形式類似于我們所要表示的數(shù)據(jù),甚至具有與數(shù)據(jù)相同的相關(guān)結(jié)構(gòu)。在我們?nèi)粘I钪谐S龅降男盘?hào)

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

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

20、。這樣就完成了圖像的解壓過程。2.2 基于DCT的JPEG圖像壓縮編碼步驟2.2.1 顏色空間的轉(zhuǎn)換和采樣JPEG文件使用的顏色空間為1982年推薦的電視圖像數(shù)字化標(biāo)準(zhǔn)CCIR 601(現(xiàn)為ITU-RB T.601)。在這個(gè)色彩空間中,每個(gè)分量、每個(gè)像素的電平規(guī)定為255級(jí),用8位代碼表示。JPEG只支持YCbCr顏色模式。其中Y代表亮度,CbCr代表色度。全彩色圖像RGB模式轉(zhuǎn)換到Y(jié)CbCr模式,用下組公式。 (2-1) 其逆變換為: (2-2)JPEG是以88的塊為單位來進(jìn)行處理的,由于人眼對(duì)亮度Y的敏感度比色度CbCr的敏感度大的多,所以采用縮減取樣的方式,通常采用YUV422取樣,圖2

21、-2所示。圖2-2 YUV422取樣示意圖即對(duì)于1616的塊,Y取4個(gè)88的塊,CbCr各取2個(gè)88的塊。也有YUV411方式,Y取4個(gè)88的塊,CbCr各取1個(gè)88的塊。YUV422取樣方式,數(shù)據(jù)減少1/3。YUV411取樣方式,數(shù)據(jù)減少1/2??s減取樣一般采用圖2-3所示方法。abcdebd圖2-3 壓縮取樣示意圖2.2.2 二維離散余弦變換 在傅里葉級(jí)數(shù)展開式中,如果被展開的函數(shù)是實(shí)偶函數(shù),那么,其傅里葉技術(shù)中只包含余弦項(xiàng),在將其離散化由此可導(dǎo)出余弦變換,或稱之為離散余弦變換(DCT,Discrete Cosine Transform)7。二維離散余弦正變換公式為 (2-3)式中,。二維

22、離散余弦逆變換公式為 (2-4)式中,。 JPEG采用的是88大小的子塊的二維離散余弦變換。在編碼器的輸入端,把原始圖像順序地分割成一系列88的子塊,子塊的數(shù)值在-128到127之間。采用余弦變換獲得64個(gè)變換系數(shù)8。變換公式,如式(2-5)所示。 (2-5)式中,。 在MATLAB的圖像處理工具箱中,可以直接調(diào)用dct2和idct2來實(shí)現(xiàn)二維離散余弦變換及其反變換。(1) dct2dct2函數(shù)實(shí)現(xiàn)圖像的二維離散余弦變換,其語法為:F=dct2(f)運(yùn)行下列程序:f=imread(cameraman.tif);f=im2double(f);F=dct2(f);subplot(121),imsh

23、ow(f, );subplot(122),imshow(log(1+20*abs(F), );運(yùn)行結(jié)果如圖24所示。圖24 圖像顯示及圖像DCT變換后頻譜顯示由運(yùn)行結(jié)果可知,DCT變換具有能量集中的性質(zhì),數(shù)據(jù)集中在左上角。因此進(jìn)行圖像壓縮時(shí)離散余弦變換矩陣可以舍棄右下角的高頻數(shù)據(jù)。(2) idct2 idct2函數(shù)實(shí)現(xiàn)圖像的二維離散余弦逆變換,其語法為:F=idct2(f)在MATLAB圖像處理工具箱中,有一個(gè)對(duì)圖像進(jìn)行塊操作的函數(shù)blkproc,利用這個(gè)函數(shù),可以直接實(shí)現(xiàn)圖像一系列88子塊的DCT變換。其語法格式為:B = blkproc(A,m n,fun, parameter1,,par

24、ameter2, .)B = blkproc(A,m n,mborder nborder,fun,.)B = blkproc(A,indexed,.)m n是指圖像以m*n為分塊單位,對(duì)圖像進(jìn)行處理(如8像素*8像素)Fun:應(yīng)用此函數(shù)對(duì)分別對(duì)每個(gè)m*n分塊的像素進(jìn)行處理parameter1, parameter2:要傳給fun函數(shù)的參數(shù)mborder nborder:對(duì)每個(gè)m*n塊上下進(jìn)行mborder個(gè)單位的擴(kuò)充,左右進(jìn)行nborder個(gè)單位的擴(kuò)充,擴(kuò)充的像素值為0,fun函數(shù)對(duì)整個(gè)擴(kuò)充后的分塊進(jìn)行處理。如下列程序:I = imread(cameraman.tif); fun = idct

25、2;J = blkproc(I,8 8,fun);imagesc(J), colormap(hot)運(yùn)行結(jié)果如圖2-5所示。圖2-5 DCT變換后圖像88的圖像經(jīng)過DCT變換后,其低頻分量都集中在左上角,高頻分量分布在右下角(DCT變換實(shí)際上是空間域的低通濾波器)。由于該低頻分量包含了圖像的主要信息(如亮度),而高頻與之相比,就不那么重要了,所以我們可以忽略高頻分量,從而達(dá)到壓縮的目的。將高頻分量去掉,這就要用到量化,它是產(chǎn)生信息損失的根源。這里的量化操作,就是將某一個(gè)值除以量化表中對(duì)應(yīng)的值。由于量化表左上角的值較小,右上角的值較大,這樣就起到了保持低頻分量,抑制高頻分量的目的。JPEG使用的

26、顏色是YUV格式。我們提到過,Y分量代表了亮度信息,UV分量代表了色差信息。相比而言,Y分量更重要一些。我們可以對(duì)Y采用細(xì)量化,對(duì)UV采用粗量化,可進(jìn)一步提高壓縮比。所以上面所說的量化表通常有兩張,一張是針對(duì)Y的,一張是針對(duì)UV的。2.2.3 DCT系數(shù)的量化量化是對(duì)經(jīng)過DCT變換后的頻率系數(shù)進(jìn)行量化,其目的是減小非“0”系數(shù)的幅度以及增加“0”值系數(shù)的數(shù)目,它是圖像質(zhì)量下降的最主要原因。對(duì)于基于DCT的JPEG圖像壓縮編碼算法使用如圖2-6所示的均勻量化器進(jìn)行量化,量化步距是按照系數(shù)所在的位置和每種顏色分量的色調(diào)值來確定。因?yàn)槿搜蹖?duì)亮度信號(hào)比對(duì)色差信號(hào)更敏感,因此使用了表2-1所示的種量化表

27、。此外,由于人眼對(duì)低頻分量的圖像比對(duì)高頻分量的圖像更敏感,因此表中的左上角的量化步距要比右下角的量化步距小9。DCT系數(shù)輸入量化系數(shù)輸出圖2-6 均勻量化器亮度和色度因?yàn)榇淼膱D像的信息量不同,亮度代表了圖像的低頻分量,色度代表了圖像的高頻分量,要分別對(duì)亮度和色度進(jìn)行量化,所以量化表也是不同的。JPEG壓縮色度和亮度量化表如表2-1所示。表2-1 JPEG壓縮色度和亮度量化表亮度量化表色度量化表16111016244051611718244799999999121214192658605518212666999999991413162440576956242656999999999914172

28、2295187806247669999999999991822375668109103779999999999999999243555648110411392999999999999999949647887103121120101999999999999999979929598112100103999999999999999999量化會(huì)產(chǎn)生誤差,上圖是綜合大量的圖像測試的實(shí)驗(yàn)結(jié)果,對(duì)于大部分圖像都有很好的結(jié)果。表中可以看出,高頻部分對(duì)應(yīng)的量化值大,目的就是將高頻部分編程接近于0,以便以后處理。JPEG可以在壓縮比和圖像質(zhì)量間作取舍。方法就是改變量化值。如果量化值放大一倍,則有更多的系數(shù)量化為0

29、,提高了壓縮比。2.2.4 量化系數(shù)的編排經(jīng)過DCT變換后,低頻分量集中在左上角,其中F(0,0)(即第一行第一列元素)代表了直流(DC)系數(shù),即88子塊的平均值,要對(duì)它單獨(dú)編碼。由于兩個(gè)相鄰的88子塊的DC系數(shù)相差很小,所以對(duì)它們采用差分編碼DPCM,可以提高壓縮比,也就是說對(duì)相鄰的子塊DC系數(shù)的差值進(jìn)行編碼。88的其它63個(gè)元素是交流(AC)系數(shù),采用行程編碼10。所以量化后的系數(shù)要重新編排,目的是為了增加連續(xù)的“0”系數(shù)的個(gè)數(shù),就是“0”的游程長度,方法是按照Z字形的式樣編排。DCT變換后低頻分量多呈圓形輻射狀向高頻率衰減,因此可以看成按Z字形衰減。因此,量化系數(shù)按Z字形掃描讀數(shù),這樣就

30、把一個(gè)88的矩陣變成一個(gè)164的矢量,頻率較低的系數(shù)放在矢量的頂部。量化后的DCT系數(shù)的編排如圖2-7所示。圖2-7 量化DCT系數(shù)的編排量化后的DCT系數(shù)的序號(hào)如表2-2所示。表2-2 量化DCT系數(shù)的序號(hào)0156141527282471316262942381217253041439111824314044531019233239455254202233384651556021343747505659613536484957586263 2.2.5 DC系數(shù)的編碼88子塊的64個(gè)變換系數(shù)經(jīng)量化后,按直流系數(shù)DC和交流系數(shù)AC分成兩類處理。坐標(biāo)u=v=0的直流系數(shù)DC實(shí)質(zhì)上就是空域圖像中64

31、個(gè)像素的平均值。圖像塊經(jīng)過DCT變換之后得到的DC直流系數(shù)有兩個(gè)特點(diǎn),一是系數(shù)的數(shù)值比較大,二是相鄰88圖像塊的DC系數(shù)值變化不大。根據(jù)這個(gè)特點(diǎn),JPEG算法使用了差分脈沖調(diào)制編碼技術(shù)。差分脈沖編碼調(diào)制(DPCM,Differential Pulse Code Modulation),是一種對(duì)模擬信號(hào)的編碼模式,先根據(jù)前一個(gè)抽樣值計(jì)算出一個(gè)預(yù)測值,再取當(dāng)前抽樣值和預(yù)測值之差作為編碼用。此差值稱為預(yù)測誤差。抽樣值和預(yù)測值非常接近(因?yàn)橄嚓P(guān)性強(qiáng)),預(yù)測誤差的可能取值范圍比抽樣值變化范圍小。所以可用少幾位編碼比特來對(duì)預(yù)測誤差編碼,從而降低其比特率。這是利用減小冗余度的辦法,降低了編碼比特率。因此,對(duì)

32、DC系數(shù)編碼進(jìn)行差分脈沖編碼就是對(duì)相鄰圖像塊之間量化DC系數(shù)的差值(Delta)進(jìn)行編碼,即對(duì)相鄰塊之間的DC系數(shù)的差值DIFF=DC-DC編碼。DC采用差值脈沖編碼的主要原因是由于在連續(xù)色調(diào)的圖像中,其差值多半比原值小,對(duì)差值進(jìn)行編碼所需的位數(shù),會(huì)比對(duì)原值進(jìn)行編碼所需的位數(shù)少許多。例如差值為5,它的二進(jìn)制表示值為101,如果差值為-5,則先改為正整數(shù)5,再將其二進(jìn)制轉(zhuǎn)換成1的補(bǔ)數(shù)即可。所謂1的補(bǔ)數(shù),就是將每個(gè)Bit若值為0,便改成1;Bit為1,則變成0。差值5應(yīng)保留的位數(shù)為3,列出差值所應(yīng)保留的Bit數(shù)與差值內(nèi)容的對(duì)照。 在差值前端另外加入一些差值的霍夫曼碼值,例如亮度差值為5(101)的

33、位數(shù)為3,則霍夫曼碼值應(yīng)該是100,兩者連接在一起即為100101。2.2.6 AC系數(shù)的編碼DCT變換所得系數(shù)除直流系數(shù)之外的其余63個(gè)系數(shù)稱為交流系數(shù)(AC系數(shù))。量化AC系數(shù)的特點(diǎn)是1 64矢量中包含有許多“0”系數(shù),并且許多“0”是連續(xù)的,因此使用非常簡單和直觀的游程長度編碼(RLE)對(duì)它們進(jìn)行編碼。所謂行程編碼(Run-Length Encoding)就是指僅存儲(chǔ)一個(gè)像素值以及具有相同顏色的像素?cái)?shù)目的圖像數(shù)據(jù)編碼方式,或稱游程編碼,常用RLE(Run-Length Encoding)表示。該壓縮編碼技術(shù)相當(dāng)直觀和經(jīng)濟(jì),運(yùn)算也相當(dāng)簡單,因此解壓縮速度很快。RLE壓縮編碼尤其適用于計(jì)算機(jī)

34、生成的圖形圖像,對(duì)減少存儲(chǔ)容量很有效果11。 63個(gè)AC系數(shù)采用行程編碼的方式進(jìn)行編碼的格式如圖2-8所示。也即在AC01到AC63中,找出每一個(gè)非零的AC值,將其表示成(NN/SS)VV的形式,其中:NN表示該AC值前的0的個(gè)數(shù)。而SS、VV與DC的定義一樣。如果連續(xù)的非0超過15個(gè)時(shí),增加一個(gè)擴(kuò)展字節(jié):(15/0)表示連續(xù)16個(gè)0。另外若有一串0延伸到AC63,一律用(0/0)表示結(jié)束。7654321076543210第一字節(jié)第二字節(jié)兩個(gè)非零值之間的連續(xù)零的個(gè)數(shù)下一個(gè)非零值所占的比特?cái)?shù)下一個(gè)非零系數(shù)的實(shí)際值圖2-8 AC編碼格式對(duì)于AC系數(shù),有兩個(gè)符號(hào)。符號(hào)1為行程和尺寸,即上面的(Run

35、Length,Size)。(0,0)和(15,0)是兩個(gè)比較特殊的情況。(0,0)表示塊結(jié)束標(biāo)志(EOB), (15,0)表示ZRL,當(dāng)行程長度超過15時(shí),用增加ZRL的個(gè)數(shù)來解決,所以最多有三個(gè)ZRL(316+15=63)。符號(hào)2為幅度值(Amplitude)。對(duì)于DC系數(shù),也有兩個(gè)符號(hào)。符號(hào)1為尺寸(Size);符號(hào)2為幅度值(Amplitude)。對(duì)于AC系數(shù),符號(hào)1和符號(hào)2分別進(jìn)行編碼。零行程長度超過15個(gè)時(shí),有一個(gè)符號(hào)(15,0),塊結(jié)束時(shí)只有一個(gè)符號(hào)(0,0)。對(duì)符號(hào)1進(jìn)行Huffman編碼(亮度,色差的Huffman碼表不同)。對(duì)符號(hào)2進(jìn)行變長整數(shù)VLI編碼。舉例來說:Size=

36、6時(shí),Amplitude的范圍是-63-32,以及3263,對(duì)絕對(duì)值相同,符號(hào)相反的碼字之間為反碼關(guān)系。所以AC系數(shù)為32的碼字為100000,33的碼字為100001,-32的碼字為011111,-33的碼字為011110。符號(hào)2的碼字緊接于符號(hào)1的碼字之后。對(duì)于DC系數(shù),Y和UV的Huffman碼表也不同。2.2.7 組成位數(shù)據(jù)流JPEG編碼的最后一個(gè)步驟是把各種標(biāo)記代碼和編碼后的圖像數(shù)據(jù)組成一幀一幀的數(shù)據(jù),這樣做的目的是為了便于傳輸、存儲(chǔ)和譯碼器進(jìn)行譯碼,這樣的組織的數(shù)據(jù)通常稱為JPEG位數(shù)據(jù)流(JPEG bit stream)12。舉個(gè)例子來說明上述過程。下面為88的亮度(Y)圖像子塊

37、經(jīng)過量化后的系數(shù),如表2-3所示。表2-3 亮度量化后的系數(shù)150-100000-2-1000000-1-1000000000000000000000000000000000000000000000017可見量化后只有左上角的幾個(gè)點(diǎn)(低頻分量)不為零,這樣采用行程編碼就會(huì)很有效。第一步,熵編碼的中間格式表示。先看DC系數(shù)。假設(shè)前一個(gè)88子塊DC系數(shù)的量化值為12,則本塊DC系數(shù)與它的差為3,根據(jù)下表表2-4 DC系數(shù)表SizeAmplitude0011,123,-2,2,337-4,47415-8,815531-16,1631663-32,32637127-64,641278255-128,1

38、282559511-256,256511101023512,5121023112047-1024,10242047查表得Size=2,Amplitude=3,所以DC中間格式為(2)(3)。下面對(duì)AC系數(shù)編碼。經(jīng)過Zig-Zag掃描后,遇到的第一個(gè)非零系數(shù)為-2,其中遇到零的個(gè)數(shù)為1(即RunLength),根據(jù)下面這張AC系數(shù)表:表2-5 AC系數(shù)表 SizeAmplitude11,123,-2,2,337-4,47415-8,815531-16,1631663-32,32637127-64,641278255-128,1282559511-256,256511101023512,51210

39、23查表得Size=2。所以RunLength=1,Size=2,Amplitude=3,所以AC中間格式為(1,2)(-2)。其余的點(diǎn)類似,可以求得這個(gè)88子塊熵編碼的中間格式為(DC)(2)(3),(1,2)(-2),(0,1)(-1),(0,1)(-1),(0,1)(-1),(2,1)(-1),(EOB)(0,0)第二步,熵編碼。對(duì)于(2)(3):2查DC亮度Huffman表得到11,3經(jīng)過VLI編碼為011;對(duì)于(1,2)(-2):(1,2)查AC亮度Huffman表得到11011,-2是2的反碼,為01;對(duì)于(0,1)(-1):(0,1)查AC亮度Huffman表得到00,-1是1的

40、反碼,為0;.最后,這一88子塊亮度信息壓縮后的數(shù)據(jù)流為11011,1101101,000, 000, 000,111000,1010??偣?1比特,其壓縮比是648/31=16.5,大約每個(gè)象素用半個(gè)比特。以上是圖像壓縮編碼的整個(gè)過程。從上面的例子可以看出,壓縮比和圖像質(zhì)量是呈反比的,以下是壓縮效率與圖像質(zhì)量之間的大致關(guān)系,可以根據(jù)需要,選擇合適的壓縮比。壓縮比和圖像質(zhì)量的關(guān)系如表2-6所示。表2-6 壓縮比與圖像質(zhì)量的關(guān)系壓縮效率(單位:bits/pixel)圖像質(zhì)量0.250.50中好,可滿足某些應(yīng)用0.500.75好很好,滿足多數(shù)應(yīng)用0.751.5極好,滿足大多數(shù)應(yīng)用1.52.0與原始

41、圖像幾乎一樣2.2.8 DCT變換在圖像壓縮中的應(yīng)用JPEG格式是目前網(wǎng)絡(luò)上最流行的圖像格式,是可以把文件壓縮到最小的格式,在 Photoshop軟件中以JPEG格式儲(chǔ)存時(shí),提供11級(jí)壓縮級(jí)別,以010級(jí)表示。其中0級(jí)壓縮比最高,圖像品質(zhì)最差。即使采用細(xì)節(jié)幾乎無損的10 級(jí)質(zhì)量保存時(shí),壓縮比也可達(dá) 5:1。以BMP格式保存時(shí)得到428MB圖像文件,在采用JPG格式保存時(shí),其文件僅為178KB,壓縮比達(dá)到24:1。經(jīng)過多次比較,采用第8級(jí)壓縮為存儲(chǔ)空間與圖像質(zhì)量兼得的最佳比例。JPEG格式的應(yīng)用非常廣泛,特別是在網(wǎng)絡(luò)和光盤讀物上,都能找到它的身影。目前各類瀏覽器均支持JPEG這種圖像格式,因?yàn)镴

42、PEG格式的文件尺寸較小,下載速度快13。25燕山大學(xué)本科生畢業(yè)設(shè)計(jì)(論文)2.3 JPEG圖像壓縮MATLAB仿真實(shí)現(xiàn)具體代碼% JPEGdemo.m%組員:池國錕 朱巖 黃曉 秦世寧%本次我們采用的是JPEG標(biāo)準(zhǔn)中的順序編碼,也叫JPEG算法。%其中只考慮灰度圖片%部分代碼我們參考了:數(shù)字圖像處理及matlab實(shí)現(xiàn)(第二版)-楊杰matlab數(shù)字圖像處理實(shí)戰(zhàn)-趙小川數(shù)字圖像處理與分析基礎(chǔ)-matlab實(shí)現(xiàn)-孔明 博客hesays-jpeg圖像編碼解碼 百度文庫-基于matlab的圖像編解碼技術(shù)%其實(shí)現(xiàn)主要有一下4個(gè)步驟:%1)分塊%2)離散余弦變換(DCT變換)%3)量化%4)哈弗曼編碼%

43、 a)直流分量的編碼過程-(差分編碼:對(duì)當(dāng)前快的直流分量與上一塊的直流分量之差進(jìn)行編碼);% b)交流分量的編碼過程-除了和直流分量編碼一樣的話,還采用將連續(xù)為零的系數(shù)長度及其組合號(hào)結(jié)合后再進(jìn)行哈弗曼編碼的方法。;clear allclc% Load datadisp(Enter .)disp(0 - 加載256 x 256的圖片, )disp(1 - 使用文本輸入8*8的矩陣)chos=input(輸入你的選擇 0/1: );if isempty(chos), chos=0;return, end % 默認(rèn)選擇,若為空就默認(rèn)為0,load 64 x 64;if chos=0, load le

44、na.mat; %加載妮娜的圖像 %在數(shù)字圖像處理中,Lena(Lenna)是一張被廣泛使用的標(biāo)準(zhǔn)圖片, %特別在圖像壓縮的算法研究中 f=x; imshow(mat2gray(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 16

45、0 157 157 157162 162 161 163 162 157 157 157162 162 161 161 163 158 158 158;end%echo on%圖像的預(yù)處理是將每個(gè)像素灰度值減去128,%圖像數(shù)據(jù)值必須減去128,是因?yàn)镈CT轉(zhuǎn)換公式所接受的數(shù)字范圍是在-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; %計(jì)算f分塊后的塊數(shù) %計(jì)算每個(gè)88子塊的離散DCT系數(shù)if chos=0, %blk

46、proc()函數(shù)的功能:對(duì)圖像進(jìn)行分塊的dct處理 Ff=blkproc(f,8 8,dct); %對(duì)f的每個(gè)子塊的列進(jìn)行DCT變換 Ff=blkproc(Ff,8 8,dct); % 對(duì)f的每個(gè)子塊的行進(jìn)行DCT變換 Ff=round(Ff); % 對(duì)矩陣Ff中每個(gè)元素朝最近的方向取整數(shù)部分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 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% 現(xiàn)在進(jìn)行量化取整if chos=0, %將頻率系數(shù)除以量化矩陣的值之后取整,即完成了量化過程 Fq=round(blkproc(Ff,8 8,divq,Q

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論