畢業(yè)設(shè)計(論文)基于vc++的圖像壓縮編碼技術(shù)的研究及算法實現(xiàn)_第1頁
已閱讀1頁,還剩56頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  基于VC++的圖像壓縮編碼技術(shù)的研究及算法實現(xiàn)</p><p><b>  摘要</b></p><p>  長期以來,人類獲取到的信息其80%來源于圖像媒體,15%來源于語音。所以,人們在自然界感受到的最主要的信息是視覺信息,這說明圖像是人們生活中信息交流最為重要的載體,也是蘊含信息量最大的媒體。由于未經(jīng)處理的圖像信息量非常大,大力研究和開發(fā)圖

2、像壓縮編碼技術(shù)就非常重要。</p><p>  圖像之所以可以被壓縮,其根本原因就在于圖像數(shù)據(jù)具有較多的信息冗余。各個像素點之間不論在行的方向還是在列的方向上都具有很大的相關(guān)性,因而整個圖像數(shù)據(jù)就具有相當大的冗余度,也就有相當?shù)膲嚎s潛力。再者,圖像品質(zhì)的評價取決于人眼,而人眼由于其視覺特性對圖像的細微差別還是很難分辨的。因此圖像數(shù)據(jù)還具有一定的視覺冗余,也就是說,在對圖像數(shù)據(jù)進行壓縮時,可以允許一定程度的失真。&

3、lt;/p><p>  本論文主要是通過哈弗曼編碼、香農(nóng)-費諾編碼和行程編碼三種方法對同一幅圖像進行壓縮,對所得到的圖像壓縮比進行比較,最后得出每種壓縮方法的優(yōu)缺點。本論文首先介紹了圖像壓縮編碼技術(shù)的概念、分類、特點、發(fā)展方向及應用等基礎(chǔ)知識,介紹了開發(fā)工具VC++的特點,較詳細的說明了對位圖圖像進行處理的基礎(chǔ)知識,然后分別對三種編碼方法的原理和算法進行了分析,最后通過整體程序的運行結(jié)果得出結(jié)論。</p>

4、<p>  關(guān)鍵詞:圖像壓縮;哈夫曼編碼;香農(nóng)-費諾編碼;行程編碼</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++軟件平臺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è)計目標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 哈弗曼編碼特點15</p><p>  3.2 香農(nóng)-費諾編碼16</p><p>  3

18、.2.1 香農(nóng)-費諾編碼基本原理16</p><p>  3.2.2 香農(nóng)-費諾編碼步驟16</p><p>  3.2.3 香農(nóng)-費諾編碼特點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行程編碼特點19</p><p>  3.4 本章小結(jié)19</p><p>  第4章圖像壓縮技術(shù)編碼方法設(shè)計19</p><p>  4.1 哈弗曼編碼19</p><p>  4.1.1 哈弗曼編碼算法實現(xiàn)20</p><p>  4.1.2 視圖類On Hu

20、ffman coding()函數(shù)25</p><p>  4.2 香農(nóng)-費諾編碼28</p><p>  4.2.1 香農(nóng)-費諾編碼算法實現(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 行程編碼算法實現(xiàn)38</p><p>  4.3.2 視圖類處理函數(shù)OnRleCoding()43</p><p>  4.4 本章小結(jié)45</p><p>  第5章圖像壓縮編碼的實現(xiàn)45</p><p>  5.1 圖像壓縮編碼結(jié)果45</p><p>  5.1.1 哈弗曼編碼結(jié)果46</

22、p><p>  5.1.2 香農(nóng)-費諾編碼結(jié)果46</p><p>  5.1.3 行程編碼結(jié)果47</p><p>  5.2 本章小結(jié)48</p><p><b>  結(jié)論49</b></p><p><b>  參考文獻51</b></p><

23、p>  附錄錯誤!未定義書簽。</p><p>  攻讀學位期間發(fā)表論文與研究成果清單錯誤!未定義書簽。</p><p>  致謝錯誤!未定義書簽。</p><p><b>  第1章 緒論</b></p><p>  1.1 圖像壓縮編碼技術(shù)研究目的和意義</p><p>  隨著現(xiàn)

24、代通信技術(shù)、計算機技術(shù)、網(wǎng)絡技術(shù)和信息處理技術(shù)的發(fā)展,圖像信息的處理、存儲和傳輸在社會生活中的作用越來越大,人們對接受圖像信息的要求越來越迫切,圖像通信將是通信事業(yè)發(fā)展中面臨的最大挑戰(zhàn),也是未來通信領(lǐng)域的市場熱點。如何將信息以更加簡潔的方式表達,如何更加準確、快速的傳輸信息,是信息高速發(fā)展的時代擺在人們面前的熱點問題。圖像通常來源于自然景物,其原始的形態(tài)是連續(xù)變化的模擬量。模擬信號不易于存儲和傳輸,而且在存儲和傳輸?shù)倪^程中易引入噪聲,導

25、致失真,所以一般將模擬信號進行采樣和量化,進而以數(shù)字化的形式進行存儲和傳輸。當圖像以數(shù)字形式進行處理和傳輸時,就可以與計算機技術(shù)相結(jié)合,具有質(zhì)量好、成本低、小型化和易實現(xiàn)等優(yōu)點,因此,將圖像進行數(shù)字化傳輸已成為當前圖像通信領(lǐng)域的主要技術(shù)。</p><p>  然而圖像經(jīng)過采樣和量化轉(zhuǎn)換成數(shù)字信號后,其數(shù)據(jù)量的巨大成為擺在眼前的非常棘手的問題。盡管隨著科學技術(shù)的發(fā)展,海量存儲技術(shù)以及數(shù)字通信系統(tǒng)的性能發(fā)展迅猛,但高

26、清晰度數(shù)字圖像數(shù)據(jù)量對數(shù)據(jù)存儲的能力和數(shù)據(jù)傳輸帶寬的需求仍然超出了現(xiàn)有技術(shù)的能力所及。為了使通信成為可能并盡可能地降低通信費用,對圖像信號進行壓縮編碼是必需的。人們通過對圖像數(shù)據(jù)進行大量統(tǒng)計和視覺感受的研究表明,圖像的相鄰像素之間、相鄰行之間或者相鄰幀之間都存在著很強的相關(guān)性,即圖像信號存在著空間冗余、時間冗余、結(jié)構(gòu)冗余、視覺冗余和知識冗余等冗余度,利用某種編碼方法在一定程度上消除這些相關(guān)性或冗余,就可以實現(xiàn)圖像數(shù)據(jù)的壓縮編碼。<

