基于MATLAB圖象壓縮技術(shù)_第1頁
基于MATLAB圖象壓縮技術(shù)_第2頁
基于MATLAB圖象壓縮技術(shù)_第3頁
基于MATLAB圖象壓縮技術(shù)_第4頁
基于MATLAB圖象壓縮技術(shù)_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、湖南安全技術(shù)職業(yè)學(xué)院 設(shè)計(jì)(論文)題目: 基于MATLAB圖象壓縮技術(shù) 學(xué) 生 姓 名 郭紅斌 專 業(yè) 班 級 電信0601班 指 導(dǎo) 老 師 夏 旭 系 主 任 羅文欽 評 閱 人 2009年5月6日目錄 TOC o 1-3 h z u HYPERLINK l _Toc230151990 摘 要 PAGEREF _Toc230151990 h 3 HYPERLINK l _Toc230151991 Abstract PAGEREF _Toc230151991 h 4 HYPERLINK l _Toc230151992 第一章 概述 PAGEREF _Toc230151992 h 5 HYPE

2、RLINK l _Toc230151993 1.1 圖象壓縮簡介 PAGEREF _Toc230151993 h 5 HYPERLINK l _Toc230151994 圖像壓縮的概念 PAGEREF _Toc230151994 h 5 HYPERLINK l _Toc230151995 圖像壓縮的基本原理 PAGEREF _Toc230151995 h 5 HYPERLINK l _Toc230151996 圖像壓縮基本方法 PAGEREF _Toc230151996 h 5 HYPERLINK l _Toc230151997 圖像壓縮的主要目標(biāo) PAGEREF _Toc230151997

3、h 6 HYPERLINK l _Toc230151998 1.2 MATLAB軟件簡介 PAGEREF _Toc230151998 h 7 HYPERLINK l _Toc230151999 1.3 研究目的 PAGEREF _Toc230151999 h 7 HYPERLINK l _Toc230152000 第二章 理論分析 PAGEREF _Toc230152000 h 9 HYPERLINK l _Toc230152001 2.1 離散余弦變換 PAGEREF _Toc230152001 h 9 HYPERLINK l _Toc230152002 2.2圖象編碼 PAGEREF _T

4、oc230152002 h 10 HYPERLINK l _Toc230152003 圖象的信息量度量 PAGEREF _Toc230152003 h 10 HYPERLINK l _Toc230152004 數(shù)字圖象的信息冗余 PAGEREF _Toc230152004 h 11 HYPERLINK l _Toc230152005 圖像的有損編碼和無損編碼 PAGEREF _Toc230152005 h 12 HYPERLINK l _Toc230152006 2.2.4 哈夫曼編碼技術(shù) PAGEREF _Toc230152006 h 12 HYPERLINK l _Toc230152007

5、 第三章 程序?qū)崿F(xiàn) PAGEREF _Toc230152007 h 14 HYPERLINK l _Toc230152008 3.1 程序?qū)崿F(xiàn) PAGEREF _Toc230152008 h 14 HYPERLINK l _Toc230152009 3.2 重要函數(shù)介紹 PAGEREF _Toc230152009 h 18 HYPERLINK l _Toc230152010 結(jié) 論 PAGEREF _Toc230152010 h 20 HYPERLINK l _Toc230152011 參考文獻(xiàn) PAGEREF _Toc230152011 h 21 HYPERLINK l _Toc230152

6、012 致 謝 PAGEREF _Toc230152012 h 22摘 要本文通過闡述MATLAB在圖像壓縮研究方面的應(yīng)用,探討基于哈夫曼編碼技術(shù)的圖像壓縮的MATLAB實(shí)現(xiàn)和基于小波的圖像壓縮技術(shù)。MATLAB軟件使用MATLAB R2007a版本,并且通過計(jì)算機(jī)實(shí)驗(yàn)證明了經(jīng)過離散變換和哈夫曼編碼的圖像在實(shí)現(xiàn)高壓縮率的情況下能夠保證很好的圖像質(zhì)量,具有較好的視覺效果。 關(guān)鍵詞:MATLABR2007a; 圖像壓縮 ;離散變換;哈夫曼編碼AbstractIn this paper, MATLAB on research in image compression applications, Hu

7、ffman coding to explore technology-based image compression and the MATLAB realization of image compression based on wavelet technology.MATLAB R2007a using MATLAB software version, and by computer after the experiment proved that wavelet transform and Huffman coding to achieve high image compression

