資源描述:
《圖像課設(shè)huffman編碼》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、一、設(shè)計(jì)目的:1.了解Huffman編碼的原理.2.通過閱讀已有程序,掌握Huffman編碼.3.會(huì)用Huffman編碼對一張圖片進(jìn)行編碼和解碼4.提高編程能力二、Huffman編碼的介紹:它是一種編碼方式,哈夫曼編碼是可變字長編碼(VLC)的一種。Huffman于1952年提出一種編碼方法,該方法完全依據(jù)字符出現(xiàn)概率來構(gòu)造異字頭的平均長度最短的碼字,有時(shí)稱之為最佳編碼,一般就叫作Huffman編碼。以哈夫曼樹─即最優(yōu)二叉樹,帶權(quán)路徑長度最小的二叉樹,經(jīng)常應(yīng)用于數(shù)據(jù)壓縮。在計(jì)算機(jī)信息處理中,“哈夫曼編碼”是一
2、種一致性編碼法(又稱"熵編碼法"),用于數(shù)據(jù)的無損耗壓縮。這一術(shù)語是指使用一張?zhí)厥獾木幋a表將源字符(例如某文件中的一個(gè)符號)進(jìn)行編碼。這張編碼表的特殊之處在于,它是根據(jù)每一個(gè)源字符出現(xiàn)的估算概率而建立起來的(出現(xiàn)概率高的字符使用較短的編碼,反之出現(xiàn)概率低的則使用較長的編碼,這便使編碼之后的字符串的平均期望長度降低,從而達(dá)到無損壓縮數(shù)據(jù)的目的)。這種方法是由David.A.Huffman發(fā)展起來的。例如,在英文中,e的出現(xiàn)概率很高,而z的出現(xiàn)概率則最低。當(dāng)利用哈夫曼編碼對一篇英文進(jìn)行壓縮時(shí),e極有可能用一個(gè)位(
3、bit)來表示,而z則可能花去25個(gè)位(不是26)。用普通的表示方法時(shí),每個(gè)英文字母均占用一個(gè)字節(jié)(byte),即8個(gè)位。二者相比,e使用了一般編碼的1/8的長度,z則使用了3倍多。倘若我們能實(shí)現(xiàn)對于英文中各個(gè)字母出現(xiàn)概率的較準(zhǔn)確的估算,就可以大幅度提高無損壓縮的比例。三、Huffman編碼的步驟設(shè)信源X的信源空間為:其中,,現(xiàn)用二進(jìn)制對信源X中的每一個(gè)符號(i=1,2,…N)進(jìn)行編碼。根據(jù)變長最佳編碼定理,Huffman編碼步驟如下:(1)將信源符號xi按其出現(xiàn)的概率,由大到小順序排列。(2)將兩個(gè)最小的概
4、率的信源符號進(jìn)行組合相加,并重復(fù)這一步驟,始終將較大的概率分支放在上部,直到只剩下一個(gè)信源符號且概率達(dá)到1.0為止;(3)對每對組合的上邊一個(gè)指定為1,下邊一個(gè)指定為0(或相反:對上邊一個(gè)指定為0,下邊一個(gè)指定為1);(4)畫出由每個(gè)信源符號到概率1.0處的路徑,記下沿路徑的1和0;(5)對于每個(gè)信源符號都寫出1、0序列,則從右到左就得到非等長的Huffman碼。四、Huffman的舉例:一幅20×20的圖像共有5個(gè)灰度級:s1,s2,s3,s4,和s5,它們的概率依次為0.4,0.175,0.15,0.15
5、和0.125。信源符號出現(xiàn)概率碼字碼長s10.401S20.1751113S30.151103S40.151013S50.1251003圖像熵編碼后均碼長五、Huffman編碼的特點(diǎn):Huffman編碼的特點(diǎn)是:(1)Huffman編碼構(gòu)造程序是明確的,但編出的碼不是唯一的,其原因之一是兩個(gè)概率分配碼字“0”和“1”是任意選擇的(大概率為“0”,小概率為“1”,或者反之)。第二原因是在排序過程中兩個(gè)概率相等,誰前誰后也是隨機(jī)的。這樣編出的碼字就不是唯一的。(2)Huffman編碼結(jié)果,碼字不等長,平均碼字最短
6、,效率最高,但碼字長短不一,實(shí)時(shí)硬件實(shí)現(xiàn)很復(fù)雜(特別是譯碼),而且在抗誤碼能力方面也比較差。(3)Huffman編碼的信源概率是2的負(fù)冪時(shí),效率達(dá)100%,但是對等概率分布的信源,產(chǎn)生定長碼,效率最低,因此編碼效率與信源符號概率分布相關(guān),故Huffman編碼依賴于信源統(tǒng)計(jì)特性,編碼前必須有信源這方面的先驗(yàn)知識,這往往限制了哈夫曼編碼的應(yīng)用。(4)Huffman編碼只能用近似的整數(shù)位來表示單個(gè)符號,而不是理想的小數(shù),這也是Huffman編碼無法達(dá)到最理想的壓縮效果的原因。六、Huffman編碼的MATLAB的源
7、程序clearloadwoman;%讀入圖像數(shù)據(jù)%X=imread('girl.bmp','bmp');data=uint8(X);[zipped,info]=huffencode(data);%調(diào)用Huffman編碼程序進(jìn)行壓縮unzipped=huffdecode(zipped,info,data);%調(diào)用Huffman編碼程序進(jìn)行解碼%顯示原始圖像和經(jīng)編碼后的圖像,顯示壓縮比,并計(jì)算均方根誤差得erms=0,表示是Huffman是無失真編碼subplot(121);imshow(data);subplo
8、t(122);imshow(unzipped);%erms=compare(data(:),unzipped(:))cr=info.ratiowhosdataunzippedzipped%huffencode函數(shù)對輸入矩陣vector進(jìn)行Huffman編碼,返回%編碼后的向量(壓縮后數(shù)據(jù))及相關(guān)信息function[zipped,info]=huffencode(vector)%輸入和輸出都是uni