27、/p><p>  我們每天接收的外部信息中,大部分內(nèi)容是通過聽覺和視覺系統(tǒng)接收的。據(jù)分析,在人類的感官所接收的外部信息中,通過耳朵接收的聽覺信息約占總信息量的 20%左右,而通過人眼的視覺接收的信息則高達 60%以上。由于圖像信息具有信息量大、直觀性強的特點,而且特別適合人們在信息交流中所需要的直接、親切等生理和心理的要求特點,圖像信息在通信中的地位顯得尤為重要。</p><p>  簡單地說

28、,如果沒有圖像數(shù)據(jù)壓縮編碼技術(shù),在720*576的分辨率下,一張C卜RMO光盤僅能存儲三十多秒未經(jīng)壓縮的視頻節(jié)目;如果沒有圖像數(shù)據(jù)壓縮編碼技術(shù),從Internet上下載一部電影也許要花半年的時間。這樣巨大的數(shù)據(jù)量,成為了存儲、傳輸、通訊的瓶頸。因此,研究高效的圖像數(shù)據(jù)壓縮編碼方法,即怎樣處理、組織圖像數(shù)據(jù),在應用領(lǐng)域中的作用將是至關(guān)重要的。</p><p>  總之,大數(shù)據(jù)量的圖像信息會給存儲器存儲容量、通信干線

29、信道寬帶以及計算處理速度帶來巨大的壓力。單純靠增加存儲容量,和提高信道帶寬以及計算機的處理速度等方法解決這個問題是不現(xiàn)實的。因此,在圖像數(shù)據(jù)的傳輸和存儲中,壓縮編碼勢在必行。</p><p>  1.2 圖像壓縮編碼技術(shù)發(fā)展現(xiàn)狀</p><p>  自20世紀80年代以來,無論是從社會的需要還是從技術(shù)的發(fā)展來看,圖像編碼技術(shù)已經(jīng)逐步進入了很大范圍的應用階段。但由于沒有統(tǒng)一的壓縮算法和碼流格

30、式,在進行圖像信息的交流中遇到了很多困難。</p><p>  壓縮的理論基礎(chǔ)是信息論。從信息論的角度來看,壓縮就是去掉信息中的冗余,即保留不確定的信息,去掉確定的信息(可推知的),也就是用一種更接近信息本質(zhì)的東西信息量來代替原有冗余的描述。</p><p>  圖像壓縮技術(shù)經(jīng)過幾十年的發(fā)展,現(xiàn)在來說還是比較成熟的。圖像數(shù)據(jù)文件的格式有很多,如GIF、TIFF、PCX、TGA、BMP、JP

31、G等。其中BMP圖像對于原始的圖像數(shù)據(jù)不壓縮或壓縮比例很小。JPEG由于有較高的壓縮比,被廣泛地應用于多媒體和網(wǎng)絡程序中,HTML語法中選用的圖像格式之一就是JPEG(另一種是GIF), 目前網(wǎng)站上百分之八十的圖像都是采用JPEG的壓縮標準。美國國防部及情報部門亦采用此標準為各部門間交流圖像資料的標準格式。JPEG全名為Joint Photographic Experts Group,它是一個在國際標準組織(ISO)下從事靜態(tài)影像壓縮標

32、準制定的委員會,它和國際電信同盟(ITU)下屬的國際電話與電報顧問委員會(CCITT)及國際電工委員會(IEC)合作,共同制定出了第一套國標靜態(tài)影像壓縮標準:ISO/IEC 10918-1,也被稱作CCITT Rec.T.81,就是俗稱的JPEG,它被公布于1992年9月份。</p><p>  人類社會已經(jīng)進入信息時代了,人們每天都可以通過各種手段(如PDA、網(wǎng)絡、電視、廣播等)獲得大量的信息,而信息的本質(zhì),就

33、要求交流和傳播。在大量信息給人們生活增加了更多色彩的同時,隨之而來的問題是如何利用有限的傳輸和儲存資源來傳輸和保存更多的信息,而圖像就是信息的一種,這就要用到圖像壓縮的方法。具體的說,圖像壓縮的意義有以下幾個方面:首先是為了減少存儲容量,以利圖像的保存;其次是有利于圖像傳輸;第三是便于特征提取,以利于計算機模式識別。</p><p>  1.3 論文主要研究內(nèi)容</p><p>  本論文

34、主要通過哈弗曼編碼、香農(nóng)-費諾編碼和行程編碼三種方法對同一幅圖像進行壓縮,對所得到的圖像壓縮比進行比較,最后得出每種壓縮方法的優(yōu)缺點。首先介紹了圖像處理的概念、分類、特點、發(fā)展方向及應用等基礎(chǔ)知識,介紹了開發(fā)工具VC++的特點,較詳細的說明了對位圖圖像進行處理的基礎(chǔ)知識,然后分別對三種編碼方法的原理和算法進行了分析,最后通過整體程序的運行結(jié)果得出結(jié)論。</p><p>  1.4 論文框架組織結(jié)構(gòu)</p&g

35、t;<p>  本論文框架結(jié)構(gòu)如下:</p><p><b>  第一章:緒論</b></p><p>  首先介紹了圖像壓縮編碼技術(shù)的研究背景及意義,分析了進行圖像壓縮編碼的必要性,其次介紹了圖像壓縮編碼技術(shù)目前的研究趨勢,最后列出了論文的主要研究內(nèi)容及本論文的框架機構(gòu)。</p><p>  第二章:圖像壓縮編碼技術(shù)基礎(chǔ)及概念&

36、lt;/p><p>  對圖像壓縮編碼技術(shù)的概念和數(shù)字圖像的基本概念做了簡要介紹,對最新的圖像壓縮算法進行了闡述,介紹了VC++軟件平臺的特性及結(jié)構(gòu)。</p><p>  第三章:圖像壓縮編碼技術(shù)的算法研究</p><p>  本章詳細介紹了哈弗曼編碼、香農(nóng)-費諾編碼和行程編碼三種圖像壓縮編碼技術(shù)的基本原理及具體算法步驟。</p><p>  第