8、ratio in the circumstances to ensure good image quality, with better visual effects.Key words:MATLABR2007a;Image Compression;Wavelet Transform;Huffman coding 第一章 概述1.1 圖象壓縮簡介圖像壓縮的概念圖像數(shù)據(jù)壓縮是按照某種方法,從給定的圖像信源中推出簡化的數(shù)據(jù)表示,它是通過減少圖像信號空間量的方法使信號能安排到給定的樣本中,即去掉冗余度但不減少信息量。圖像壓縮的基本原理去除多余數(shù)據(jù).以數(shù)學(xué)的觀點(diǎn)來看,這一過程實(shí)際上就是將二維像素陣列變

9、換為一個(gè)在統(tǒng)計(jì)上無關(guān)聯(lián)的數(shù)據(jù)集合圖像壓縮是指以較少的比特有損或無損地表示原來的像素矩陣的技術(shù),也稱圖像編碼.圖像數(shù)據(jù)之所以能被壓縮,就是因?yàn)閿?shù)據(jù)中存在著冗余。圖像數(shù)據(jù)的冗余主要表現(xiàn)為:圖像中相鄰像素間的相關(guān)性引起的空間冗余;圖像序列中不同幀之間存在相關(guān)性引起的時(shí)間冗余;不同彩色平面或頻譜帶的相關(guān)性引起的頻譜冗余。數(shù)據(jù)壓縮的目的就是通過去除這些數(shù)據(jù)冗余來減少表示數(shù)據(jù)所需的比特?cái)?shù)。由于圖像數(shù)據(jù)量的龐大,在存儲(chǔ)、傳輸、處理時(shí)非常困難,因此圖像數(shù)據(jù)的壓縮就顯得非常重要。信息時(shí)代帶來了“信息爆炸”,使數(shù)據(jù)量大整,因此,無論傳輸或存儲(chǔ)都需要對數(shù)據(jù)進(jìn)行有效的壓縮。在遙感技術(shù)中,各種航天探測器采用壓縮編碼技術(shù)

10、,將獲取的巨大信息送會(huì)地面。圖像壓縮是數(shù)據(jù)壓縮技術(shù)在數(shù)字圖像上的應(yīng)用,它的目的是減少圖像數(shù)據(jù)中的冗余信息從而用更加高效的格式存儲(chǔ)和傳輸數(shù)據(jù)。圖像壓縮基本方法 圖像壓縮可以是有損數(shù)據(jù)壓縮也可以是無損數(shù)據(jù)壓縮。對于如繪制的技術(shù)圖、圖表或者漫畫優(yōu)先使用無損壓縮,這是因?yàn)橛袚p壓縮方法,尤其是在低的位速條件下將會(huì)帶來壓縮失真。如醫(yī)療圖像或者用于存檔的掃描圖像等這些有價(jià)值的內(nèi)容的壓縮也盡量選擇無損壓縮方法。有損方法非常適合于自然的圖像,例如一些應(yīng)用中圖像的微小損失是可以接受的(有時(shí)是無法感知的),這樣就可以大幅度地減小位速。無損圖像壓縮方法有: 行程長度編碼 熵編碼法 如 LZW 這樣的自適應(yīng)字典算法 有

11、損壓縮方法有:將色彩空間化減到圖像中常用的顏色。所選擇的顏色定義在壓縮圖像頭的調(diào)色板中,圖像中的每個(gè)像素都用調(diào)色板中顏色索引表示。這種方法可以與 抖動(dòng)(en:dithering)一起使用以模糊顏色邊界。 色度抽樣,這利用了人眼對于亮度變化的敏感性遠(yuǎn)大于顏色變化,這樣就可以將圖像中的顏色信息減少一半甚至更多。 變換編碼,這是最常用的方法。首先使用如離散余弦變換(DCT)或者小波變換這樣的傅立葉相關(guān)變換,然后進(jìn)行量化和用熵編碼法壓縮。 分形壓縮(en:Fractal compression)。 圖像壓縮的主要目標(biāo)就是在給定位速(bit-rate)或者壓縮比下實(shí)現(xiàn)最好的圖像質(zhì)量。但是,還有一些其它的

12、圖像壓縮機(jī)制的重要特性:可擴(kuò)展編碼 (en:Scalability) 通常表示操作位流和文件產(chǎn)生的質(zhì)量下降(沒有解壓縮和再壓縮)。可擴(kuò)展編碼的其它一些叫法有 漸進(jìn)編碼(en:progressive coding)或者嵌入式位流(en:embedded bitstreams)。盡管具有不同的特性,在無損編碼中也有可擴(kuò)展編碼,它通常是使用粗糙到精細(xì)像素掃描的格式。尤其是在下載時(shí)預(yù)覽圖像(如瀏覽器中)或者提供不同的圖像質(zhì)量訪問時(shí)(如在數(shù)據(jù)庫中)可擴(kuò)展編碼非常有用 有幾種不同類型的可擴(kuò)展性:質(zhì)量漸進(jìn)(en:Quality progressive)或者層漸進(jìn)(en:layer progressive):

