資源描述:
《實驗四 dct變換huffman編碼圖像壓縮》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、實驗四圖像壓縮姓名:學(xué)號:郵箱:一、實驗?zāi)康?.掌握DCT變換的原理2.了解DCT變化在圖像壓縮中的應(yīng)用3.掌握圖像壓縮的基本原理及方法4.了解霍夫曼編碼原理5.熟悉圖像壓縮的MATLAB編程二、實驗原理DCT是目前比較好的圖像變換,它有很多優(yōu)點。DCT是正交變換,它可以將8x8圖像空間表達(dá)式轉(zhuǎn)換為頻率域,只需要用少量的數(shù)據(jù)點表示圖像;DCT產(chǎn)生的系數(shù)很容易被量化,因此能獲得好的塊壓縮;DCT算法的性能很好,它有快速算法,如采用快速傅立葉變換可以進(jìn)行高效的運算,因此它在硬件和軟件中都容易實現(xiàn);而且DCT算法是對稱的,所以
2、利用逆DCT算法可以用來解壓縮圖像。由于DCT主要應(yīng)用在數(shù)據(jù)和圖像的壓縮,因此希望原信號的能量在變換后能盡量集中在少數(shù)系數(shù)上,且這些大能量的系數(shù)能處在相對集中的位置,這將有利于進(jìn)一步的量化和編碼。但是如果對整段的數(shù)據(jù)或整幅圖像來做DCT,那就很難保證大能量的系數(shù)能處在相對集中的位置。因此,在實際應(yīng)用中,一般都是將數(shù)據(jù)分成一段一段來做,一般分成8x8或16x16的方塊來做。二維DCT正交變換的公式為:二維DCT逆變換公式:其中一、實驗要求利用DCT變換對圖像進(jìn)行壓縮,對比不同壓縮比下的結(jié)果,對比不同壓縮比下圖像大小的變化。
3、壓縮過程如下圖所示:讀入圖像DCT變換量化huffman編碼二、實驗過程與結(jié)果實驗程序如下:(先給出主程序,然后給出各功能子函數(shù)的程序)主程序:clearload('lena.mat')%調(diào)入170*170大小的一幅彩色lena圖像l=imresize(lena,[256256]);%將圖像變換為8的整數(shù)倍大小X=rgb2gray(l);Y1=double(X);%讀入圖像數(shù)據(jù)lianghua=[1611101624405161;%量化矩陣,量化的程度序決定壓縮比1212141926586055;141316244057
4、6956;1417222951878062;182237566810910377;243555648110411392;49647887103121120101;7292959811210010399];ilianghua=lianghua;%----------------------------------------------------------%圖像壓縮%----------------------------------------------------------t=dctmtx(8);J=blkpr
5、oc(Y1,[88],'P1*x*P2',t,t');%分成8*8塊進(jìn)行DCT變換M=blkproc(J,[88],'round(x./P1)',lianghua);%量化u=abs(min(min(M1));M=(M1./u)+1;data=uint8(M);%Huffman編碼要求為無符號整形數(shù)組M2=M-double(data);[zipped,info]=huffencode(data);%調(diào)用Huffman編碼程序進(jìn)行壓縮unzipped=huffdecode(zipped,info,data);%調(diào)用Huff
6、man解碼程序進(jìn)行解壓縮k=1;fori=1:256forj=1:256unzippedray(i,j)=unzipped(k);k=k+1;endendunzippedray=unzippedray';%對解壓縮后得到的一維數(shù)組進(jìn)行變換,得到無損的量化后%二維數(shù)組,其值與data數(shù)組值是一致的,體現(xiàn)了Huffman編碼是一種無損編碼unzippedray=(double(unzippedray)-1+M2).*u;T=blkproc(unzippedray,[88],'x.*P1',ilianghua);%反量化I=b
7、lkproc(T,[88],'P1*x*P2',t',t);%8*8DCT反變換%----------------------------------------------------------%調(diào)用Huffman編碼程序進(jìn)行解碼%顯示原始圖像和經(jīng)編碼后的圖像,顯示壓縮比,并計算均方根誤差得erms=0,表示是Huffman是無失真編碼figuresubplot(221);imshow(Y1,[]);axissquare;xlabel('原256*256灰度圖像');subplot(222);imshow(I,[])
8、;axissquare;xlabel('Huffman解壓縮后圖像');subplot(223);imshow((Y1-I),[]);axissquare;xlabel('量化后損失的圖像部分');[h,k]=hist((Y1-I),256);%生成直方圖數(shù)據(jù)subplot(224);bar(k,h,'k');tit