37、四章:圖像壓縮編碼技術(shù)的算法實現(xiàn)</p><p>  通過哈弗曼編碼、香農(nóng)-費諾編碼和行程編碼三種方法對同一幅圖像進行壓縮實現(xiàn),對所得到的圖像壓縮比進行比較,最后得出每種壓縮方法的優(yōu)缺點。</p><p><b>  第五章:系統(tǒng)測試</b></p><p>  介紹了本設(shè)計系統(tǒng)的測試方法、測試作用和測試環(huán)境,對部分功能接口進行詳細測試。<

38、;/p><p>  最后,對全文進行了總結(jié),并對指導教師表示感謝。</p><p>  第2章圖像壓縮編碼技術(shù)基礎(chǔ)及概念</p><p>  2.1圖像壓縮和數(shù)據(jù)冗余</p><p>  信息量和數(shù)據(jù)量是兩個相互聯(lián)系而又不相同的兩個概念。一定的信息量可以用不同的數(shù)據(jù)量來表示。對于一定的信息,通過某些方法減少表示這些信息的數(shù)據(jù)量就稱為數(shù)據(jù)壓縮。圖

39、像數(shù)據(jù)壓縮就是一種典型的數(shù)據(jù)壓縮,其目標就是減少表示圖像所需的數(shù)據(jù)量。</p><p>  2.1.1 圖像壓縮的原理</p><p>  對圖像數(shù)據(jù)的壓縮可通過對圖像的編解碼來實現(xiàn)。這個過程如圖 2-1 所示,它實際上包含以下兩個步驟:</p><p>  (1)通過對原始圖像的編碼以達到減少數(shù)據(jù)量的目的(壓縮過程),所獲得的編碼結(jié)果并不一定是圖像形式,但可用于存

40、儲和傳輸。</p><p>  (2)為了實際應用的需要對編碼結(jié)果進行解碼,得到解碼圖像(恢復了圖像形式)以使用。</p><p>  2.1.2 數(shù)據(jù)冗余的分類</p><p>  由于圖像數(shù)據(jù)本身的冗余性和相關(guān)性,使得將一個大的圖像數(shù)據(jù)文件轉(zhuǎn)換成較小的圖像數(shù)據(jù)文件成為可能,圖像數(shù)據(jù)壓縮就是去掉信號數(shù)據(jù)的冗余性。一般來說,圖像數(shù)據(jù)中存在以下幾種冗余。</p&

41、gt;<p>  (1)空間冗余。這是靜態(tài)圖像存在的最主要的一種數(shù)據(jù)冗余。一幅圖像記錄了畫面上可見物體的顏色,同一物體表面上各采樣點的顏色之間常常存在著空間相關(guān)性,即各采樣點的顏色像素值可以由相鄰像素的值預測出來,從而產(chǎn)生了空間冗余。</p><p> ?。?)結(jié)構(gòu)冗余。在某些場景或圖像中,存在著很強的紋理結(jié)構(gòu)或圖像分布模式,稱為結(jié)構(gòu)冗余。</p><p> ?。?)視覺冗余

42、。人類的視覺系統(tǒng)對于圖像場的敏感性是非均勻和非線性的,即眼睛并不是對所有信息都有相同的敏感度。然而,在記錄原始圖像數(shù)據(jù)時,往往假定視覺系統(tǒng)是均勻的和線性的,對視覺敏感和不敏感的部分同等對待,從而產(chǎn)生了比理想壓縮編碼更多的數(shù)據(jù),這就是視覺冗余。</p><p> ?。?)知識冗余。有許多圖像的理解與某些知識有相當大的相關(guān)性。例如,人臉的圖像有固定的結(jié)構(gòu)。比如說嘴的上方有鼻子、鼻子的上方有眼睛,鼻子位于正臉圖像的中線

43、上,等等。</p><p> ?。?)時間冗余。是序列圖像和語音數(shù)據(jù)中所經(jīng)常包含的冗余。圖像序列中的兩幅相鄰的圖像,后一幅圖像與前一幅圖像之間有較大的相關(guān)性,這反映為時間冗余。同理,在語言中,由于人的說話時發(fā)音的音頻是一連續(xù)的漸變過程,因而也存在時間冗余。</p><p>  (6)信息熵冗余。若圖像中平均每個像素所用的比特數(shù)大于該圖像的信息熵,則該圖像存在冗余,叫做信息熵冗余。信息熵冗余

44、又叫編碼冗余。</p><p>  2.2 圖像壓縮編碼技術(shù)主要方法</p><p>  從不同的角度出發(fā)有不同的分類,比如從信息論角度出發(fā),圖像數(shù)據(jù)的壓縮可以分為無損壓縮(無失真壓縮)和有損壓縮(有失真壓縮)。</p><p>  無損壓縮編碼是建立在香農(nóng)信息論基礎(chǔ)之上的,以經(jīng)典集合論為工具。用概率統(tǒng)計模型來描述信源,其壓縮思想基于數(shù)據(jù)統(tǒng)計,因此只能去除數(shù)據(jù)冗余,

45、屬于底層壓縮編碼的范疇。其壓縮過程是可逆的,在壓縮和解壓縮的過程中沒有信息量的損失,從壓縮后的圖像能夠完全恢復到原來的圖像。目前技術(shù)提供的壓縮率一般在2-10之間。無損壓縮的壓縮效率較低,但是可以分毫不差地重現(xiàn)原始數(shù)據(jù)。例如Huffman編碼、算術(shù)編碼、行程編碼、LZW編碼。</p><p>  有損壓縮是把對最終應用確實不需要的原始數(shù)據(jù)丟棄的一種壓縮技術(shù)。在壓縮過程中可以丟棄的東西包括對人眼感知不需要的東西,比

46、如不必要的尖銳邊緣或者很高的分辨率等,其壓縮過程是不可逆的。因此這樣的壓縮技術(shù)不應該用在關(guān)鍵性的應用中,比如醫(yī)學圖像。但是,在網(wǎng)絡和商業(yè)電視等應用中卻很有用,因為它能達到很高的壓縮比。例如預測編碼、正交變換編碼、子帶編碼。</p><p>  2.2.1 哈弗曼編碼</p><p>  哈弗曼編碼(Huffinan encoding)是常用的壓縮方法之一,它是Huffinan在研究文本文件

47、的壓縮時提出來的。它是一種無損壓縮方法,通過設(shè)計合理的代碼取代數(shù)據(jù)來實現(xiàn)的。哈弗曼編碼的基本思路是用變長的碼字來使冗余量達到最小,出現(xiàn)頻率越高的像素值,其對應的編碼長度越短,反之出現(xiàn)頻率低的像素值,對應的編碼長度越長。這樣就可以達到用盡可能少的代碼表示信源數(shù)據(jù)的目的。</p><p>  哈弗曼編碼的實現(xiàn)步驟如下:</p><p> ?。?)將q個信源符號S按照概率分布的大小,以遞減次序排