13、位流漸進(jìn)更新重建的圖像。 分辨率漸進(jìn)(en:Resolution progressive):首先在低分辨率編碼圖像,然后編碼與高分辨率之間的差別。 成分漸進(jìn)(en:Component progressive):首先編碼灰度數(shù)據(jù),然后編碼彩色數(shù)據(jù)。感興趣區(qū)域編碼,圖像某些部分的編碼質(zhì)量要高于其它部分,這種方法可以與可擴(kuò)展編碼組合在一起(首先編碼這些部分,然后編碼其它部分)。元數(shù)據(jù)信息,壓縮數(shù)據(jù)可以包含關(guān)于圖像的信息用來分類、查詢或者瀏覽圖像。這些信息可以包括顏色、紋理統(tǒng)計(jì)信息、小預(yù)覽圖像以及作者和版權(quán)信息。1.2 MATLAB軟件簡介 MATLAB 是美國MathWorks公司出品的商業(yè)數(shù)學(xué)軟件

14、,用于算法開發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)分析以及數(shù)值計(jì)算的高級技術(shù)計(jì)算語言和交互式環(huán)境,主要包括MATLAB和Simulink兩大部分。MATLAB是矩陣實(shí)驗(yàn)室(Matrix Laboratory)的簡稱,和Mathematica、Maple并稱為三大數(shù)學(xué)軟件。它在數(shù)學(xué)類科技應(yīng)用軟件中在數(shù)值計(jì)算方面首屈一指。MATLAB可以進(jìn)行矩陣運(yùn)算、繪制函數(shù)和數(shù)據(jù)、實(shí)現(xiàn)算法、創(chuàng)建用戶界面、連接其他編程語言的程序等,主要應(yīng)用于工程計(jì)算、控制設(shè)計(jì)、信號處理與通訊、圖像處理、信號檢測、金融建模設(shè)計(jì)與分析等領(lǐng)域。MATLAB的基本數(shù)據(jù)單位是矩陣,它的指令表達(dá)式與數(shù)學(xué)、工程中常用的形式十分相似,故用MATLAB來解算問題要

15、比用C,F(xiàn)ORTRAN等語言完相同的事情簡捷得多,并且mathwork也吸收了像Maple等軟件的優(yōu)點(diǎn),使MATLAB成為一個(gè)強(qiáng)大的數(shù)學(xué)軟件。在新的版本中也加入了對C,F(xiàn)ORTAN,C+,JAVA的支持??梢灾苯诱{(diào)用,用戶也可以將自己編寫的實(shí)用程序?qū)氲組ATLAB函數(shù)庫中方便自己以后調(diào)用,此外許多的MATLAB愛好者都編寫了一些經(jīng)典的程序,用戶可以直接進(jìn)行下載就可以用。20世紀(jì)70年代,美國新墨西哥大學(xué)計(jì)算機(jī)科學(xué)系主任Cleve Moler為了減輕學(xué)生編程的負(fù)擔(dān),用FORTRAN編寫了最早的MATLAB。1984年由Little、Moler、Steve Bangert合作成立了的MathWo

16、rks公司正式把MATLAB推向市場。到20世紀(jì)90年代,MATLAB已成為國際控制界的標(biāo)準(zhǔn)計(jì)算軟件。MATLAB 的應(yīng)用范圍非常廣,包括信號和圖像處理、通訊、控制系統(tǒng)設(shè)計(jì)、測試和測量、財(cái)務(wù)建模和分析以及計(jì)算生物學(xué)等眾多應(yīng)用領(lǐng)域。附加的工具箱(單獨(dú)提供的專用 MATLAB 函數(shù)集)擴(kuò)展了 MATLAB 環(huán)境,以解決這些應(yīng)用領(lǐng)域內(nèi)特定類型的問題。1.3 研究目的圖像是信息傳遞的一種重要媒體,為了使有限的符號表達(dá)更多的信息量,圖象壓縮既非常必要,也有可能,故此產(chǎn)生了各種各樣的圖象壓縮方法,一般原始圖像中存在很大的冗余度(如由相鄰象素的相關(guān)性造成);或者是用戶由于種種原因,而對原始圖像的信息不全都感

