如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
实验四图像压缩
姓名:学号: 邮箱:
实验目的
掌握DCT变换的原理
了解DCT变化在图像压缩中的应用
掌握图像压缩的基本原理及方法
了解霍夫曼编码原理
熟悉图像压缩的MATLAB编程
实验原理
DCT是目前比较好的图像变换,它有很多优点。DCT是正交变换,它可以将8x8图像空间表达式转换为频率域,只需要用少量的数据点表示图像;DCT产生的系数很容易被量化,因此能获得好的块压缩;DCT算法的性能很好,它有快速算法,如采用快速傅立叶变换可以进行高效的运算,因此它在硬件和软件中都容易实现;而且DCT算法是对称的,所以利用逆DCT算法可以用来解压缩图像。
由于DCT主要应用在数据和图像的压缩,因此希望原信号的能量在变换后能尽量集中在少数系数上,且这些大能量的系数能处在相对集中的位置,这将有利于进一步的量化和编码。但是如果对整段的数据或整幅图像来做DCT,那就很难保证大能量的系数能处在相对集中的位置。因此,在实际应用中,一般都是将数据分成一段一段来做,一般分成8x8或16x16的方块来做。
二维DCT正交变换的公式为:
二维DCT逆变换公式:
其中
实验要求
利用DCT变换对图像进行压缩,对比不同压缩比下的结果,对比不同压缩比下图像大小的变化。压缩过程如下图所示:
读入图像
DCT变换
量化
huffman编码
实验过程与结果
实验程序如下:(先给出主程序,然后给出各功能子函数的程序)
主程序:
clear
load('lena.mat')%调入170*170大小的一幅彩色lena图像
l=imresize(lena,[256256]);%将图像变换为8的整数倍大小
X=rgb2gray(l);
Y1=double(X);%读入图像数据
lianghua=[1611101624405161;%量化矩阵,量化的程度序决定压缩比
1212141926586055;
1413162440576956;
1417222951878062;
182237566810910377;
243555648110411392;
49647887103121120101;
7292959811210010399];
ilianghua=lianghua;
%----------------------------------------------------------
%图像压缩
%----------------------------------------------------------
t=dctmtx(8);
J=blkproc(Y1,[88],'P1*x*P2',t,t');%分成8*8块进行DCT变换
M=blkproc(J,[88],'round(x./P1)',lianghua);%量化
u=abs(min(min(M1));
M=(M1./u)+1;
data=uint8(M);%Huffman编码要求为无符号整形数组
M2=M-double(data);
[zipped,info]=huffencode(data);%调用Huffman编码程序进行压缩
unzipped=huffdecode(zipped,info,data);%调用Huffman解码程序进行解压缩
k=1;
fori=1:256
forj=1:256
unzippedray(i,j)=unzipped(k);
k=k+1;
end
end
unzippedray=unzippedray';%对解压缩后得到的一维数组进行变换,得到无损的量化后
%二维数组,其值与data数组值是一致的,体现了Huffman编码是一种无损编码
unzippedray=(double(unzippedray)-1+M2).*u;
T=blkproc(unzippedray,[88],'x.*P1',ilianghua);%反量化
I=blkproc(T,[88],'P1*x*P2',t',t);%8*8DCT反变换
%----------------------------------------------------------
%调用Huffman编码程序进行解码
%显示原始图像和经编码后的图像,显示压缩比,并计算均方根误差得erms=0,表示是Huffman是无失真编码
figure
subplot(221);imshow(Y1,[]);axissquare;xlabel('原256*256灰度图像');
subplot(222);imshow(I,[]);axissquare;xlabel('Huffman解压缩后图像');
subplot(223);imshow((Y1-I),[]);axissquare;xlabel('量化后损失
快乐****蜜蜂
实名认证
内容提供者
最近下载