48、列,設(shè)</p><p>  P1≥P2≥P3≥…Pq</p><p> ?。?)將兩個概率最小的信源符號賦以1和0,并將這兩個符號合并成一個新符號,并將概率相加合并成新符號的概率,得到一個新的信源S1,包含q-1個符號。</p><p> ?。?)對少一個信源符號的信源凡,重新排隊;重復步驟(2)直至概率和達到1為止。</p><p>  (

49、4)從最后一級開始,依照編碼路徑由后向前返回,就得到各個信源符號所對應的碼元序列,即是信源符號相應的碼字。</p><p>  理論研究表明,哈弗曼編碼是一種接近于信源嫡的編碼方法。但是哈弗曼編碼也存在不足,一是它必須精確地統(tǒng)計原始文件中每個值的出現(xiàn)概率,如果沒有這個精確統(tǒng)計,壓縮的效果會打折扣,甚至達不到預期的壓縮效果。而在實際應用中,由于很難事先得知信源數(shù)據(jù)中各符號發(fā)生的概率,對那些要求實時編碼的工作帶來很大

50、困難。其二它對位的增刪比較敏感。由于哈弗曼編碼的所有碼字是合在一起的,沒有分位,所以如果丟失一位或者增加噪聲都會使解碼結(jié)果面目全非。</p><p>  2.2.2 方塊編碼</p><p>  將一副二值圖像分成大小為的子塊,一共有種不同排列,種不同的子塊圖案。然后按每子塊內(nèi)像素的不同排列所出現(xiàn)的概率不同,采用哈弗曼編碼為這些子塊分配不同長度的碼字,概率高的分配短碼字,不常出現(xiàn)的分配長碼

51、,使平均碼長達到最短。塊編碼最先就是用在二值圖像上,如傳真圖像,后來推廣到灰度圖像。由于設(shè)備簡單,可用于實時處理或傳輸系統(tǒng)中,因此引起人們越來越廣泛的重視。</p><p>  但當方塊尺寸大于3x3時,符合集合將迅速增大,致使霍夫曼編碼的碼表過于龐大而難以實際應用,因此就提出了降低復雜度的次最佳編碼方法。全白的方塊最常出現(xiàn),因此分配最短的碼字“0”,而其它含有黑色像素的排列均用直接編碼,如圖2.1所示(空白方格

52、表示白像素)。</p><p><b>  圖2.1 方塊編碼</b></p><p>  在實際中,大多數(shù)二值圖像都是白色背景占大部分,黑色像素只是占圖像像素總數(shù)的很少一部分,因此分解的子快中像素為全白的概率遠大于其他情況,如果跳過這些白色區(qū)域,只傳輸黑色像素信息,就可使得每個像素的平均比特下降。跳白塊(WBS)編碼正式基于這一思想提出來的。</p>

53、<p>  跳白塊(White Block Skipping)編碼是利用二值圖像以白色像素為主、黑色像素相對較少這一特點而提出的編碼方法。編碼方法非常簡單,首先將二值圖像的各掃描行分成若干塊仍lock),每塊包括N個像素,其中像素全為白色像素的塊,稱為全白塊 (White Block),編碼時用1比特碼字“0”表示,這是因為這種全白塊在所有的塊中出現(xiàn)的概率最大,因而分配最短的一個碼字。</p><p>

54、  對于至少含有一個黑像素的非全白塊,用N+1比特碼字表示:第一個比特為“l(fā)”,稱為前綴碼;其余N比特采用直接編碼,白像素為“0”,黑像素為“l(fā)”(反過來亦可)。注意,全白塊對應的1比特“0”也可看作是前綴碼,只不過此時全白塊的編碼看成只包括前綴碼。前綴碼的作用是使解碼器在收到一系列的比特流時能夠正確的判別每個碼字。使用這種編碼后,原圖像平均每個像素的比特數(shù),即比特率縱為</p><p>  其中,是某塊為全白的

55、概率,通過對碼字的統(tǒng)計得到。越小,壓縮性能越好。</p><p>  解碼時,每收到一個“1”,則判斷其后的N比特為直接編碼,而在該N比特以外的“0”則可判斷為全白塊,恢復為N個“0”,進而唯一地恢復原像素序列,從而完成圖像的重建。</p><p>  一維WBS可以推廣到二維,整個圖像分成若干大小為 MxN像素的塊,某塊為全白像素時用1比特“0”表示;非全白塊用1+MN個比特碼字表示:一

56、個前綴比特“1”,其余MN比特采用直接編碼。</p><p><b>  2.2.3行程編碼</b></p><p>  行程長度編碼,又叫做游程編碼(Run-Length Coding, RLC),它的基本思想是,當二值圖像按照從左到右的掃描順序去記錄每一行時,總會交替出現(xiàn)出現(xiàn)一定數(shù)量的連續(xù)白點和連續(xù)黑點,如圖2.2所示。通常把具有相同灰度值的相鄰像素組成的序列成為

57、一個游程,游程中像素的個數(shù)成為游程長度,簡稱游長。游程編碼就是將這些不同的游程長度構(gòu)成的字符串用其數(shù)值和游長數(shù)值來表示。</p><p>  對圖像進行編碼時,首先對圖像進行掃描,如果有連續(xù)的L個像素具有相同的灰度值G,則對其作行程編碼后,只需傳送一個數(shù)組(G, L)就可代替?zhèn)魉瓦@一串像素的灰度值。圖中可寫成白4、黑3、白5、黑2、白3(其含義是4個白、3個黑、5個白、2個黑、3個白)。然后,再對游程進行變長編碼

58、,根據(jù)出現(xiàn)概率的不同分配不同長度的碼字。很明顯,游程長度越長,游程編碼效率越高,因而特別適用于灰度等級少,灰度值變化小的二值圖像。</p><p>  圖2.2 連續(xù)白點和連續(xù)黑點</p><p>  游程編碼主要應用在ITU(CCITT)為傳真制定的文件傳真三類機G3-維標準中,在該標準中游長的霍夫曼編碼分為行程碼和終止碼兩種,對不同長度的黑游程和白游程采用不同的編碼方式,如圖2.3所示