17、興趣;或者是當(dāng)信道的分辨率不及原始圖像的分辨率時(shí),降低輸入原始圖像分辨率對輸出圖像的分辨率影響不大;或者是大量圖像信息(如:衛(wèi)星遙感圖像)的短時(shí)傳輸處理.所有這一切都要求在圖象處理過程中,必須丟掉大量無用信息,保留有用部分,用盡可能少的字節(jié)數(shù)來表示原始圖像,以提高圖像傳輸?shù)男屎蜏p少圖像的存儲(chǔ)容量。 大數(shù)據(jù)量的圖像信息會(huì)給儲(chǔ)存器的儲(chǔ)存容量,通信干線信道的帶寬以及計(jì)算機(jī)的處理速度增加極大的壓力。單純靠增加儲(chǔ)存容量,提高信道帶寬以及計(jì)算機(jī)的處理速度等方法來解決這個(gè)問題是不現(xiàn)實(shí)的,這時(shí)就要考慮壓縮。因此,圖像數(shù)據(jù)在傳輸和儲(chǔ)存中,數(shù)據(jù)的壓縮都是必不可少的。隨著網(wǎng)絡(luò)與多媒體技術(shù)的普及應(yīng)用,大容量圖像傳輸

18、的應(yīng)用需求越來越普及。圖象數(shù)字化之后,數(shù)字圖像的數(shù)據(jù)量是非常大的,存貯時(shí)會(huì)占用大量空間,在數(shù)據(jù)傳輸時(shí)誤碼率非常高,網(wǎng)絡(luò)的擴(kuò)容和用戶在線人數(shù)的增加,使得網(wǎng)絡(luò)帶寬資源越來越緊張,這對通信信道及網(wǎng)絡(luò)都造成很大壓力。另一個(gè)原因是圖像、音頻和視頻這些媒體具有很大的壓縮潛力。因?yàn)樵诙嗝襟w數(shù)據(jù)中,存在著空間冗余、時(shí)間冗余、結(jié)構(gòu)冗余、知識冗余、視覺冗余、圖像區(qū)域的相同性冗余、紋理的統(tǒng)計(jì)冗余等。它們?yōu)閿?shù)據(jù)壓縮技術(shù)的應(yīng)用提供了可能的條件。第二章 理論分析2.1 離散余弦變換在MATLAB圖像處理工具箱中,dct2函數(shù)用于計(jì)算機(jī)圖像的二維離散余弦變換(Discrete Cosine Transform)簡稱DCT。

19、大多數(shù)情況下,DCT用于壓縮圖像,JPEG圖像格式就采用了DCT算法。離散余弦變換的基本概念假設(shè)矩陣A的大小為MN,其二維離散余弦變換的定義為, Bp,q=apaq Amncos cos 其中Bpq 稱為矩陣A的DCT系數(shù)。在MATLAB中,矩陣的下標(biāo)從1開始而不是從0開始,所以A(1,1)和B(1,1)分別代表上面的A00 和B00 。DCT是一種可逆變換,它的逆變換定義為:Ap,q=apaq Amncos cos 上式的含義是任何MN的矩陣A都可以表示為一系列函數(shù)的和。這些函數(shù)稱為DCT的基函數(shù)。DCT系數(shù)Bpq 則被看作是每個(gè)基函數(shù)的權(quán)。水平方向頻率由左向右增加,垂直方向頻率由上到下增加

20、。常數(shù)值的基函數(shù)位于圖像的左上角,被稱為直流基函數(shù),對應(yīng)的DCT系數(shù)B00 常被稱為是直流系數(shù)。MATLAB圖像處理工具箱提供的DCT函數(shù)有3個(gè),分別是dct2、dctmtx和idct2。(1)dct2dct2函數(shù)采用基于FFT的算法,主要用于實(shí)現(xiàn)較大輸入矩陣的離散余弦變換?;Z法格式為:B = dct2(A)B = dct2(A,m,n)B = dct2(A,m n)B = dct2(A)返回圖像A的二維離散余弦變換值,它的大小與A相同,且各元素為離散余弦變換的系數(shù)B(k1,k2)。B = dct2(A,m,n)或B = dct2(A,m n)表示在對圖像A進(jìn)行二維離散余弦變換之前,先將圖像

21、A補(bǔ)零至mn。如果m和n比圖像A小,則進(jìn)行變換之前,將圖像A進(jìn)行剪切。(2)dctmtxDctmtx函數(shù)主要用于實(shí)現(xiàn)較小輸入矩陣的離散余弦變換。其語法為:D = dctmtx(M)D = dctmtx(M)返回MM大小的DCT矩陣。設(shè)A是一個(gè)MM大小的矩陣,則D*A表示A的列向量的一維離散余弦變換,而D*A(D表示D的轉(zhuǎn)置)表示A的列向量的一維逆離散余弦變換。要實(shí)現(xiàn)A的二維離散余弦變換,只需要計(jì)算D*A* D。這種計(jì)算有時(shí)會(huì)比利用函數(shù)dct2更快,特別是計(jì)算大量小的相同尺寸DCT時(shí),矩陣 D只需要計(jì)算一次,因而速度快。(3)idct2idct2函數(shù)可以實(shí)現(xiàn)圖像的二維逆離散余弦變換,其語法格式為

