资源描述:
《图像压缩综合实验》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《网络通信实验与设计》实验报告华北电力大学实验报告院/系:电子与通信工程系课程名称:数字图像处理日期:2010-11-2专业通信工程学号实验时间:14:10-16:10班级通信0703姓名实验名称图像压缩综合实验操作成绩报告成绩教师签名实验环境MATLAB实验任务要求(1)进一步熟悉DCT的概念和原理;(2)掌握对灰度和彩色图像作离散余弦变换和反变换的方法;(3)能选择适当的量化间隔、阈值和区域进行编码;(4)综合利用变换、量化、Huffman编码等知识,实现JPEG压缩编码。实验原理与方案JPEG压缩原理:基于DCT的JPEG压缩过程主要是对图像的空间
2、冗余进行压缩,其基本过程为:首先进行DCT正变换,再对DCT系数进行量化,并对量化后的直流系数和交流系数分别进行差分编码和行程编码,最后进行熵编码。编码的简化框图如图3.1所示,解码为其逆过程。压缩后图像数据熵编码器量化器源图像数据8×8FDCT量化表Huffman码表图3.1JPEG压缩编码器框图2-DCT变换原理:JPEG将源数据图像分成8×8大小的子块,然后进行DCT变换,2-DCT变换公式如下:其中:f(x,y)—输入/输出图像取样值(基准系统的取值为[-128,127]);C(u,v)—DCT系数(基准系统中C(u,v)的取值范围为[-1023
3、,1023]);C(0,0)代表DC系数,其余63个为AC系数。第6页《网络通信实验与设计》实验报告实验程序DCT变换、量化、区域编码、阈值编码参考程序num2=0;num3=0;I=imread('cameraman.tif');I=im2double(I)*255;T=dctmtx(8);%计算离散余弦变换矩阵figure,imshow(I/255),Q=10;B=blkproc(I,[88],'P1*x*P2',T,T');%对图像进行不同的快处理mask=[111110001111000011100000110000001000000000000
4、0000000000000000000];B2=blkproc(B,[88],'P1.*x',mask);B2=round(B2/Q);%round功能为取整fori=1:256forj=1:256if(B2(i,j)==0)num3=num3+1;endendendB3=B2*Q;I2=blkproc(B3,[88],'P1*x*P2',T',T);figure,imshow(I2/255)fori=1:256forj=1:256if(abs(B(i,j))<40)B(i,j)=0;num2=num2+1;endendendI3=blkproc(B,[
5、88],'P1*x*P2',T',T);figure,imshow(I3/255)a2=num2,a3=num3JPEG压缩程序:clearallclcdisp('Enter...')disp('0(default)-loada64x64image,or')disp('1-Usetextbook8x8data(example8.28)')第6页《网络通信实验与设计》实验报告实验程序chos=input('Enteryourchoice:');ifisempty(chos)chos=0;endifchos==0,loadlena.matf=x;imshow
6、(mat2gray(f))clearxelsef=[139144149153155155155155144151153156159156156156150155160163158156156156159161162160160159159159159160161162162155155155161161161161160157157157162162161163162157157157162162161161163158158158];f1=[52556166706164736359669010985697262596811314410466736358
7、711221541067069676168104126886870796560707768587585716459556165838779696865767894];endifchos==0,f=f-128;elseifchos==1,f=f-128,enddrawnow[mf,nf]=size(f);mb=mf/8;nb=nf/8;ifchos==0,Ff=blkproc(f,[88],'dct');Ff=blkproc(Ff',[88],'dct');Ff=round(Ff');elseifchos==1,Ff=blkproc(f,[88],'dct
8、'),Ff=blkproc(Ff',[88],'dct'),Ff=round(F