59、。</p><p><b>  圖2.3 游程編碼</b></p><p>  2.2.4 變換編碼</p><p>  將原來在空間域上描述的圖像信號,通過數(shù)字變換變換到變換域中。我們常常會發(fā)現(xiàn),各變換系數(shù)之問的相關(guān)性明顯下降,能量較為集中,這樣可以根據(jù)壓縮比的要求,在滿足一定失真度要求的情況下進行有損壓縮編碼。</p><

60、;p>  變換編碼的過程是先對每個子像塊進行正交變換,生成變換域中的系數(shù)知陣,然后進行變換、量化、編碼,再存儲或者傳輸。典型的正交變換有離散傅里葉變換(簡稱DFT)、離散余弦變換(簡稱DCT),K-L變換和沃爾什變換等。變換編碼之所以在圖像信號處理中得到廣泛應用,主要是它具有如下特性:</p><p> ?。?)能量集中性與保持特性。變換編碼方法最重要的特點是使能量主要集中于低頻區(qū)域,使大多數(shù)變換系數(shù)為0或

61、者很小的數(shù)。在編碼時,可以舍棄能量較小的系數(shù),或者分配很少的比特,從而實現(xiàn)數(shù)據(jù)的壓縮。</p><p> ?。?)去相關(guān)性。通過變換可以使相關(guān)的空間樣值變?yōu)椴幌嚓P(guān)或者弱相關(guān)的變換系數(shù),即變換編碼能夠消除存在相關(guān)性中的冗余度。</p><p>  2.2.5 位平面編碼</p><p>  對1幅用多個比特表示其灰度值的圖像來說,其中的每個比特可看作表示了個二值的平面

62、,也稱位面,如圖2.4所示。</p><p><b>  圖2.4 位平面</b></p><p>  位平面編碼是一種將多灰度值圖象分解成一系列二值圖,然后對每幅二值圖再用二元壓縮方法進行壓縮的技術(shù)。這類方法主要有兩個步驟:位平面分解和位平面編碼。將圖像所有像素的不同比特位進行分解,就構(gòu)成了圖像八個不同的位平面,如圖2.5所示。對于八位灰度圖像I,其位平面分解可表示

63、為:</p><p>  由圖2.4中可以看出,隨著位平面從高位到低位(即從位平面7到位平面0),位平面圖像特征逐漸變得復雜,位平面圖像的隨機紋理逐漸增加,圖像輪廓逐漸變得模糊直至消失。到位平面0,基本上就已無法看到原圖信息,這恰恰表明,不同位平面的信息對數(shù)字圖像的貢獻是不同的,較高位平而(簡稱“重要位平面”)反應原始圖像的主要內(nèi)容,而較低位平面所攜帶的原始信號能量極少,即忽略較低位平面對原始圖像質(zhì)量沒有太大的影

64、響。也就是說我們只需要提取圖像的最高5個位平面(即重要位平面)就足以表達圖像內(nèi)容。</p><p>  Visual C++6.0介紹</p><p>  采用的是Visual C++ 6.0平臺編程實現(xiàn),建立的項目名稱為RWJpegExp。在此應用程序中,我們可以打開和存儲任意的BMP文件或JPEG文件,并能實現(xiàn)兩者的格式轉(zhuǎn)換。即可以將BMP文件壓縮編碼為JPEG文件,也可以將JPEG文

65、件解碼為BMP文件。</p><p>  Visual C++軟件平臺</p><p>  Visual C++首先是一種程序設(shè)計語言,同時也是一個集成開發(fā)工具,它提供了自動生成軟件代碼和可視化資源編輯的功能。Visual C++是Windows環(huán)境下最主要的面向?qū)ο髴瞄_發(fā)系統(tǒng)之一,不僅是C++語言的集成開發(fā)環(huán)境,而且與Win32緊密相連。所以,使用Visual C++可以靈活地開發(fā)從底

66、層軟件到上層直接面向用戶的軟件。</p><p>  進入20世紀90年代以來,隨著多媒體技術(shù)和圖形圖像技術(shù)的不斷發(fā)展,可視化技術(shù)得到廣泛的重視,越來越多的計算機專業(yè)人員和非專業(yè)人員都開始研究并應用可視化技術(shù)。所謂可視化技術(shù),一般是指軟件開發(fā)階段的可視化和對計算機圖像技術(shù)和方法的應用。Visual C++是一個很好的可視化編程工具,使用Visual C++環(huán)境來開發(fā)基于Windows的應用程序大大縮短了開發(fā)時間,

67、而且它的界面更為友好,便于程序員操作。在沒有可視化開發(fā)工具之前,程序員要花好幾個月的時間來完成Windows程序的界面開發(fā),而現(xiàn)在只需較少的時間就可以完成。</p><p><b>  VC++技術(shù)特性</b></p><p>  面向?qū)ο蟪绦蛟O(shè)計(Object-Oriented Programming 簡稱OOP)方法已出現(xiàn)近三十年,90年代已成為程序設(shè)計的主流方向

68、,面向?qū)ο蟪绦蛟O(shè)計語言是現(xiàn)代程序開發(fā)的主要工具,如C++、Java是現(xiàn)代程序員必須掌握的編程語言。</p><p>  面向?qū)ο蟪绦蛟O(shè)計方法主要以數(shù)據(jù)為中心,代碼是圍繞著需要處理的數(shù)據(jù)而設(shè)計的,面向?qū)ο蟪绦蛟O(shè)計語言具有如下的主要特征:</p><p><b> ?。?)對象的類描述</b></p><p> ?。?)封裝性(Encapsulat

69、ion)</p><p> ?。?)多態(tài)性(Polymorphism)</p><p> ?。?)繼承性(Inheritance)</p><p>  C++是運用最廣泛的面向?qū)ο蟪绦蛟O(shè)計語言,Visual C++是一個具有集成、交互和可視化編程的C++實現(xiàn),具備上述的所有OOP特征。</p><p>  編寫Visual C++程序?qū)嶋H上就

70、是一個構(gòu)造類和把類實例化的過程。由于Windows 95/98/NT 是PC平臺中應用最廣泛的操作系統(tǒng)(Microsoft力圖用一個叫做Win32的標準的32位應用程序接口來作為對這幾個操作系統(tǒng)的共同開發(fā)接口,所以經(jīng)常采用Win32來代表Microsoft的32位Windows操作系統(tǒng)),Visual C++主要針對Win32的應用程序開發(fā)。</p><p>  2.3 數(shù)字圖像基本概念</p>&

