版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 基于VC++的圖像壓縮編碼技術(shù)的研究及算法實(shí)現(xiàn)</p><p><b> 摘要</b></p><p> 長期以來,人類獲取到的信息其80%來源于圖像媒體,15%來源于語音。所以,人們?cè)谧匀唤绺惺艿降淖钪饕男畔⑹且曈X信息,這說明圖像是人們生活中信息交流最為重要的載體,也是蘊(yùn)含信息量最大的媒體。由于未經(jīng)處理的圖像信息量非常大,大力研究和開發(fā)圖
2、像壓縮編碼技術(shù)就非常重要。</p><p> 圖像之所以可以被壓縮,其根本原因就在于圖像數(shù)據(jù)具有較多的信息冗余。各個(gè)像素點(diǎn)之間不論在行的方向還是在列的方向上都具有很大的相關(guān)性,因而整個(gè)圖像數(shù)據(jù)就具有相當(dāng)大的冗余度,也就有相當(dāng)?shù)膲嚎s潛力。再者,圖像品質(zhì)的評(píng)價(jià)取決于人眼,而人眼由于其視覺特性對(duì)圖像的細(xì)微差別還是很難分辨的。因此圖像數(shù)據(jù)還具有一定的視覺冗余,也就是說,在對(duì)圖像數(shù)據(jù)進(jìn)行壓縮時(shí),可以允許一定程度的失真。&
3、lt;/p><p> 本論文主要是通過哈弗曼編碼、香農(nóng)-費(fèi)諾編碼和行程編碼三種方法對(duì)同一幅圖像進(jìn)行壓縮,對(duì)所得到的圖像壓縮比進(jìn)行比較,最后得出每種壓縮方法的優(yōu)缺點(diǎn)。本論文首先介紹了圖像壓縮編碼技術(shù)的概念、分類、特點(diǎn)、發(fā)展方向及應(yīng)用等基礎(chǔ)知識(shí),介紹了開發(fā)工具VC++的特點(diǎn),較詳細(xì)的說明了對(duì)位圖圖像進(jìn)行處理的基礎(chǔ)知識(shí),然后分別對(duì)三種編碼方法的原理和算法進(jìn)行了分析,最后通過整體程序的運(yùn)行結(jié)果得出結(jié)論。</p>
4、<p> 關(guān)鍵詞:圖像壓縮;哈夫曼編碼;香農(nóng)-費(fèi)諾編碼;行程編碼</p><p><b> Abstract</b></p><p> For long term, 80% information the humanity gains originated from image media, and 15% from sound media. Th
5、erefore, main information through which people feel the nature is visual information. This illustrates that image is the most important communication carrier in lives and also is the biggest information media. Because im
6、age without processing obtains a great deal of information, it is extremely important to study and develop image compressing and coding technologies vigorously. </p><p> The basic reason that image can be
7、compressed is that image data have information redundancy. Each pixel point has a big relevance with others, thus entire image data have a quite great redundance and also have a great compression potential. Furthermore,
8、evaluation of an image quality is decided by the human eyes. However, the human eyes have their visual characteristics, so it is very difficult to distinguish the image fine or not. Therefore the image also has certain v
9、isual redundancy. In othe</p><p> My graduation project is mainly about Huffman Coding, Shannon - Fannon Coding, and Run Length Coding. I am applying these three methods to a same image, then giving advanta
10、ges and disadvantages for each compression method by comparing compression ratio. This paper first introduces some elementary knowledge, such as concept, classification, characteristic, development direction and applicat
11、ion of image processing, and introduces characteristic of the development tool VC++, and shows basic knowled</p><p> Key Words: Image Compression; Huffman Coding; Shannon-Fannon Coding; Run Length </p>
12、;<p><b> Coding</b></p><p><b> 目 錄</b></p><p><b> 第1章 緒論1</b></p><p> 1.1 圖像壓縮編碼技術(shù)研究目的和意義1</p><p> 1.2 圖像壓縮編碼技術(shù)發(fā)展現(xiàn)狀2&
13、lt;/p><p> 1.3 論文主要研究內(nèi)容3</p><p> 1.4 論文框架組織結(jié)構(gòu)3</p><p> 第2章圖像壓縮編碼技術(shù)基礎(chǔ)及概念3</p><p> 2.1圖像壓縮和數(shù)據(jù)冗余4</p><p> 2.1.1 圖像壓縮的原理4</p><p> 2.1.2 數(shù)
14、據(jù)冗余的分類4</p><p> 2.2 圖像壓縮編碼技術(shù)主要方法5</p><p> 2.2.1 哈弗曼編碼5</p><p> 2.2.2 方塊編碼6</p><p> 2.2.3行程編碼7</p><p> 2.2.4 變換編碼8</p><p> 2.2.5 位平
15、面編碼8</p><p> 2.3Visual C++6.0介紹9</p><p> 2.3.1Visual C++軟件平臺(tái)9</p><p> 2.3.2VC++技術(shù)特性10</p><p> 2.3 數(shù)字圖像基本概念10</p><p> 2.4 與設(shè)備無關(guān)的位圖(DIB)12</
16、p><p> 2.5 BMP位圖文件結(jié)構(gòu)12</p><p> 2.6 CDIB類庫的建立12</p><p> 2.6.1 設(shè)計(jì)目標(biāo)12</p><p> 2.6.2 構(gòu)造CDIB類13</p><p> 2.7 本章小結(jié)13</p><p> 第3章圖像壓縮技術(shù)編碼的算法
17、研究13</p><p> 3.1 哈弗曼編碼13</p><p> 3.1.1 哈弗曼編碼基本原理14</p><p> 3.1.2 哈弗曼編碼步驟14</p><p> 3.1.3 哈弗曼編碼特點(diǎn)15</p><p> 3.2 香農(nóng)-費(fèi)諾編碼16</p><p> 3
18、.2.1 香農(nóng)-費(fèi)諾編碼基本原理16</p><p> 3.2.2 香農(nóng)-費(fèi)諾編碼步驟16</p><p> 3.2.3 香農(nóng)-費(fèi)諾編碼特點(diǎn)17</p><p> 3.3 行程編碼17</p><p> 3.3.1行程編碼基本原理17</p><p> 3.3.2行程編碼步驟18</p&
19、gt;<p> 3.3.3行程編碼特點(diǎn)19</p><p> 3.4 本章小結(jié)19</p><p> 第4章圖像壓縮技術(shù)編碼方法設(shè)計(jì)19</p><p> 4.1 哈弗曼編碼19</p><p> 4.1.1 哈弗曼編碼算法實(shí)現(xiàn)20</p><p> 4.1.2 視圖類On Hu
20、ffman coding()函數(shù)25</p><p> 4.2 香農(nóng)-費(fèi)諾編碼28</p><p> 4.2.1 香農(nóng)-費(fèi)諾編碼算法實(shí)現(xiàn)28</p><p> 4.2.2 視圖類處理函數(shù)On Shannon Coding()函數(shù)35</p><p> 4.3 行程編碼38</p><p> 4.3.
21、1 行程編碼算法實(shí)現(xiàn)38</p><p> 4.3.2 視圖類處理函數(shù)OnRleCoding()43</p><p> 4.4 本章小結(jié)45</p><p> 第5章圖像壓縮編碼的實(shí)現(xiàn)45</p><p> 5.1 圖像壓縮編碼結(jié)果45</p><p> 5.1.1 哈弗曼編碼結(jié)果46</
22、p><p> 5.1.2 香農(nóng)-費(fèi)諾編碼結(jié)果46</p><p> 5.1.3 行程編碼結(jié)果47</p><p> 5.2 本章小結(jié)48</p><p><b> 結(jié)論49</b></p><p><b> 參考文獻(xiàn)51</b></p><
23、p> 附錄錯(cuò)誤!未定義書簽。</p><p> 攻讀學(xué)位期間發(fā)表論文與研究成果清單錯(cuò)誤!未定義書簽。</p><p> 致謝錯(cuò)誤!未定義書簽。</p><p><b> 第1章 緒論</b></p><p> 1.1 圖像壓縮編碼技術(shù)研究目的和意義</p><p> 隨著現(xiàn)
24、代通信技術(shù)、計(jì)算機(jī)技術(shù)、網(wǎng)絡(luò)技術(shù)和信息處理技術(shù)的發(fā)展,圖像信息的處理、存儲(chǔ)和傳輸在社會(huì)生活中的作用越來越大,人們對(duì)接受圖像信息的要求越來越迫切,圖像通信將是通信事業(yè)發(fā)展中面臨的最大挑戰(zhàn),也是未來通信領(lǐng)域的市場熱點(diǎn)。如何將信息以更加簡潔的方式表達(dá),如何更加準(zhǔn)確、快速的傳輸信息,是信息高速發(fā)展的時(shí)代擺在人們面前的熱點(diǎn)問題。圖像通常來源于自然景物,其原始的形態(tài)是連續(xù)變化的模擬量。模擬信號(hào)不易于存儲(chǔ)和傳輸,而且在存儲(chǔ)和傳輸?shù)倪^程中易引入噪聲,導(dǎo)
25、致失真,所以一般將模擬信號(hào)進(jìn)行采樣和量化,進(jìn)而以數(shù)字化的形式進(jìn)行存儲(chǔ)和傳輸。當(dāng)圖像以數(shù)字形式進(jìn)行處理和傳輸時(shí),就可以與計(jì)算機(jī)技術(shù)相結(jié)合,具有質(zhì)量好、成本低、小型化和易實(shí)現(xiàn)等優(yōu)點(diǎn),因此,將圖像進(jìn)行數(shù)字化傳輸已成為當(dāng)前圖像通信領(lǐng)域的主要技術(shù)。</p><p> 然而圖像經(jīng)過采樣和量化轉(zhuǎn)換成數(shù)字信號(hào)后,其數(shù)據(jù)量的巨大成為擺在眼前的非常棘手的問題。盡管隨著科學(xué)技術(shù)的發(fā)展,海量存儲(chǔ)技術(shù)以及數(shù)字通信系統(tǒng)的性能發(fā)展迅猛,但高
26、清晰度數(shù)字圖像數(shù)據(jù)量對(duì)數(shù)據(jù)存儲(chǔ)的能力和數(shù)據(jù)傳輸帶寬的需求仍然超出了現(xiàn)有技術(shù)的能力所及。為了使通信成為可能并盡可能地降低通信費(fèi)用,對(duì)圖像信號(hào)進(jìn)行壓縮編碼是必需的。人們通過對(duì)圖像數(shù)據(jù)進(jìn)行大量統(tǒng)計(jì)和視覺感受的研究表明,圖像的相鄰像素之間、相鄰行之間或者相鄰幀之間都存在著很強(qiáng)的相關(guān)性,即圖像信號(hào)存在著空間冗余、時(shí)間冗余、結(jié)構(gòu)冗余、視覺冗余和知識(shí)冗余等冗余度,利用某種編碼方法在一定程度上消除這些相關(guān)性或冗余,就可以實(shí)現(xiàn)圖像數(shù)據(jù)的壓縮編碼。<
27、/p><p> 我們每天接收的外部信息中,大部分內(nèi)容是通過聽覺和視覺系統(tǒng)接收的。據(jù)分析,在人類的感官所接收的外部信息中,通過耳朵接收的聽覺信息約占總信息量的 20%左右,而通過人眼的視覺接收的信息則高達(dá) 60%以上。由于圖像信息具有信息量大、直觀性強(qiáng)的特點(diǎn),而且特別適合人們?cè)谛畔⒔涣髦兴枰闹苯印⒂H切等生理和心理的要求特點(diǎn),圖像信息在通信中的地位顯得尤為重要。</p><p> 簡單地說
28、,如果沒有圖像數(shù)據(jù)壓縮編碼技術(shù),在720*576的分辨率下,一張C卜RMO光盤僅能存儲(chǔ)三十多秒未經(jīng)壓縮的視頻節(jié)目;如果沒有圖像數(shù)據(jù)壓縮編碼技術(shù),從Internet上下載一部電影也許要花半年的時(shí)間。這樣巨大的數(shù)據(jù)量,成為了存儲(chǔ)、傳輸、通訊的瓶頸。因此,研究高效的圖像數(shù)據(jù)壓縮編碼方法,即怎樣處理、組織圖像數(shù)據(jù),在應(yīng)用領(lǐng)域中的作用將是至關(guān)重要的。</p><p> 總之,大數(shù)據(jù)量的圖像信息會(huì)給存儲(chǔ)器存儲(chǔ)容量、通信干線
29、信道寬帶以及計(jì)算處理速度帶來巨大的壓力。單純靠增加存儲(chǔ)容量,和提高信道帶寬以及計(jì)算機(jī)的處理速度等方法解決這個(gè)問題是不現(xiàn)實(shí)的。因此,在圖像數(shù)據(jù)的傳輸和存儲(chǔ)中,壓縮編碼勢在必行。</p><p> 1.2 圖像壓縮編碼技術(shù)發(fā)展現(xiàn)狀</p><p> 自20世紀(jì)80年代以來,無論是從社會(huì)的需要還是從技術(shù)的發(fā)展來看,圖像編碼技術(shù)已經(jīng)逐步進(jìn)入了很大范圍的應(yīng)用階段。但由于沒有統(tǒng)一的壓縮算法和碼流格
30、式,在進(jìn)行圖像信息的交流中遇到了很多困難。</p><p> 壓縮的理論基礎(chǔ)是信息論。從信息論的角度來看,壓縮就是去掉信息中的冗余,即保留不確定的信息,去掉確定的信息(可推知的),也就是用一種更接近信息本質(zhì)的東西信息量來代替原有冗余的描述。</p><p> 圖像壓縮技術(shù)經(jīng)過幾十年的發(fā)展,現(xiàn)在來說還是比較成熟的。圖像數(shù)據(jù)文件的格式有很多,如GIF、TIFF、PCX、TGA、BMP、JP
31、G等。其中BMP圖像對(duì)于原始的圖像數(shù)據(jù)不壓縮或壓縮比例很小。JPEG由于有較高的壓縮比,被廣泛地應(yīng)用于多媒體和網(wǎng)絡(luò)程序中,HTML語法中選用的圖像格式之一就是JPEG(另一種是GIF), 目前網(wǎng)站上百分之八十的圖像都是采用JPEG的壓縮標(biāo)準(zhǔn)。美國國防部及情報(bào)部門亦采用此標(biāo)準(zhǔn)為各部門間交流圖像資料的標(biāo)準(zhǔn)格式。JPEG全名為Joint Photographic Experts Group,它是一個(gè)在國際標(biāo)準(zhǔn)組織(ISO)下從事靜態(tài)影像壓縮標(biāo)
32、準(zhǔn)制定的委員會(huì),它和國際電信同盟(ITU)下屬的國際電話與電報(bào)顧問委員會(huì)(CCITT)及國際電工委員會(huì)(IEC)合作,共同制定出了第一套國標(biāo)靜態(tài)影像壓縮標(biāo)準(zhǔn):ISO/IEC 10918-1,也被稱作CCITT Rec.T.81,就是俗稱的JPEG,它被公布于1992年9月份。</p><p> 人類社會(huì)已經(jīng)進(jìn)入信息時(shí)代了,人們每天都可以通過各種手段(如PDA、網(wǎng)絡(luò)、電視、廣播等)獲得大量的信息,而信息的本質(zhì),就
33、要求交流和傳播。在大量信息給人們生活增加了更多色彩的同時(shí),隨之而來的問題是如何利用有限的傳輸和儲(chǔ)存資源來傳輸和保存更多的信息,而圖像就是信息的一種,這就要用到圖像壓縮的方法。具體的說,圖像壓縮的意義有以下幾個(gè)方面:首先是為了減少存儲(chǔ)容量,以利圖像的保存;其次是有利于圖像傳輸;第三是便于特征提取,以利于計(jì)算機(jī)模式識(shí)別。</p><p> 1.3 論文主要研究內(nèi)容</p><p> 本論文
34、主要通過哈弗曼編碼、香農(nóng)-費(fèi)諾編碼和行程編碼三種方法對(duì)同一幅圖像進(jìn)行壓縮,對(duì)所得到的圖像壓縮比進(jìn)行比較,最后得出每種壓縮方法的優(yōu)缺點(diǎn)。首先介紹了圖像處理的概念、分類、特點(diǎn)、發(fā)展方向及應(yīng)用等基礎(chǔ)知識(shí),介紹了開發(fā)工具VC++的特點(diǎn),較詳細(xì)的說明了對(duì)位圖圖像進(jìn)行處理的基礎(chǔ)知識(shí),然后分別對(duì)三種編碼方法的原理和算法進(jìn)行了分析,最后通過整體程序的運(yùn)行結(jié)果得出結(jié)論。</p><p> 1.4 論文框架組織結(jié)構(gòu)</p&g
35、t;<p> 本論文框架結(jié)構(gòu)如下:</p><p><b> 第一章:緒論</b></p><p> 首先介紹了圖像壓縮編碼技術(shù)的研究背景及意義,分析了進(jìn)行圖像壓縮編碼的必要性,其次介紹了圖像壓縮編碼技術(shù)目前的研究趨勢,最后列出了論文的主要研究內(nèi)容及本論文的框架機(jī)構(gòu)。</p><p> 第二章:圖像壓縮編碼技術(shù)基礎(chǔ)及概念&
36、lt;/p><p> 對(duì)圖像壓縮編碼技術(shù)的概念和數(shù)字圖像的基本概念做了簡要介紹,對(duì)最新的圖像壓縮算法進(jìn)行了闡述,介紹了VC++軟件平臺(tái)的特性及結(jié)構(gòu)。</p><p> 第三章:圖像壓縮編碼技術(shù)的算法研究</p><p> 本章詳細(xì)介紹了哈弗曼編碼、香農(nóng)-費(fèi)諾編碼和行程編碼三種圖像壓縮編碼技術(shù)的基本原理及具體算法步驟。</p><p> 第
37、四章:圖像壓縮編碼技術(shù)的算法實(shí)現(xiàn)</p><p> 通過哈弗曼編碼、香農(nóng)-費(fèi)諾編碼和行程編碼三種方法對(duì)同一幅圖像進(jìn)行壓縮實(shí)現(xiàn),對(duì)所得到的圖像壓縮比進(jìn)行比較,最后得出每種壓縮方法的優(yōu)缺點(diǎn)。</p><p><b> 第五章:系統(tǒng)測試</b></p><p> 介紹了本設(shè)計(jì)系統(tǒng)的測試方法、測試作用和測試環(huán)境,對(duì)部分功能接口進(jìn)行詳細(xì)測試。<
38、;/p><p> 最后,對(duì)全文進(jìn)行了總結(jié),并對(duì)指導(dǎo)教師表示感謝。</p><p> 第2章圖像壓縮編碼技術(shù)基礎(chǔ)及概念</p><p> 2.1圖像壓縮和數(shù)據(jù)冗余</p><p> 信息量和數(shù)據(jù)量是兩個(gè)相互聯(lián)系而又不相同的兩個(gè)概念。一定的信息量可以用不同的數(shù)據(jù)量來表示。對(duì)于一定的信息,通過某些方法減少表示這些信息的數(shù)據(jù)量就稱為數(shù)據(jù)壓縮。圖
39、像數(shù)據(jù)壓縮就是一種典型的數(shù)據(jù)壓縮,其目標(biāo)就是減少表示圖像所需的數(shù)據(jù)量。</p><p> 2.1.1 圖像壓縮的原理</p><p> 對(duì)圖像數(shù)據(jù)的壓縮可通過對(duì)圖像的編解碼來實(shí)現(xiàn)。這個(gè)過程如圖 2-1 所示,它實(shí)際上包含以下兩個(gè)步驟:</p><p> (1)通過對(duì)原始圖像的編碼以達(dá)到減少數(shù)據(jù)量的目的(壓縮過程),所獲得的編碼結(jié)果并不一定是圖像形式,但可用于存
40、儲(chǔ)和傳輸。</p><p> (2)為了實(shí)際應(yīng)用的需要對(duì)編碼結(jié)果進(jìn)行解碼,得到解碼圖像(恢復(fù)了圖像形式)以使用。</p><p> 2.1.2 數(shù)據(jù)冗余的分類</p><p> 由于圖像數(shù)據(jù)本身的冗余性和相關(guān)性,使得將一個(gè)大的圖像數(shù)據(jù)文件轉(zhuǎn)換成較小的圖像數(shù)據(jù)文件成為可能,圖像數(shù)據(jù)壓縮就是去掉信號(hào)數(shù)據(jù)的冗余性。一般來說,圖像數(shù)據(jù)中存在以下幾種冗余。</p&
41、gt;<p> ?。?)空間冗余。這是靜態(tài)圖像存在的最主要的一種數(shù)據(jù)冗余。一幅圖像記錄了畫面上可見物體的顏色,同一物體表面上各采樣點(diǎn)的顏色之間常常存在著空間相關(guān)性,即各采樣點(diǎn)的顏色像素值可以由相鄰像素的值預(yù)測出來,從而產(chǎn)生了空間冗余。</p><p> (2)結(jié)構(gòu)冗余。在某些場景或圖像中,存在著很強(qiáng)的紋理結(jié)構(gòu)或圖像分布模式,稱為結(jié)構(gòu)冗余。</p><p> ?。?)視覺冗余
42、。人類的視覺系統(tǒng)對(duì)于圖像場的敏感性是非均勻和非線性的,即眼睛并不是對(duì)所有信息都有相同的敏感度。然而,在記錄原始圖像數(shù)據(jù)時(shí),往往假定視覺系統(tǒng)是均勻的和線性的,對(duì)視覺敏感和不敏感的部分同等對(duì)待,從而產(chǎn)生了比理想壓縮編碼更多的數(shù)據(jù),這就是視覺冗余。</p><p> ?。?)知識(shí)冗余。有許多圖像的理解與某些知識(shí)有相當(dāng)大的相關(guān)性。例如,人臉的圖像有固定的結(jié)構(gòu)。比如說嘴的上方有鼻子、鼻子的上方有眼睛,鼻子位于正臉圖像的中線
43、上,等等。</p><p> (5)時(shí)間冗余。是序列圖像和語音數(shù)據(jù)中所經(jīng)常包含的冗余。圖像序列中的兩幅相鄰的圖像,后一幅圖像與前一幅圖像之間有較大的相關(guān)性,這反映為時(shí)間冗余。同理,在語言中,由于人的說話時(shí)發(fā)音的音頻是一連續(xù)的漸變過程,因而也存在時(shí)間冗余。</p><p> ?。?)信息熵冗余。若圖像中平均每個(gè)像素所用的比特?cái)?shù)大于該圖像的信息熵,則該圖像存在冗余,叫做信息熵冗余。信息熵冗余
44、又叫編碼冗余。</p><p> 2.2 圖像壓縮編碼技術(shù)主要方法</p><p> 從不同的角度出發(fā)有不同的分類,比如從信息論角度出發(fā),圖像數(shù)據(jù)的壓縮可以分為無損壓縮(無失真壓縮)和有損壓縮(有失真壓縮)。</p><p> 無損壓縮編碼是建立在香農(nóng)信息論基礎(chǔ)之上的,以經(jīng)典集合論為工具。用概率統(tǒng)計(jì)模型來描述信源,其壓縮思想基于數(shù)據(jù)統(tǒng)計(jì),因此只能去除數(shù)據(jù)冗余,
45、屬于底層壓縮編碼的范疇。其壓縮過程是可逆的,在壓縮和解壓縮的過程中沒有信息量的損失,從壓縮后的圖像能夠完全恢復(fù)到原來的圖像。目前技術(shù)提供的壓縮率一般在2-10之間。無損壓縮的壓縮效率較低,但是可以分毫不差地重現(xiàn)原始數(shù)據(jù)。例如Huffman編碼、算術(shù)編碼、行程編碼、LZW編碼。</p><p> 有損壓縮是把對(duì)最終應(yīng)用確實(shí)不需要的原始數(shù)據(jù)丟棄的一種壓縮技術(shù)。在壓縮過程中可以丟棄的東西包括對(duì)人眼感知不需要的東西,比
46、如不必要的尖銳邊緣或者很高的分辨率等,其壓縮過程是不可逆的。因此這樣的壓縮技術(shù)不應(yīng)該用在關(guān)鍵性的應(yīng)用中,比如醫(yī)學(xué)圖像。但是,在網(wǎng)絡(luò)和商業(yè)電視等應(yīng)用中卻很有用,因?yàn)樗苓_(dá)到很高的壓縮比。例如預(yù)測編碼、正交變換編碼、子帶編碼。</p><p> 2.2.1 哈弗曼編碼</p><p> 哈弗曼編碼(Huffinan encoding)是常用的壓縮方法之一,它是Huffinan在研究文本文件
47、的壓縮時(shí)提出來的。它是一種無損壓縮方法,通過設(shè)計(jì)合理的代碼取代數(shù)據(jù)來實(shí)現(xiàn)的。哈弗曼編碼的基本思路是用變長的碼字來使冗余量達(dá)到最小,出現(xiàn)頻率越高的像素值,其對(duì)應(yīng)的編碼長度越短,反之出現(xiàn)頻率低的像素值,對(duì)應(yīng)的編碼長度越長。這樣就可以達(dá)到用盡可能少的代碼表示信源數(shù)據(jù)的目的。</p><p> 哈弗曼編碼的實(shí)現(xiàn)步驟如下:</p><p> (1)將q個(gè)信源符號(hào)S按照概率分布的大小,以遞減次序排
48、列,設(shè)</p><p> P1≥P2≥P3≥…Pq</p><p> ?。?)將兩個(gè)概率最小的信源符號(hào)賦以1和0,并將這兩個(gè)符號(hào)合并成一個(gè)新符號(hào),并將概率相加合并成新符號(hào)的概率,得到一個(gè)新的信源S1,包含q-1個(gè)符號(hào)。</p><p> ?。?)對(duì)少一個(gè)信源符號(hào)的信源凡,重新排隊(duì);重復(fù)步驟(2)直至概率和達(dá)到1為止。</p><p> ?。?/p>
49、4)從最后一級(jí)開始,依照編碼路徑由后向前返回,就得到各個(gè)信源符號(hào)所對(duì)應(yīng)的碼元序列,即是信源符號(hào)相應(yīng)的碼字。</p><p> 理論研究表明,哈弗曼編碼是一種接近于信源嫡的編碼方法。但是哈弗曼編碼也存在不足,一是它必須精確地統(tǒng)計(jì)原始文件中每個(gè)值的出現(xiàn)概率,如果沒有這個(gè)精確統(tǒng)計(jì),壓縮的效果會(huì)打折扣,甚至達(dá)不到預(yù)期的壓縮效果。而在實(shí)際應(yīng)用中,由于很難事先得知信源數(shù)據(jù)中各符號(hào)發(fā)生的概率,對(duì)那些要求實(shí)時(shí)編碼的工作帶來很大
50、困難。其二它對(duì)位的增刪比較敏感。由于哈弗曼編碼的所有碼字是合在一起的,沒有分位,所以如果丟失一位或者增加噪聲都會(huì)使解碼結(jié)果面目全非。</p><p> 2.2.2 方塊編碼</p><p> 將一副二值圖像分成大小為的子塊,一共有種不同排列,種不同的子塊圖案。然后按每子塊內(nèi)像素的不同排列所出現(xiàn)的概率不同,采用哈弗曼編碼為這些子塊分配不同長度的碼字,概率高的分配短碼字,不常出現(xiàn)的分配長碼
51、,使平均碼長達(dá)到最短。塊編碼最先就是用在二值圖像上,如傳真圖像,后來推廣到灰度圖像。由于設(shè)備簡單,可用于實(shí)時(shí)處理或傳輸系統(tǒng)中,因此引起人們?cè)絹碓綇V泛的重視。</p><p> 但當(dāng)方塊尺寸大于3x3時(shí),符合集合將迅速增大,致使霍夫曼編碼的碼表過于龐大而難以實(shí)際應(yīng)用,因此就提出了降低復(fù)雜度的次最佳編碼方法。全白的方塊最常出現(xiàn),因此分配最短的碼字“0”,而其它含有黑色像素的排列均用直接編碼,如圖2.1所示(空白方格
52、表示白像素)。</p><p><b> 圖2.1 方塊編碼</b></p><p> 在實(shí)際中,大多數(shù)二值圖像都是白色背景占大部分,黑色像素只是占圖像像素總數(shù)的很少一部分,因此分解的子快中像素為全白的概率遠(yuǎn)大于其他情況,如果跳過這些白色區(qū)域,只傳輸黑色像素信息,就可使得每個(gè)像素的平均比特下降。跳白塊(WBS)編碼正式基于這一思想提出來的。</p>
53、<p> 跳白塊(White Block Skipping)編碼是利用二值圖像以白色像素為主、黑色像素相對(duì)較少這一特點(diǎn)而提出的編碼方法。編碼方法非常簡單,首先將二值圖像的各掃描行分成若干塊仍lock),每塊包括N個(gè)像素,其中像素全為白色像素的塊,稱為全白塊 (White Block),編碼時(shí)用1比特碼字“0”表示,這是因?yàn)檫@種全白塊在所有的塊中出現(xiàn)的概率最大,因而分配最短的一個(gè)碼字。</p><p>
54、 對(duì)于至少含有一個(gè)黑像素的非全白塊,用N+1比特碼字表示:第一個(gè)比特為“l(fā)”,稱為前綴碼;其余N比特采用直接編碼,白像素為“0”,黑像素為“l(fā)”(反過來亦可)。注意,全白塊對(duì)應(yīng)的1比特“0”也可看作是前綴碼,只不過此時(shí)全白塊的編碼看成只包括前綴碼。前綴碼的作用是使解碼器在收到一系列的比特流時(shí)能夠正確的判別每個(gè)碼字。使用這種編碼后,原圖像平均每個(gè)像素的比特?cái)?shù),即比特率縱為</p><p> 其中,是某塊為全白的
55、概率,通過對(duì)碼字的統(tǒng)計(jì)得到。越小,壓縮性能越好。</p><p> 解碼時(shí),每收到一個(gè)“1”,則判斷其后的N比特為直接編碼,而在該N比特以外的“0”則可判斷為全白塊,恢復(fù)為N個(gè)“0”,進(jìn)而唯一地恢復(fù)原像素序列,從而完成圖像的重建。</p><p> 一維WBS可以推廣到二維,整個(gè)圖像分成若干大小為 MxN像素的塊,某塊為全白像素時(shí)用1比特“0”表示;非全白塊用1+MN個(gè)比特碼字表示:一
56、個(gè)前綴比特“1”,其余MN比特采用直接編碼。</p><p><b> 2.2.3行程編碼</b></p><p> 行程長度編碼,又叫做游程編碼(Run-Length Coding, RLC),它的基本思想是,當(dāng)二值圖像按照從左到右的掃描順序去記錄每一行時(shí),總會(huì)交替出現(xiàn)出現(xiàn)一定數(shù)量的連續(xù)白點(diǎn)和連續(xù)黑點(diǎn),如圖2.2所示。通常把具有相同灰度值的相鄰像素組成的序列成為
57、一個(gè)游程,游程中像素的個(gè)數(shù)成為游程長度,簡稱游長。游程編碼就是將這些不同的游程長度構(gòu)成的字符串用其數(shù)值和游長數(shù)值來表示。</p><p> 對(duì)圖像進(jìn)行編碼時(shí),首先對(duì)圖像進(jìn)行掃描,如果有連續(xù)的L個(gè)像素具有相同的灰度值G,則對(duì)其作行程編碼后,只需傳送一個(gè)數(shù)組(G, L)就可代替?zhèn)魉瓦@一串像素的灰度值。圖中可寫成白4、黑3、白5、黑2、白3(其含義是4個(gè)白、3個(gè)黑、5個(gè)白、2個(gè)黑、3個(gè)白)。然后,再對(duì)游程進(jìn)行變長編碼
58、,根據(jù)出現(xiàn)概率的不同分配不同長度的碼字。很明顯,游程長度越長,游程編碼效率越高,因而特別適用于灰度等級(jí)少,灰度值變化小的二值圖像。</p><p> 圖2.2 連續(xù)白點(diǎn)和連續(xù)黑點(diǎn)</p><p> 游程編碼主要應(yīng)用在ITU(CCITT)為傳真制定的文件傳真三類機(jī)G3-維標(biāo)準(zhǔn)中,在該標(biāo)準(zhǔn)中游長的霍夫曼編碼分為行程碼和終止碼兩種,對(duì)不同長度的黑游程和白游程采用不同的編碼方式,如圖2.3所示
59、。</p><p><b> 圖2.3 游程編碼</b></p><p> 2.2.4 變換編碼</p><p> 將原來在空間域上描述的圖像信號(hào),通過數(shù)字變換變換到變換域中。我們常常會(huì)發(fā)現(xiàn),各變換系數(shù)之問的相關(guān)性明顯下降,能量較為集中,這樣可以根據(jù)壓縮比的要求,在滿足一定失真度要求的情況下進(jìn)行有損壓縮編碼。</p><
60、;p> 變換編碼的過程是先對(duì)每個(gè)子像塊進(jìn)行正交變換,生成變換域中的系數(shù)知陣,然后進(jìn)行變換、量化、編碼,再存儲(chǔ)或者傳輸。典型的正交變換有離散傅里葉變換(簡稱DFT)、離散余弦變換(簡稱DCT),K-L變換和沃爾什變換等。變換編碼之所以在圖像信號(hào)處理中得到廣泛應(yīng)用,主要是它具有如下特性:</p><p> ?。?)能量集中性與保持特性。變換編碼方法最重要的特點(diǎn)是使能量主要集中于低頻區(qū)域,使大多數(shù)變換系數(shù)為0或
61、者很小的數(shù)。在編碼時(shí),可以舍棄能量較小的系數(shù),或者分配很少的比特,從而實(shí)現(xiàn)數(shù)據(jù)的壓縮。</p><p> (2)去相關(guān)性。通過變換可以使相關(guān)的空間樣值變?yōu)椴幌嚓P(guān)或者弱相關(guān)的變換系數(shù),即變換編碼能夠消除存在相關(guān)性中的冗余度。</p><p> 2.2.5 位平面編碼</p><p> 對(duì)1幅用多個(gè)比特表示其灰度值的圖像來說,其中的每個(gè)比特可看作表示了個(gè)二值的平面
62、,也稱位面,如圖2.4所示。</p><p><b> 圖2.4 位平面</b></p><p> 位平面編碼是一種將多灰度值圖象分解成一系列二值圖,然后對(duì)每幅二值圖再用二元壓縮方法進(jìn)行壓縮的技術(shù)。這類方法主要有兩個(gè)步驟:位平面分解和位平面編碼。將圖像所有像素的不同比特位進(jìn)行分解,就構(gòu)成了圖像八個(gè)不同的位平面,如圖2.5所示。對(duì)于八位灰度圖像I,其位平面分解可表示
63、為:</p><p> 由圖2.4中可以看出,隨著位平面從高位到低位(即從位平面7到位平面0),位平面圖像特征逐漸變得復(fù)雜,位平面圖像的隨機(jī)紋理逐漸增加,圖像輪廓逐漸變得模糊直至消失。到位平面0,基本上就已無法看到原圖信息,這恰恰表明,不同位平面的信息對(duì)數(shù)字圖像的貢獻(xiàn)是不同的,較高位平而(簡稱“重要位平面”)反應(yīng)原始圖像的主要內(nèi)容,而較低位平面所攜帶的原始信號(hào)能量極少,即忽略較低位平面對(duì)原始圖像質(zhì)量沒有太大的影
64、響。也就是說我們只需要提取圖像的最高5個(gè)位平面(即重要位平面)就足以表達(dá)圖像內(nèi)容。</p><p> Visual C++6.0介紹</p><p> 采用的是Visual C++ 6.0平臺(tái)編程實(shí)現(xiàn),建立的項(xiàng)目名稱為RWJpegExp。在此應(yīng)用程序中,我們可以打開和存儲(chǔ)任意的BMP文件或JPEG文件,并能實(shí)現(xiàn)兩者的格式轉(zhuǎn)換。即可以將BMP文件壓縮編碼為JPEG文件,也可以將JPEG文
65、件解碼為BMP文件。</p><p> Visual C++軟件平臺(tái)</p><p> Visual C++首先是一種程序設(shè)計(jì)語言,同時(shí)也是一個(gè)集成開發(fā)工具,它提供了自動(dòng)生成軟件代碼和可視化資源編輯的功能。Visual C++是Windows環(huán)境下最主要的面向?qū)ο髴?yīng)用開發(fā)系統(tǒng)之一,不僅是C++語言的集成開發(fā)環(huán)境,而且與Win32緊密相連。所以,使用Visual C++可以靈活地開發(fā)從底
66、層軟件到上層直接面向用戶的軟件。</p><p> 進(jìn)入20世紀(jì)90年代以來,隨著多媒體技術(shù)和圖形圖像技術(shù)的不斷發(fā)展,可視化技術(shù)得到廣泛的重視,越來越多的計(jì)算機(jī)專業(yè)人員和非專業(yè)人員都開始研究并應(yīng)用可視化技術(shù)。所謂可視化技術(shù),一般是指軟件開發(fā)階段的可視化和對(duì)計(jì)算機(jī)圖像技術(shù)和方法的應(yīng)用。Visual C++是一個(gè)很好的可視化編程工具,使用Visual C++環(huán)境來開發(fā)基于Windows的應(yīng)用程序大大縮短了開發(fā)時(shí)間,
67、而且它的界面更為友好,便于程序員操作。在沒有可視化開發(fā)工具之前,程序員要花好幾個(gè)月的時(shí)間來完成Windows程序的界面開發(fā),而現(xiàn)在只需較少的時(shí)間就可以完成。</p><p><b> VC++技術(shù)特性</b></p><p> 面向?qū)ο蟪绦蛟O(shè)計(jì)(Object-Oriented Programming 簡稱OOP)方法已出現(xiàn)近三十年,90年代已成為程序設(shè)計(jì)的主流方向
68、,面向?qū)ο蟪绦蛟O(shè)計(jì)語言是現(xiàn)代程序開發(fā)的主要工具,如C++、Java是現(xiàn)代程序員必須掌握的編程語言。</p><p> 面向?qū)ο蟪绦蛟O(shè)計(jì)方法主要以數(shù)據(jù)為中心,代碼是圍繞著需要處理的數(shù)據(jù)而設(shè)計(jì)的,面向?qū)ο蟪绦蛟O(shè)計(jì)語言具有如下的主要特征:</p><p><b> ?。?)對(duì)象的類描述</b></p><p> ?。?)封裝性(Encapsulat
69、ion)</p><p> (3)多態(tài)性(Polymorphism)</p><p> ?。?)繼承性(Inheritance)</p><p> C++是運(yùn)用最廣泛的面向?qū)ο蟪绦蛟O(shè)計(jì)語言,Visual C++是一個(gè)具有集成、交互和可視化編程的C++實(shí)現(xiàn),具備上述的所有OOP特征。</p><p> 編寫Visual C++程序?qū)嶋H上就
70、是一個(gè)構(gòu)造類和把類實(shí)例化的過程。由于Windows 95/98/NT 是PC平臺(tái)中應(yīng)用最廣泛的操作系統(tǒng)(Microsoft力圖用一個(gè)叫做Win32的標(biāo)準(zhǔn)的32位應(yīng)用程序接口來作為對(duì)這幾個(gè)操作系統(tǒng)的共同開發(fā)接口,所以經(jīng)常采用Win32來代表Microsoft的32位Windows操作系統(tǒng)),Visual C++主要針對(duì)Win32的應(yīng)用程序開發(fā)。</p><p> 2.3 數(shù)字圖像基本概念</p>&
71、lt;p> 數(shù)字圖像是連續(xù)圖像的一種近似表示,通常用由采樣點(diǎn)的值所組成的矩陣來表示:</p><p> 每一個(gè)采樣單元叫做一個(gè)像素(pixel),上式(2.1)中,M、N分別為數(shù)字圖像在橫(行)、縱(列)方向上的像素總數(shù)。在計(jì)算機(jī)內(nèi)通常用二維數(shù)組來表示數(shù)字圖像的矩陣,把像素按不同的方式進(jìn)行組織或存儲(chǔ),就得到不同的圖像格式,把圖像數(shù)據(jù)存成文件就得到圖像文件。圖像文件按其數(shù)字圖像格式的不同一般具有不同的擴(kuò)展
72、名。最常見的圖像格式是位圖格式,其文件名以BMP為擴(kuò)展名。圖像數(shù)字化的精度包括兩部分,即分辨率和顏色深度。分辨率指圖像數(shù)字化的空間精細(xì)度,有顯示分辨率和圖像分辨率兩種。</p><p> 數(shù)字圖像的顏色深度表示每一像素的顏色值所占的二進(jìn)制位數(shù)。顏色深度越大則能表示的顏色數(shù)目越多。顏色深度的不同,就產(chǎn)生不同種類的圖像文件,在計(jì)算機(jī)中常使用圖像文件的類型有單色圖像、灰度圖像、偽彩色圖像和24位真彩色圖像。它們之間的
73、關(guān)系取決于數(shù)字圖像采用的顏色表示法。常用的顏色表示法有RGB、CMYK、HSL和YUV等。</p><p> 數(shù)字圖像的數(shù)據(jù)容量非常龐大,如以24位真彩色表示像素為640*480的數(shù)字圖像,所需要的數(shù)據(jù)量為900KB,所以需要對(duì)數(shù)字圖像進(jìn)行數(shù)據(jù)壓縮。數(shù)據(jù)壓縮包括數(shù)據(jù)壓縮編碼和壓縮數(shù)據(jù)解碼兩個(gè)過程。</p><p> 圖像壓縮的基本原則包括:</p><p>
74、(1)編碼重復(fù)壓縮:按照編碼重復(fù)的概率大小做壓縮編碼,壓縮重復(fù)概率大的編碼,可以節(jié)省一些存儲(chǔ)空間。</p><p> ?。?)像素間重復(fù)壓縮:前后像素間存在的某種程度的相關(guān),如存在相同的背景圖像等,簡化編碼以節(jié)省空間。</p><p> ?。?)視覺重復(fù)壓縮:由于入眼的生理構(gòu)造,就算在像素之間少了幾個(gè)像素,眼睛也看不出來。但是,只是在某些情況中才可以允許這種失真性較大的應(yīng)用。</p&
75、gt;<p> 主要的數(shù)字圖像壓縮標(biāo)準(zhǔn)是JPEG(Joint Picture Expert Group)標(biāo)準(zhǔn)。</p><p> 數(shù)字圖像的采集設(shè)備主要有掃描儀、數(shù)字相機(jī)和圖像采集卡等。通過對(duì)數(shù)字圖像進(jìn)行一定的處理,即圖像處理,可在一定程度上改善圖像的分辨質(zhì)量和形成特殊的視覺效果。數(shù)字圖像處理由數(shù)字圖像處理系統(tǒng)完成,其結(jié)構(gòu)主要包括圖像采集系統(tǒng)、計(jì)算機(jī)圖像處理系統(tǒng)和圖像輸出系統(tǒng)三部分。</p
76、><p> 2.4 與設(shè)備無關(guān)的位圖(DIB) </p><p> 與設(shè)備無關(guān)位圖(DIB)可以在不同的機(jī)器或系統(tǒng)中顯示位圖所固有的顏色。DIB是一種外部的位圖格式,經(jīng)常存儲(chǔ)以BMP為后綴的位圖文件。DIB位圖還支持圖像數(shù)據(jù)的壓縮。</p><p> 2.5 BMP位圖文件結(jié)構(gòu)</p><p> BMP文件由文件頭、位圖信息頭、顏色信息和
77、圖像數(shù)據(jù)四部分組成。位圖結(jié)構(gòu)包括:位圖文件頭(BITMAPFILEHEADER)、位圖信息頭(BITMAPINFOHEADER) 、調(diào)色板(Palette)、實(shí)際的位圖數(shù)據(jù)(Image Data)。</p><p> 2.6 CDIB類庫的建立</p><p> 大多數(shù)圖像處理都是基于與設(shè)備無關(guān)位圖(DIB)來進(jìn)行討論的,而MFC中沒有處理DIB位圖的類,所以需要定義一個(gè)處理DIB位圖
78、的專用類CDib類,在其中封裝必要而有效的DIB數(shù)據(jù)成員和處理函數(shù)。</p><p> 2.6.1 設(shè)計(jì)目標(biāo)</p><p> 用面向?qū)ο蟮姆椒ㄌ幚砦粓D的核心是設(shè)計(jì)一個(gè)處理DIB的類,稱之為CDIB類。</p><p><b> ?。?)功能</b></p><p> CDIB類的基本操作功能應(yīng)包括DIB文件的讀、
79、寫操作;提供位圖寬度、高度、顏色數(shù)目等位圖相關(guān)信息;提供有關(guān)位圖占據(jù)內(nèi)存空間的信息,如圖像數(shù)據(jù)區(qū)首地址、顏色表首地址、位圖信息結(jié)構(gòu)首地址等信息。</p><p><b> ?。?)父類</b></p><p> 由于MFC中有一個(gè)支持DDB操作的CBitmap類,因此很直觀的想法是以CBitmap類為父類派生出CDIB類。但是從長遠(yuǎn)考慮,這樣做沒有什么好處。首先,C
80、Bitmap類中沒有處理DIB的功能,因此CDIB類不能從中繼承任何可用的功能。其次,CBitmap是從CGdiObject中派生來的,CBitmap類以及它從CGdiObject類繼承來的數(shù)據(jù)成員和功能函數(shù)對(duì)CDIB類來說都是不合適的,多余的。此外,CBitmap類沒有提供有效的文件操作機(jī)制。而DIB主要是一種“外部”位圖,即它主要以文件形式進(jìn)行存儲(chǔ)和交換,所以CDIB類應(yīng)該能很好地處理文件操作。</p><p&g
81、t; MFC中的CObject類是MFC中其他大多數(shù)類的根類和基類。它不但提供許多有用的特性,還包括對(duì)文件串行化的支持,運(yùn)行時(shí)的類信息和對(duì)象診斷的輸出等。如果從CObject類派生類,則可繼承該類的這些特性。另外,CObject類具有最低限度的成員數(shù)據(jù)和函數(shù),因此采用CObject類作為父類是很合理的。</p><p><b> ?。?)數(shù)據(jù)封裝</b></p><p&
82、gt; 面向?qū)ο蠓椒ǖ囊粋€(gè)重要特征就是數(shù)據(jù)封裝,即將類的成員數(shù)據(jù)隱藏在類中,外界只能通過類的成員函數(shù)來操作類的成員數(shù)據(jù)。這是面向?qū)ο蠓椒ǖ闹匾獌?yōu)點(diǎn),它可以保護(hù)類中的數(shù)據(jù)不受外部的意外修改。但是,過分“純粹”的數(shù)據(jù)封裝,需要付出降低程序效率代價(jià)。特別在設(shè)計(jì)像CDIB類這樣需要大量使用Win32API函數(shù)的類時(shí),這種缺陷特別突出。因?yàn)椴僮鱀IB的API函數(shù)大多需要一些DIB的屬性作為參數(shù)。如果硬要將這些屬性封裝起來,則需要在類中重新實(shí)現(xiàn)許
83、多Win32API函數(shù)。這不但要花費(fèi)很大的精力,而且還可能因此而產(chǎn)生錯(cuò)誤和低效。所以,在設(shè)計(jì)CDIB時(shí)應(yīng)采用既盡可能保證數(shù)據(jù)的封裝,又能保證效率的提高。</p><p> 2.6.2 構(gòu)造CDIB類</p><p> 根據(jù)以上的分析,創(chuàng)建CDIB類,其接口文件和實(shí)現(xiàn)文件分別為Dib.h和Dib.cpp。文件Dib.h包含了CDIB類的類聲明有關(guān)的所有信息。</p><
84、;p><b> 2.7 本章小結(jié)</b></p><p> 本章對(duì)圖像壓縮和數(shù)據(jù)冗余、數(shù)字圖像基本概念、VC++軟件平臺(tái)、及其編碼壓縮技術(shù)做了簡要介紹,對(duì)最新的幾種壓縮算法原理和步驟進(jìn)行了簡要說明。</p><p> 第3章圖像壓縮技術(shù)編碼的算法研究</p><p><b> 3.1 哈弗曼編碼</b>&l
85、t;/p><p> 根據(jù)信息論中信源編碼理論,當(dāng)平均碼長R大于等于圖像熵H時(shí),總可設(shè)計(jì)出一種無失真編碼。當(dāng)平均碼長大于圖像熵時(shí),表明該編碼方法效率很低;當(dāng)平均碼長等于或很接近于(但不大于)圖像熵時(shí),稱此編碼方法為最佳編碼,此時(shí)不會(huì)引起圖像失真;當(dāng)平均碼長小于圖像熵時(shí),壓縮比較高,但會(huì)引起圖像失真。在變長編碼中,如果碼字長度嚴(yán)格按照對(duì)應(yīng)符號(hào)出現(xiàn)的概率大小逆序排列,但其平均碼字長度為最小,這就是變長最佳編碼定理。變長最
86、佳編碼定理是哈夫曼編碼的理論基礎(chǔ)。</p><p> 3.1.1 哈弗曼編碼基本原理</p><p> 哈弗曼(Huffman)編碼是一種常用的壓縮編碼方法,是Huffman于1952年為壓縮文本文件建立的,是一種效率比較高的變長無失真信源編碼方法。它的基本原理是頻繁使用的數(shù)據(jù)用較短的代碼代替,較少使用的數(shù)據(jù)用較長的代碼代替,每個(gè)數(shù)據(jù)的代碼各不相同。</p><p&
87、gt; 由于哈夫曼編碼是以信源概率分布為基礎(chǔ)的,但一般情況下無法事先知道信源的概率分布,因而通常采用對(duì)大量數(shù)據(jù)進(jìn)行統(tǒng)計(jì)后得到的近似分布來代替,這樣會(huì)導(dǎo)致實(shí)際應(yīng)用時(shí)哈夫曼編碼無法達(dá)到最佳性能。</p><p> 3.1.2 哈弗曼編碼步驟</p><p> 下面來介紹哈夫曼編碼方法:</p><p> (1)將輸入的符號(hào)(圖像中的灰度級(jí))按出現(xiàn)概率由小到大排列
88、,即 </p><p> (2)將最小的兩個(gè)相加,形成一個(gè)新的概率集合(此時(shí)壓縮了一個(gè)),再按(1)重復(fù)直到只剩下兩個(gè)概率為止。</p><p> 下圖給出了一個(gè)實(shí)際信源符號(hào)的縮減過程。</p><p> 表3.1 哈夫曼編碼中的信源符號(hào)縮減過程</p><p> 從最后的兩概率值開始逐步向前給符號(hào)分配碼字長,每一步有兩個(gè)分支,以相同
89、的規(guī)則各賦予一個(gè)二進(jìn)制碼。編碼過程如表3.2所示。</p><p> 表3.2哈夫曼編碼中的碼字分配過程</p><p> 同時(shí)也可以計(jì)算與編碼性能相關(guān)的幾個(gè)參數(shù):</p><p><b> (1)信源的熵</b></p><p><b> (3.1)</b></p><
90、p> (2)哈夫曼編碼的平均碼字長 </p><p><b> (3.2)</b></p><p> ?。?)哈夫曼編碼的效率</p><p><b> (3.3)</b></p><p> 3.1.3 哈弗曼編碼特點(diǎn)</p><p> 用哈夫曼編碼方法壓縮圖
91、像數(shù)據(jù),對(duì)于不同的圖像,其壓縮效果和壓縮效率是不同的。當(dāng)各符號(hào)出現(xiàn)概率不同時(shí),編碼效率較高。而當(dāng)各符號(hào)出現(xiàn)的概率相等時(shí),實(shí)際上此時(shí)的哈夫曼編碼就已退化成等長編碼,編碼效率較低。對(duì)灰度圖像的無損壓縮算法采用哈夫曼編碼,即對(duì)原圖像實(shí)行直接的編碼,該算法在恢復(fù)圖像的質(zhì)量上是極好的。但由于該算法對(duì)原圖像直接使用不等長編碼壓縮,但沒有處理圖像各個(gè)像素間的相關(guān)性,從而使壓縮效率并不是很高,因此必須結(jié)合其它的壓縮方法同時(shí)使用以達(dá)到更高的壓縮比。<
92、;/p><p> 3.2 香農(nóng)-費(fèi)諾編碼</p><p> 香農(nóng)-費(fèi)諾(Shannon-Fannon)編碼也是一種常見的可變字長編碼。與哈夫曼編碼相似,當(dāng)信源符號(hào)出現(xiàn)時(shí)的概率正好為2-i時(shí),采用香農(nóng)-費(fèi)諾編碼同樣能達(dá)到100%的編碼效果。</p><p> 3.2.1 香農(nóng)-費(fèi)諾編碼基本原理</p><p> 香農(nóng)-費(fèi)諾編碼的理論基礎(chǔ)是符
93、號(hào)的碼字長度Ni完全由該符號(hào)出現(xiàn)的概率來決定,即 -logDPiNi-logDPi+1,式中D為編碼所用的數(shù)制。</p><p> 3.2.2 香農(nóng)-費(fèi)諾編碼步驟</p><p> ?。?)將信源符號(hào)Xi按其出現(xiàn)概率Pi從小到大排序:</p><p><b> (3.3)</b></p><p> (2)將X分成兩
94、個(gè)子集</p><p><b> (3.4)</b></p><p> 并且保證成立或差不多成立。在本圖像壓縮編碼設(shè)計(jì)中是按前一個(gè)子集大于等于總和的一半來計(jì)算的。</p><p> (3)給兩個(gè)子集賦不同的碼元值,如X1中的符號(hào)賦“1”,X2中的符號(hào)就賦“0”。</p><p> ?。?)重復(fù)(2)、(3),即對(duì)每
95、個(gè)子集再一分為二,并分別賦予不同碼元值,直到每個(gè)子集僅含一個(gè)信源符號(hào)為止。</p><p> 下面通過哈夫曼編碼中用過的同樣例子,說明上述編碼過程。將信源</p><p> (3.5)記為: (3.6)</p><p> 則其編碼過程如表3.3所示。</p><p> 表3.3香農(nóng)-費(fèi)
96、諾編碼過程</p><p> 3.2.3 香農(nóng)-費(fèi)諾編碼特點(diǎn)</p><p> 采用以上算法用VC具體實(shí)現(xiàn)對(duì)某一圖像進(jìn)行編碼,同時(shí)對(duì)編碼的有關(guān)評(píng)估參數(shù)如圖像熵值、平均碼長、編碼效率進(jìn)行計(jì)算。為了便于編碼的顯示設(shè)計(jì)了編碼顯示對(duì)話框,在其中進(jìn)行編碼運(yùn)算并實(shí)現(xiàn)碼字的顯示。</p><p><b> 3.3 行程編碼</b></p>
97、<p> 行程編碼又稱行程長度編碼(Run Length Encoding, RLE),是一種熵編碼,其編碼原理相當(dāng)簡單,即將具有相同值的連續(xù)串用其串長和一個(gè)代表值來代替,該連續(xù)串就稱為行程,串長稱為行程長度。RLE壓縮編碼尤其適用于計(jì)算機(jī)生成的圖形圖像,對(duì)減少存儲(chǔ)容量很有效果。</p><p><b> 行程編碼基本原理</b></p><p>
98、行程編碼分為定長和不定長編碼兩種。定長編碼是指編碼的行程長度所用的二進(jìn)制位數(shù)固定,而變長形成編碼是指對(duì)不同范圍的行程長度使用不同位數(shù)的二進(jìn)制進(jìn)行編碼。使用變長行程編碼需要增加標(biāo)志位來表明所使用的二進(jìn)制位數(shù)。</p><p> 為了達(dá)到較好的壓縮效果,一般不單獨(dú)采用行程編碼,而是和其他編碼方法結(jié)合使用。例如,在JPEG中,就綜合使用了行程編碼、DCT、量化編碼以及哈夫曼編碼,先對(duì)圖像作分塊處理,再對(duì)這些分塊圖像進(jìn)
99、行離散余弦變換(DCT),對(duì)變換后的頻域數(shù)據(jù)進(jìn)行量化并作Z字形掃描,接著對(duì)掃描結(jié)果作行程編碼,對(duì)行程編碼后的結(jié)果在作哈哈弗曼編碼。</p><p><b> 行程編碼步驟</b></p><p> PCX文件分為文件頭和圖像壓縮數(shù)據(jù)兩個(gè)部分。如果是256色圖像,則還有一個(gè)256色調(diào)色板存于文件尾部。文件頭全長128字節(jié),包含了圖像的大小和顏色以及PCX文件的版本標(biāo)
100、志等信息。其中頭信息的具體結(jié)構(gòu)為:</p><p> typedef struct{</p><p> char manufacturer;</p><p> char version;</p><p> char encoding;</p><p> char bits_per_pixel;</p&g
101、t;<p> WORD xmin,ymin;</p><p> WORD xmax,ymax;</p><p> WORD hres;</p><p> WORD vres;</p><p> char palette[48];</p><p> char reserved;</p>
102、;<p> char colour_planes;</p><p> WORD bytes_per_line;</p><p> WORD palette_type;</p><p> char filler[58];</p><p><b> }PCXHEAD;</b></p>&
103、lt;p> 其中值得注意的是以下幾個(gè)數(shù)據(jù):manufacturer為PCX文件的標(biāo)志,必須為0x0a;xmin為最小的x坐標(biāo),xmax為最大的x坐標(biāo),所以圖像的寬度為xmax-xmin+1,同樣圖像的高度為ymax-ymin+1;bits_per_pixel為每個(gè)編碼行所占的字節(jié)數(shù)。</p><p> 圖像壓縮數(shù)據(jù)緊跟在文件頭后。如果沒有使用調(diào)色板,那么圖像壓縮數(shù)據(jù)存儲(chǔ)的是實(shí)際像素值;否則,存儲(chǔ)的是調(diào)色
104、板的索引值。當(dāng)壓縮數(shù)據(jù)是實(shí)際的像素值時(shí),它們按顏色平面和掃描行存儲(chǔ),即每行先存儲(chǔ)所有R分量,再存儲(chǔ)所有G分量,最后存儲(chǔ)所有B分量,一行數(shù)據(jù)存儲(chǔ)完后,接著存儲(chǔ)下一行數(shù)據(jù)。如果使用了調(diào)色板,則不會(huì)分解為單獨(dú)的顏色平面存儲(chǔ)。</p><p> 下面以256色的PCX文件為例,說明PCX文件中的行程編碼。</p><p> 256色PCX文件中,每個(gè)像素占一個(gè)字節(jié),壓縮數(shù)據(jù)以字節(jié)為單位逐行進(jìn)行
105、編碼,每行填充到偶數(shù)字節(jié)。PCX文件規(guī)定編碼時(shí)的最大行程長度為63,如果行程長度大于63,則必須分多次存儲(chǔ)。對(duì)于長度大于1的行程,編碼時(shí)先存入其行程長度(長度L加上192即0xC0),再存入該行程的代碼值,行程長度和行程的代表值分別占一個(gè)字節(jié)。對(duì)于長度為1的行程,即單個(gè)像素,如果該像素的值小于或等于0xC0,則編碼時(shí)直接存入該像素值,而不存儲(chǔ)長度信息;否則,先存入0xC1,再存入該像素值,這樣做的目的是為了避免該像素值被誤認(rèn)為長度信息。
106、例如,連續(xù)100個(gè)灰度值為0x80的像素,其編碼(以十六進(jìn)制表示)應(yīng)為FF 80 25 80。上面的編碼中出現(xiàn)的FF的長度信息是由63與0xC0相加所得。</p><p><b> 行程編碼特點(diǎn)</b></p><p> 行程編碼比較適合于二值圖像(即圖像的各像素只有兩個(gè)值——黑或者白)的編碼,一般用于量化后出現(xiàn)大量零系數(shù)連續(xù)的場合,用行程來表示連零碼。如果圖像是
107、由很多塊顏色或灰度相同的大面積區(qū)域組成的,那么采用行程編碼可以達(dá)到很高的壓縮比。如果圖像中的數(shù)據(jù)非常分散,則行程編碼不但不能壓縮數(shù)據(jù),反而會(huì)增加圖像文件的大小。極端情況如果圖像中每兩個(gè)相鄰點(diǎn)的顏色都不同,用這種算法不但不能壓縮,反而數(shù)據(jù)量增加一倍。所以現(xiàn)在單純采用行程編碼的壓縮算法用得并不多,PCX文件算是其中的一種。</p><p><b> 3.4 本章小結(jié)</b></p>
108、<p> 本章講述了哈夫曼編碼、香農(nóng)-費(fèi)諾編碼和行程編碼這三種編碼的算法原理、編碼步驟及編碼特點(diǎn)。</p><p> 第4章圖像壓縮技術(shù)編碼方法設(shè)計(jì)</p><p><b> 4.1 哈弗曼編碼</b></p><p> 4.1.1 哈弗曼編碼算法實(shí)現(xiàn)</p><p> 資源文件HuffmanC
109、oding.cpp中主要介紹哈夫曼編碼的算法,首先要從視圖類CDImageProcessView中的OnHuffmancoding函數(shù)中得到0-255各灰度值出現(xiàn)的概率,在下面的算法中要基于這個(gè)概率值進(jìn)行哈夫曼編碼。</p><p> 首先要對(duì)這個(gè)概率值進(jìn)行從小到大的冒泡排序,然后從概率大于0處開始編碼,灰度值較小的編為1,灰度值較大的編為0,再將最小的兩個(gè)灰度值相加,將加后的值與其他灰度值放在一起重新按從小到
110、大排序,重復(fù)以上的步驟直到概率值相加為1。然后計(jì)算該圖像的熵值、平均碼字長度及編碼效率。具體算法如下代碼所示:</p><p> BOOL CHuffmanCoding::OnInitDialog() </p><p><b> {</b></p><p> //調(diào)用默認(rèn)的對(duì)話框初始化函數(shù)</p><p> CD
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于vc++的圖像壓縮編碼技術(shù)的研究及算法實(shí)現(xiàn)
- 圖像壓縮畢業(yè)設(shè)計(jì)--圖像壓縮編碼系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)
- 基于dct的圖像壓縮編碼算法的matlab實(shí)現(xiàn)-畢業(yè)論文
- 基于dct的圖像壓縮編碼算法及其matlab實(shí)現(xiàn)【畢業(yè)論文】
- 靜態(tài)圖像壓縮編碼算法的實(shí)現(xiàn)研究.pdf
- 基于SPIHT算法的圖像壓縮編碼研究.pdf
- 視頻圖像壓縮編碼標(biāo)準(zhǔn)及實(shí)現(xiàn)的算法研究.pdf
- 分形圖像壓縮編碼的算法研究及DSP實(shí)現(xiàn).pdf
- 圖像壓縮編碼算法研究.pdf
- 基于dct的圖像壓縮編碼算法及其matlab實(shí)現(xiàn)【畢業(yè)論文+文獻(xiàn)綜述+開題報(bào)告】
- 票據(jù)圖像壓縮編碼算法的研究.pdf
- 畢業(yè)設(shè)計(jì)---用vc++實(shí)現(xiàn)圖像的離散余弦變換
- 基于小波的圖像壓縮編碼算法研究.pdf
- 基于dct的圖像壓縮編碼算法及其matlab實(shí)現(xiàn)【文獻(xiàn)綜述】
- 基于圖像的壓縮編碼研究.pdf
- 基于dct的圖像壓縮編碼算法及其matlab實(shí)現(xiàn)【畢業(yè)論文+文獻(xiàn)綜述+開題報(bào)告】
- 基于稀疏分解的圖像壓縮編碼算法研究.pdf
- 遠(yuǎn)程醫(yī)療視頻圖像壓縮編碼算法研究及實(shí)現(xiàn).pdf
- 紅外圖像壓縮編碼算法研究.pdf
- 基于vc++的點(diǎn)歌管理系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)畢業(yè)設(shè)計(jì)(論文)
評(píng)論
0/150
提交評(píng)論