22、:B = idct2(A)B = idct2(A,m,n)B = idct2(A,m n)B = idct2(A)計(jì)算矩陣A的二維逆離散余弦變換,返回圖像 B的大小與A相同。B = idct2(A,m,n)或B = idct2(A,m n)表示在對矩陣A進(jìn)行二維逆離散余弦變換之前,先將矩陣A補(bǔ)零到mn。如果m和n比矩陣A小,則進(jìn)行變換之前,先對矩陣A進(jìn)行剪切操作,返回圖像大小為mn。2.2圖象編碼圖象的信息量度量數(shù)字圖像形成的關(guān)鍵步驟是在空間(X,Y)和光亮度F上都進(jìn)行離散化,通常把這一過程叫做采樣與量化。采樣與量化處理是決定最終的數(shù)字圖像與原始圖像接近的兩個(gè)關(guān)鍵因素,也關(guān)系到數(shù)據(jù)量的大與小。

23、采樣如果對圖像進(jìn)行等間距采樣,即在X和Y主向上取N個(gè)點(diǎn),并被排成NN的矩陣,矩陣中的每一個(gè)點(diǎn)為離散化的亮度值F(X,Y),它對應(yīng)于數(shù)字圖像中的一個(gè)元素,稱為像素。采樣點(diǎn)的多少直接影響到數(shù)字圖像與原圖像的失真度,而如何表示每一個(gè)采樣點(diǎn)的亮度值也是導(dǎo)致最終數(shù)字圖像質(zhì)量好壞的關(guān)鍵因素。2.量化量化過程就是用有限的離散量代替無限的連續(xù)的模擬量的一對多的映射過程。圖像的亮度F是連續(xù)變化的數(shù)值,F(xiàn)(X,Y)的光亮度L表示為:Lmin LLmax 。Lmin ,Lmax 稱為灰度級范圍。把Lmin ,Lmax 分成K個(gè)等間距的區(qū)間,每個(gè)區(qū)間對應(yīng)一個(gè)亮度值Fi,這樣就有K個(gè)亮度值,稱之為灰度級K。為了計(jì)算方便

24、,灰度級K用2的整數(shù)冪表示,即K=2m,m=1,2,8。當(dāng)m=6時(shí),K=26=64個(gè)灰度級。當(dāng)F(X,Y)的光亮度落在第i個(gè)區(qū)域中時(shí),就被合入到區(qū)域的中心,量化結(jié)果就是這個(gè)區(qū)域的灰度值Fi。采樣點(diǎn)N與量化灰度級K的選擇確定了數(shù)字圖像的質(zhì)量,也決定了數(shù)字圖像 所占有計(jì)算機(jī)存儲(chǔ)空間的大小。3.均勻采樣與非均勻采樣上面提到的在(X,Y)方向上等到間距的采樣成為均勻采樣,而非均勻則是在圖像細(xì)節(jié)少的區(qū)域采用較稀疏的采樣,在細(xì)節(jié)比較多的區(qū)域采用密集采樣,這樣獲得的圖像信息量沒有減少,但是數(shù)據(jù)量卻有效地降低了。需要指出的是,分配采樣點(diǎn)的時(shí)候,應(yīng)該在灰度變化的邊界標(biāo)上非均勻采樣標(biāo)志。4.線性量化和非線性量化將

25、表示數(shù)字圖像的灰度級范圍分為等間隔的子區(qū)間叫做線性量化,而非線性量化是指將灰度級范圍分為不等間隔的子區(qū)間。與均勻采樣和非均勻采樣的概念一致,對灰度級出現(xiàn)頻率比較高的區(qū)間,量化區(qū)間變窄,而別一些灰度級出現(xiàn)頻率較低的范圍量化區(qū)間變寬。5.圖形的信息量度量圖像的信息量主要取決于圖像的分辯率和像素的位深度。圖像的分辯率由(X,Y)方向的采樣點(diǎn)數(shù)決定。如果(X,Y)方向等間隔采樣N個(gè)點(diǎn),則圖像的分辯率為NN,像素的位深度就是由量化級確定的。如果用256個(gè)灰度級表示單色調(diào)圖像,則每一個(gè)像素的位深度為8位。2.2.2數(shù)字圖象的信息冗余冗余是指信息中存在著多余的數(shù)據(jù)。數(shù)字化后的圖像就存在著大量的信息冗余,分為