71、lt;p>  數(shù)字圖像是連續(xù)圖像的一種近似表示,通常用由采樣點的值所組成的矩陣來表示:</p><p>  每一個采樣單元叫做一個像素(pixel),上式(2.1)中,M、N分別為數(shù)字圖像在橫(行)、縱(列)方向上的像素總數(shù)。在計算機內(nèi)通常用二維數(shù)組來表示數(shù)字圖像的矩陣,把像素按不同的方式進行組織或存儲,就得到不同的圖像格式,把圖像數(shù)據(jù)存成文件就得到圖像文件。圖像文件按其數(shù)字圖像格式的不同一般具有不同的擴展

72、名。最常見的圖像格式是位圖格式,其文件名以BMP為擴展名。圖像數(shù)字化的精度包括兩部分,即分辨率和顏色深度。分辨率指圖像數(shù)字化的空間精細度,有顯示分辨率和圖像分辨率兩種。</p><p>  數(shù)字圖像的顏色深度表示每一像素的顏色值所占的二進制位數(shù)。顏色深度越大則能表示的顏色數(shù)目越多。顏色深度的不同,就產(chǎn)生不同種類的圖像文件,在計算機中常使用圖像文件的類型有單色圖像、灰度圖像、偽彩色圖像和24位真彩色圖像。它們之間的

73、關(guān)系取決于數(shù)字圖像采用的顏色表示法。常用的顏色表示法有RGB、CMYK、HSL和YUV等。</p><p>  數(shù)字圖像的數(shù)據(jù)容量非常龐大,如以24位真彩色表示像素為640*480的數(shù)字圖像,所需要的數(shù)據(jù)量為900KB,所以需要對數(shù)字圖像進行數(shù)據(jù)壓縮。數(shù)據(jù)壓縮包括數(shù)據(jù)壓縮編碼和壓縮數(shù)據(jù)解碼兩個過程。</p><p>  圖像壓縮的基本原則包括:</p><p>  

74、(1)編碼重復壓縮:按照編碼重復的概率大小做壓縮編碼,壓縮重復概率大的編碼,可以節(jié)省一些存儲空間。</p><p> ?。?)像素間重復壓縮:前后像素間存在的某種程度的相關(guān),如存在相同的背景圖像等,簡化編碼以節(jié)省空間。</p><p> ?。?)視覺重復壓縮:由于入眼的生理構(gòu)造,就算在像素之間少了幾個像素,眼睛也看不出來。但是,只是在某些情況中才可以允許這種失真性較大的應用。</p&

75、gt;<p>  主要的數(shù)字圖像壓縮標準是JPEG(Joint Picture Expert Group)標準。</p><p>  數(shù)字圖像的采集設(shè)備主要有掃描儀、數(shù)字相機和圖像采集卡等。通過對數(shù)字圖像進行一定的處理,即圖像處理,可在一定程度上改善圖像的分辨質(zhì)量和形成特殊的視覺效果。數(shù)字圖像處理由數(shù)字圖像處理系統(tǒng)完成,其結(jié)構(gòu)主要包括圖像采集系統(tǒng)、計算機圖像處理系統(tǒng)和圖像輸出系統(tǒng)三部分。</p

76、><p>  2.4 與設(shè)備無關(guān)的位圖(DIB) </p><p>  與設(shè)備無關(guān)位圖(DIB)可以在不同的機器或系統(tǒng)中顯示位圖所固有的顏色。DIB是一種外部的位圖格式,經(jīng)常存儲以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ù)據(jù)(Image Data)。</p><p>  2.6 CDIB類庫的建立</p><p>  大多數(shù)圖像處理都是基于與設(shè)備無關(guān)位圖(DIB)來進行討論的,而MFC中沒有處理DIB位圖的類,所以需要定義一個處理DIB位圖

78、的專用類CDib類,在其中封裝必要而有效的DIB數(shù)據(jù)成員和處理函數(shù)。</p><p>  2.6.1 設(shè)計目標</p><p>  用面向?qū)ο蟮姆椒ㄌ幚砦粓D的核心是設(shè)計一個處理DIB的類,稱之為CDIB類。</p><p><b> ?。?)功能</b></p><p>  CDIB類的基本操作功能應包括DIB文件的讀、

79、寫操作;提供位圖寬度、高度、顏色數(shù)目等位圖相關(guān)信息;提供有關(guān)位圖占據(jù)內(nèi)存空間的信息,如圖像數(shù)據(jù)區(qū)首地址、顏色表首地址、位圖信息結(jié)構(gòu)首地址等信息。</p><p><b> ?。?)父類</b></p><p>  由于MFC中有一個支持DDB操作的CBitmap類,因此很直觀的想法是以CBitmap類為父類派生出CDIB類。但是從長遠考慮,這樣做沒有什么好處。首先,C

80、Bitmap類中沒有處理DIB的功能,因此CDIB類不能從中繼承任何可用的功能。其次,CBitmap是從CGdiObject中派生來的,CBitmap類以及它從CGdiObject類繼承來的數(shù)據(jù)成員和功能函數(shù)對CDIB類來說都是不合適的,多余的。此外,CBitmap類沒有提供有效的文件操作機制。而DIB主要是一種“外部”位圖,即它主要以文件形式進行存儲和交換,所以CDIB類應該能很好地處理文件操作。</p><p&g

81、t;  MFC中的CObject類是MFC中其他大多數(shù)類的根類和基類。它不但提供許多有用的特性,還包括對文件串行化的支持,運行時的類信息和對象診斷的輸出等。如果從CObject類派生類,則可繼承該類的這些特性。另外,CObject類具有最低限度的成員數(shù)據(jù)和函數(shù),因此采用CObject類作為父類是很合理的。</p><p><b> ?。?)數(shù)據(jù)封裝</b></p><p&

82、gt;  面向?qū)ο蠓椒ǖ囊粋€重要特征就是數(shù)據(jù)封裝,即將類的成員數(shù)據(jù)隱藏在類中,外界只能通過類的成員函數(shù)來操作類的成員數(shù)據(jù)。這是面向?qū)ο蠓椒ǖ闹匾獌?yōu)點,它可以保護類中的數(shù)據(jù)不受外部的意外修改。但是,過分“純粹”的數(shù)據(jù)封裝,需要付出降低程序效率代價。特別在設(shè)計像CDIB類這樣需要大量使用Win32API函數(shù)的類時,這種缺陷特別突出。因為操作DIB的API函數(shù)大多需要一些DIB的屬性作為參數(shù)。如果硬要將這些屬性封裝起來,則需要在類中重新實現(xiàn)許