26、空間冗余、結(jié)構(gòu)冗余、信息冗余和視覺冗余等。1.視覺冗余人的眼睛對圖像細(xì)節(jié)和顏色的辨認(rèn)有一個(gè)極限,人的視覺特性決定了他最多只能分辨出2的16次冪種顏色,而彩色圖像一般每個(gè)像素用24位表示,則可表示出2的24次冪種顏色,由此南昌來的數(shù)據(jù)冗余稱為視覺冗余??臻g冗余圖像中的大部分景物,其表面顏色都是均勻的、連續(xù)的。把圖像數(shù)字化成像素點(diǎn)的矩陣后,大量相鄰像素的數(shù)據(jù)是完全一樣或十分接近的,這就是空間冗余。圖像的有損編碼和無損編碼圖像編碼是指按照一定的格式存儲(chǔ)圖像數(shù)據(jù)的過和,而編碼技術(shù)則是研究如何在滿足一定的圖像保真條件下,壓縮表示原始圖像的編碼方法。目前有很多流行的圖像格式標(biāo)準(zhǔn),如BMP、PCX、TIFF

27、、GIF、JPEG等等,采用不同的編碼方法,一般可以將其分為有損編碼和無損編碼兩類。1無損編碼無損編碼指對圖像數(shù)據(jù)進(jìn)行了無損壓縮,解壓后重新構(gòu)造的圖像與原始圖像之間完全相同。行程編碼就是無損編碼的一個(gè)實(shí)例,其編碼原理是在給定的數(shù)據(jù)中尋找連續(xù)重復(fù)的數(shù)值,然后用兩個(gè)數(shù)值(重復(fù)數(shù)值的個(gè)數(shù),重復(fù)數(shù)值本身)取代這些連續(xù)的數(shù)值,以達(dá)到數(shù)據(jù)壓縮的目的運(yùn)用此方法處理擁有大面積色調(diào)一致的圖像時(shí),可達(dá)到很好的數(shù)據(jù)壓縮效果。常見的無損壓縮編碼有:哈夫曼編碼算術(shù)編碼行程編碼Lempel zev編碼。2有損編碼有損編碼是指對圖像進(jìn)行有損壓縮,致使解碼后重新構(gòu)造的圖像與原圖像之間存在著一定的誤差。有損壓縮利用了圖像信息本

28、身包含的許多冗余。針對人類的視覺對顏色不敏感的生理特性,對丟失一些顏色信息所引起的細(xì)微誤差不易被發(fā)現(xiàn)的特點(diǎn)來刪除視覺冗余。又由于圖像信息之間存在著很大的相關(guān)性,存儲(chǔ)圖像數(shù)據(jù)時(shí),并不是以像素為基本單位,而是存儲(chǔ)圖像中的一些數(shù)據(jù)塊,以刪除空間冗余。由于有損壓縮一般情況下可獲得較好的壓縮比,因此在對圖像的質(zhì)量要求不苛刻的情況下是一種理想的編碼選擇,常見的有損編碼有:預(yù)測編碼,如DPCM,運(yùn)動(dòng)補(bǔ)償編碼頻率域方法,如正方變換編碼,子帶編碼空間域方法,如統(tǒng)計(jì)分塊編碼模型方法編碼,如分形編碼,模型基編碼基于重要性編碼,如濾波,子采樣,比特分配。 哈夫曼編碼技術(shù)哈夫曼編碼是運(yùn)用信息熵原理的一種無損編碼。壓縮方

29、法是利用變長編碼將圖像中出現(xiàn)概率比較大的灰度值賦予短碼字,而對出現(xiàn)概率小的灰度值賦予長碼字,從而達(dá)到壓縮數(shù)據(jù)的目的。例如,一幅40個(gè)像素的圖像,具有5個(gè)灰度級A、B、C、D、E,如果40個(gè)像素中,A級具有15個(gè)像素,B級具有7個(gè)像素,C級具有7個(gè)像素,D級具有6個(gè)像素,E級具有5個(gè)像素。對每個(gè)像素編碼就需要3位(log253),40個(gè)像素需要120位。則每個(gè)像素平均所占位數(shù)是2.1898位,40個(gè)像素所用的總位數(shù)是402.1895=87.8490,這樣就產(chǎn)生了1.3/1的壓縮比。哈夫曼編碼方法可以歸納為以下幾步:1將圖像灰度按照概率大小排列;2把兩個(gè)最小的概率加起來作為新的概率;3重得(1)、

30、(2),直到概率之和達(dá)到1為止;4每次合并符號時(shí),將被合并的符號賦以1和0(大概率賦1,小概率賦0,或相反);5尋找從每一信源符號到概率為1處的路徑,記錄下路徑上的1和0;6對每一符號寫出“1”、“0”序列,序列的順序是從樹根到信源符號節(jié)點(diǎn)。如果按此步驟對上面所給出的例子進(jìn)行哈夫曼編碼,各個(gè)灰度級的出現(xiàn)概率從大到小依次為:A-0.375,B-0.175,C-0.175,D-0.150,E-0.125。哈夫曼編碼的特點(diǎn):利用哈夫曼編碼壓縮圖像數(shù)據(jù)時(shí),必須讀取圖像數(shù)據(jù)兩次。第一次讀取數(shù)據(jù)計(jì)算每個(gè)數(shù)據(jù)出現(xiàn)的頻率,并對各數(shù)據(jù)出現(xiàn)的頻率以二叉樹方式進(jìn)行排序,在排序過和中獲取各數(shù)值的編碼值。將這些長度不等