83、多Win32API函數(shù)。這不但要花費很大的精力,而且還可能因此而產(chǎn)生錯誤和低效。所以,在設(shè)計CDIB時應采用既盡可能保證數(shù)據(jù)的封裝,又能保證效率的提高。</p><p>  2.6.2 構(gòu)造CDIB類</p><p>  根據(jù)以上的分析,創(chuàng)建CDIB類,其接口文件和實現(xiàn)文件分別為Dib.h和Dib.cpp。文件Dib.h包含了CDIB類的類聲明有關(guān)的所有信息。</p><

84、;p><b>  2.7 本章小結(jié)</b></p><p>  本章對圖像壓縮和數(shù)據(jù)冗余、數(shù)字圖像基本概念、VC++軟件平臺、及其編碼壓縮技術(shù)做了簡要介紹,對最新的幾種壓縮算法原理和步驟進行了簡要說明。</p><p>  第3章圖像壓縮技術(shù)編碼的算法研究</p><p><b>  3.1 哈弗曼編碼</b>&l

85、t;/p><p>  根據(jù)信息論中信源編碼理論,當平均碼長R大于等于圖像熵H時,總可設(shè)計出一種無失真編碼。當平均碼長大于圖像熵時,表明該編碼方法效率很低;當平均碼長等于或很接近于(但不大于)圖像熵時,稱此編碼方法為最佳編碼,此時不會引起圖像失真;當平均碼長小于圖像熵時,壓縮比較高,但會引起圖像失真。在變長編碼中,如果碼字長度嚴格按照對應符號出現(xiàn)的概率大小逆序排列,但其平均碼字長度為最小,這就是變長最佳編碼定理。變長最

86、佳編碼定理是哈夫曼編碼的理論基礎(chǔ)。</p><p>  3.1.1 哈弗曼編碼基本原理</p><p>  哈弗曼(Huffman)編碼是一種常用的壓縮編碼方法,是Huffman于1952年為壓縮文本文件建立的,是一種效率比較高的變長無失真信源編碼方法。它的基本原理是頻繁使用的數(shù)據(jù)用較短的代碼代替,較少使用的數(shù)據(jù)用較長的代碼代替,每個數(shù)據(jù)的代碼各不相同。</p><p&

87、gt;  由于哈夫曼編碼是以信源概率分布為基礎(chǔ)的,但一般情況下無法事先知道信源的概率分布,因而通常采用對大量數(shù)據(jù)進行統(tǒng)計后得到的近似分布來代替,這樣會導致實際應用時哈夫曼編碼無法達到最佳性能。</p><p>  3.1.2 哈弗曼編碼步驟</p><p>  下面來介紹哈夫曼編碼方法:</p><p> ?。?)將輸入的符號(圖像中的灰度級)按出現(xiàn)概率由小到大排列

88、,即 </p><p> ?。?)將最小的兩個相加,形成一個新的概率集合(此時壓縮了一個),再按(1)重復直到只剩下兩個概率為止。</p><p>  下圖給出了一個實際信源符號的縮減過程。</p><p>  表3.1 哈夫曼編碼中的信源符號縮減過程</p><p>  從最后的兩概率值開始逐步向前給符號分配碼字長,每一步有兩個分支,以相同

89、的規(guī)則各賦予一個二進制碼。編碼過程如表3.2所示。</p><p>  表3.2哈夫曼編碼中的碼字分配過程</p><p>  同時也可以計算與編碼性能相關(guān)的幾個參數(shù):</p><p><b> ?。?)信源的熵</b></p><p><b>  (3.1)</b></p><

90、p> ?。?)哈夫曼編碼的平均碼字長 </p><p><b>  (3.2)</b></p><p> ?。?)哈夫曼編碼的效率</p><p><b>  (3.3)</b></p><p>  3.1.3 哈弗曼編碼特點</p><p>  用哈夫曼編碼方法壓縮圖

91、像數(shù)據(jù),對于不同的圖像,其壓縮效果和壓縮效率是不同的。當各符號出現(xiàn)概率不同時,編碼效率較高。而當各符號出現(xiàn)的概率相等時,實際上此時的哈夫曼編碼就已退化成等長編碼,編碼效率較低。對灰度圖像的無損壓縮算法采用哈夫曼編碼,即對原圖像實行直接的編碼,該算法在恢復圖像的質(zhì)量上是極好的。但由于該算法對原圖像直接使用不等長編碼壓縮,但沒有處理圖像各個像素間的相關(guān)性,從而使壓縮效率并不是很高,因此必須結(jié)合其它的壓縮方法同時使用以達到更高的壓縮比。<

92、;/p><p>  3.2 香農(nóng)-費諾編碼</p><p>  香農(nóng)-費諾(Shannon-Fannon)編碼也是一種常見的可變字長編碼。與哈夫曼編碼相似,當信源符號出現(xiàn)時的概率正好為2-i時,采用香農(nóng)-費諾編碼同樣能達到100%的編碼效果。</p><p>  3.2.1 香農(nóng)-費諾編碼基本原理</p><p>  香農(nóng)-費諾編碼的理論基礎(chǔ)是符

93、號的碼字長度Ni完全由該符號出現(xiàn)的概率來決定,即 -logDPiNi-logDPi+1,式中D為編碼所用的數(shù)制。</p><p>  3.2.2 香農(nóng)-費諾編碼步驟</p><p> ?。?)將信源符號Xi按其出現(xiàn)概率Pi從小到大排序:</p><p><b>  (3.3)</b></p><p> ?。?)將X分成兩

94、個子集</p><p><b>  (3.4)</b></p><p>  并且保證成立或差不多成立。在本圖像壓縮編碼設(shè)計中是按前一個子集大于等于總和的一半來計算的。</p><p> ?。?)給兩個子集賦不同的碼元值,如X1中的符號賦“1”,X2中的符號就賦“0”。</p><p> ?。?)重復(2)、(3),即對每

95、個子集再一分為二,并分別賦予不同碼元值,直到每個子集僅含一個信源符號為止。</p><p>  下面通過哈夫曼編碼中用過的同樣例子,說明上述編碼過程。將信源</p><p>  (3.5)記為: (3.6)</p><p>  則其編碼過程如表3.3所示。</p><p>  表3.3香農(nóng)-費