31、的編碼值與對應(yīng)的圖像數(shù)據(jù)放置到一個(gè)轉(zhuǎn)換表格中。第二次讀取數(shù)據(jù)是利用轉(zhuǎn)換表格中的編碼值取代圖像數(shù)據(jù)存入圖像文件中。此外哈夫曼編碼還具有以下特點(diǎn):哈夫曼編碼構(gòu)造的數(shù)據(jù)不一定是唯一的。原因是在給兩個(gè)最小概率的圖像灰度值進(jìn)行編碼時(shí),可以是大概率為,小概率為何,也可以相反。而當(dāng)兩個(gè)灰度值的概率相等時(shí),“1”、“0”的分配也是隨機(jī)的,這就造成了編碼的不唯一性。當(dāng)圖像灰度值分布不是很均勻時(shí),哈夫曼編碼的效率是就高。當(dāng)信源概率是2的負(fù)冪次方時(shí),編碼效率為100%。而在圖像灰度值的概率分布比較均勻時(shí),哈夫曼編碼的效率就很低。哈夫曼編碼需要先計(jì)算出圖像數(shù)據(jù)的概率特性形成編碼表后,才能對圖像數(shù)據(jù)編碼,因此哈夫曼編碼

32、缺乏構(gòu)造性,即不能使用某種數(shù)學(xué)模型建立信源符號與編碼之間的對應(yīng)關(guān)系,而必須通過查表方法,建立起他們之間的對應(yīng)關(guān)系。如果信源符號很多,編碼表就會(huì)很大,這必將影響到存儲(chǔ)、編碼和傳輸。通常可以在經(jīng)驗(yàn)基礎(chǔ)上預(yù)先提供哈夫曼編碼表,但性能將有所下降。第三章 程序?qū)崿F(xiàn)3.1 程序?qū)崿F(xiàn)經(jīng)過理論分析后,下面用MATLAB實(shí)現(xiàn)哈夫曼編碼。程序?qū)⑤斎氲臄?shù)據(jù)(數(shù)字矩陣)進(jìn)行哈夫曼編碼,然后反編碼,判斷是否是無失真編碼,最后給出壓縮前后存儲(chǔ)空間的比較。% 下面用MATLAB實(shí)現(xiàn)哈夫曼編碼的例程(以子函數(shù)形式給出):clear all;fprintf(Reading data )data=imread(E:tempori

33、ginalimage(holl).bmp)data=uint8(data);% 讀入數(shù)據(jù),并將數(shù)據(jù)限制為unit8型 fprintf(Done!n)fprintf(Comqressing data.)zipped,info=norm2huff(data); %進(jìn)行壓縮編碼fprintf(Done!n)fprintf(Decomqressing data.)unzipped=huff2norm(zipped,info);% 進(jìn)行解壓縮fprintf(Done!n)isOK=isequal(data(:),unzipped(:) %顯示壓縮效果whos data zipped unzipped%

34、norm2huff % NORM2HUFF 哈夫曼編碼器% 對于輸入向量,NORM2HUFF(X) 返回向量的哈夫曼編碼后的碼串% 矩陣用X(:)形式輸入% 輸入限制為 unit8格式,輸出為unit8的序列% .,info 返回解碼需要的解碼信息% INFO.pad =最后添加的比特?cái)?shù)% INFO.huffcodes=Huffman碼字% INFO.ratio=壓縮率% INFO.length=原始數(shù)據(jù)長度% INFO.maxcodelen=最大碼長% function zipped, info = norm2huff(vector)if isa(vector,unit8), error (

35、input argument must be a unit8 vector);end %保證輸入為unit8的數(shù)據(jù)vector = vector(:); %將輸入向量轉(zhuǎn)換為行向量f=frequency(vector); %計(jì)算個(gè)元素出現(xiàn)的概率simbols=find(f=0); %尋找數(shù)出現(xiàn)的所有元素f=f(simbols);f,sortindex=sort(f); %將元素按照出現(xiàn)概率排列simbols=simbols(sortindex);len=length(simbols);simbols_index=num2cell(1:len);codeword_tmp=cell(len,1);w

36、hile length(f)1, index1=simbols_index1; index2=simbols_index2; codeword_tmp(index1)=addnode(codeword_tmp(index1),unit8(0); codeword_tmp(index2)=addnode(codeword_tmp(index1),unit8(1); f=sum(f(1:2) f(3:end); simbol_index=index1 index2 simbols_index(3:end); %將數(shù)據(jù)重新排列,是兩個(gè)節(jié)點(diǎn)的頻率盡量與前一個(gè)節(jié)點(diǎn)的頻率相當(dāng) f,sortindex=so

37、rt(f); simbols_index=simbols(sortindex);end %對應(yīng)相應(yīng)的元素和碼字codeword=cell(256,1);code(simbols)=codeword_tmp; %計(jì)算總的字符串長度len=0;for index=1:length(vector), len=len+length(codeworddouble(vector(index)+1);end %產(chǎn)生0 1序列string=repmat(unit8(0),1,len);pointer=1;for index=1:length(vector), code = codeworddouble(vec

38、tor(index)+1; len=length(code); string(pointer+(0:len-1)=code; poiter=pointer+len;end%如果需要的話加零len=length(string);pad=8-mod(len,8);if pad0, string =string unit8(zeros(1,pad);end%保存實(shí)際有用的碼字codewod=codeword(simbols);codelen=zeros(size(codeword);weights=2.(0:23);maxcodelen=0;for index=1:length(codeword),

39、 len=length(codewordindex); if lenmaxcodelen, maxcodelen=len; end if len0, code=sum(weights(codewordindex=1); code=bitset(code,len+1); codeword(index)=code; codelen(index)=len; endendcodeword=codeword:;%計(jì)算壓縮后的向量cols=length(string)/8;string=reshape(string,8,cols);weights=2.(0:7);zipped=uni8(weights*d

40、ouble(string);%存儲(chǔ)數(shù)據(jù)到一個(gè)稀疏矩陣huffcodes=sparse(1,1);for index=1:numel(codeword), huffcodes(codeword(index),1)=simbols(index);end%產(chǎn)生信息結(jié)構(gòu)體info.pad=pad;info.huffcodes=huffcodes;info.rato=cols./length(vector);info.length=length(vector);info.maxcodelen=maxcodelen;% addnode %function codeword_new=addnode(code

41、word_old,item)codewod_new=cell(size(codeword_old),codeword_newindex=item codeword_oldindex;% huff2norm %function vector =huff2norm(zipped,info)% HUFF2NORM 哈夫曼解碼器if isa(zipped,unit8), error(input argument must be a unit vector)end %產(chǎn)生01 序列l(wèi)en=length(zipped );string=repmat(unit8(0),1,len.*8);bitindex=

42、1:8;for index =1:len, string(bitindex+8.*(index-1) , unit8(bitget(zipped(index),bitindex);end %調(diào)整字符串string=logical(string(:);len=length(string);string(len-info.pad.l+1):end)= ;len=length(string); %解碼weights=2(0:51);vector=repmat(unit8(0),1,info.length);vectorindex=1;codeindex=1;code=0;for index=1:le

43、n, code=bitset(code,codeindex,string(index); codeindex=codeindex+1; byte=decode(bitset(code,codeindex),info); if byte0, vector(vectorindex)=byte-1; codeindex=1; code=0; vectorindex=vectorindex+1; endend% decode %function byte=decode(code,info)byte=info.huffcode(code);% % frequence %function f=freque

44、ncy(vector) % FREQUENCY 計(jì)算元素出現(xiàn)概率 if isa(vector,unit8), error(input argument must be a unit8 vector )endf=repmat(0,1,256); %掃描向量len=length(vector);for index=1:255, f(index+1)=sum(vector=unit8(index);end %歸一化f=f./len;% 運(yùn)行上述程序,得到結(jié)果為: % Name Size Bytes Class % data 256*256 65535 unit8 arrray% unzipped 1

45、*65535 65535 unit8 arrray% zipped 1*57712 57712 unit8 arrray % Grand total is 188784 elements using 188784 bytes % 其中壓縮的信息結(jié)構(gòu)體info 為:% pad:7% huffcodes:108471*1 double % ratio:0.8806% length:65535% maxcodelen:16 3.2 重要函數(shù)介紹圖像變換函數(shù)函數(shù)功能語法dct2進(jìn)行二維離散余弦變換B = dct2(A)B = dct2(A,m,n)B = dct2(A,m n)dctmtx計(jì)算離散余弦變換矩陣D = dctmtx(n)fft2進(jìn)行二維快速傅立葉變換Y = fft2(X)Y = fft2(X,m,n)fftn進(jìn)行n維快速傅立葉變換Y = fftn(X)Y = fftn(X,siz)fftshift轉(zhuǎn)換快速傅立葉變

溫馨提示

  • 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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論