96、諾編碼過程</p><p>  3.2.3 香農(nóng)-費諾編碼特點</p><p>  采用以上算法用VC具體實現(xiàn)對某一圖像進行編碼,同時對編碼的有關(guān)評估參數(shù)如圖像熵值、平均碼長、編碼效率進行計算。為了便于編碼的顯示設(shè)計了編碼顯示對話框,在其中進行編碼運算并實現(xiàn)碼字的顯示。</p><p><b>  3.3 行程編碼</b></p>

97、<p>  行程編碼又稱行程長度編碼(Run Length Encoding, RLE),是一種熵編碼,其編碼原理相當簡單,即將具有相同值的連續(xù)串用其串長和一個代表值來代替,該連續(xù)串就稱為行程,串長稱為行程長度。RLE壓縮編碼尤其適用于計算機生成的圖形圖像,對減少存儲容量很有效果。</p><p><b>  行程編碼基本原理</b></p><p>  

98、行程編碼分為定長和不定長編碼兩種。定長編碼是指編碼的行程長度所用的二進制位數(shù)固定,而變長形成編碼是指對不同范圍的行程長度使用不同位數(shù)的二進制進行編碼。使用變長行程編碼需要增加標志位來表明所使用的二進制位數(shù)。</p><p>  為了達到較好的壓縮效果,一般不單獨采用行程編碼,而是和其他編碼方法結(jié)合使用。例如,在JPEG中,就綜合使用了行程編碼、DCT、量化編碼以及哈夫曼編碼,先對圖像作分塊處理,再對這些分塊圖像進

99、行離散余弦變換(DCT),對變換后的頻域數(shù)據(jù)進行量化并作Z字形掃描,接著對掃描結(jié)果作行程編碼,對行程編碼后的結(jié)果在作哈哈弗曼編碼。</p><p><b>  行程編碼步驟</b></p><p>  PCX文件分為文件頭和圖像壓縮數(shù)據(jù)兩個部分。如果是256色圖像,則還有一個256色調(diào)色板存于文件尾部。文件頭全長128字節(jié),包含了圖像的大小和顏色以及PCX文件的版本標

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>  其中值得注意的是以下幾個數(shù)據(jù):manufacturer為PCX文件的標志,必須為0x0a;xmin為最小的x坐標,xmax為最大的x坐標,所以圖像的寬度為xmax-xmin+1,同樣圖像的高度為ymax-ymin+1;bits_per_pixel為每個編碼行所占的字節(jié)數(shù)。</p><p>  圖像壓縮數(shù)據(jù)緊跟在文件頭后。如果沒有使用調(diào)色板,那么圖像壓縮數(shù)據(jù)存儲的是實際像素值;否則,存儲的是調(diào)色

104、板的索引值。當壓縮數(shù)據(jù)是實際的像素值時,它們按顏色平面和掃描行存儲,即每行先存儲所有R分量,再存儲所有G分量,最后存儲所有B分量,一行數(shù)據(jù)存儲完后,接著存儲下一行數(shù)據(jù)。如果使用了調(diào)色板,則不會分解為單獨的顏色平面存儲。</p><p>  下面以256色的PCX文件為例,說明PCX文件中的行程編碼。</p><p>  256色PCX文件中,每個像素占一個字節(jié),壓縮數(shù)據(jù)以字節(jié)為單位逐行進行

105、編碼,每行填充到偶數(shù)字節(jié)。PCX文件規(guī)定編碼時的最大行程長度為63,如果行程長度大于63,則必須分多次存儲。對于長度大于1的行程,編碼時先存入其行程長度(長度L加上192即0xC0),再存入該行程的代碼值,行程長度和行程的代表值分別占一個字節(jié)。對于長度為1的行程,即單個像素,如果該像素的值小于或等于0xC0,則編碼時直接存入該像素值,而不存儲長度信息;否則,先存入0xC1,再存入該像素值,這樣做的目的是為了避免該像素值被誤認為長度信息。

106、例如,連續(xù)100個灰度值為0x80的像素,其編碼(以十六進制表示)應為FF 80 25 80。上面的編碼中出現(xiàn)的FF的長度信息是由63與0xC0相加所得。</p><p><b>  行程編碼特點</b></p><p>  行程編碼比較適合于二值圖像(即圖像的各像素只有兩個值——黑或者白)的編碼,一般用于量化后出現(xiàn)大量零系數(shù)連續(xù)的場合,用行程來表示連零碼。如果圖像是

107、由很多塊顏色或灰度相同的大面積區(qū)域組成的,那么采用行程編碼可以達到很高的壓縮比。如果圖像中的數(shù)據(jù)非常分散,則行程編碼不但不能壓縮數(shù)據(jù),反而會增加圖像文件的大小。極端情況如果圖像中每兩個相鄰點的顏色都不同,用這種算法不但不能壓縮,反而數(shù)據(jù)量增加一倍。所以現(xiàn)在單純采用行程編碼的壓縮算法用得并不多,PCX文件算是其中的一種。</p><p><b>  3.4 本章小結(jié)</b></p>

108、<p>  本章講述了哈夫曼編碼、香農(nóng)-費諾編碼和行程編碼這三種編碼的算法原理、編碼步驟及編碼特點。</p><p>  第4章圖像壓縮技術(shù)編碼方法設(shè)計</p><p><b>  4.1 哈弗曼編碼</b></p><p>  4.1.1 哈弗曼編碼算法實現(xiàn)</p><p>  資源文件HuffmanC

109、oding.cpp中主要介紹哈夫曼編碼的算法,首先要從視圖類CDImageProcessView中的OnHuffmancoding函數(shù)中得到0-255各灰度值出現(xiàn)的概率,在下面的算法中要基于這個概率值進行哈夫曼編碼。</p><p>  首先要對這個概率值進行從小到大的冒泡排序,然后從概率大于0處開始編碼,灰度值較小的編為1,灰度值較大的編為0,再將最小的兩個灰度值相加,將加后的值與其他灰度值放在一起重新按從小到

110、大排序,重復以上的步驟直到概率值相加為1。然后計算該圖像的熵值、平均碼字長度及編碼效率。具體算法如下代碼所示:</p><p>  BOOL CHuffmanCoding::OnInitDialog() </p><p><b>  {</b></p><p>  //調(diào)用默認的對話框初始化函數(shù)</p><p>  CD

溫馨提示

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

評論

0/150

提交評論