实验六 图像DCT变换编码压缩报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验课程名称数字图像处理
实验项目名称图像DCT变换编码压缩
年级 2010
专业光信 101
学生姓名肖明进
学号 1007010124
理学院
实验时间:20 13 年5月 9日
学院:理学院专业:光信班级:光信101
姓名肖明进学号1007010124 实验组
实验时间2013-5-9 指导教师徐锦成绩
实验项目名称图像DCT变换编码压缩
实验目的及要求:
1.掌握离散余弦变换DCT的实验方法,了解DCT的幅度分布特性,从而加深对DCT变换的认识。
2.掌握图像DCT变换编码的实现方法,从而加深对变换编码压缩图像原理的理解。
实验原理:
MATLAB图像处理工具箱实现离散余弦变换有两种方法:
1.使用函数DCT2,该函数用一个基于FFT的算法,用来提高对输入较大的时的计算速度。
2.使用DCTMTX函数返回的DCT变换矩阵,这种方法适合于较小的输入方阵(例如:8*8或
16*16).
为了实现8*8子块的DCT图像变换,需要用到MATLAB中的BLKPROC函数。将这个函数和函数DCTMTX一起用于块处理可以大大简化运算。以上函数用MATLAB的help查看具体使用方法。
实验内容:
编程实现图像DCT变换编码。
实验步骤:(源程序参考书中P171—172的例子)
1.设置压缩比
2.求8*8块的DCT变换矩阵
3.计算8*8块的DCT变换
4.对DCT系数量化和反量化
5.求反量化系数(或称截取后的系数)的逆DCT变换
6.显示原始图像、压缩后图像、误差图像(两图相减的结果)
数据记录及处理:
1.源程序:
cr=0.5;
initialimage=imread('lena512.bmp');
initialimage=double(initialimage)/255;
figure(1);subplot(1,3,1);
imshow(initialimage);title('原图像');
t=dctmtx(8);
dctcoe=blkproc(initialimage,[8 8],'P1*x*P2',t,t'); coevar=im2col(dctcoe,[8 8],'distinct');
coe=coevar;
[y,ind]=sort(coevar);
[m,n]=size(coevar);
snum=64-64*cr;
for i=1:n
coe(ind(1:snum),i)=0;
end
b2=col2im(coe,[8 8],[512 512],'distinct');
i2=blkproc(b2,[8 8],'P1*x*P2',t',t);
subplot(1,3,2);imshow(i2);title('压缩后图像');
e=double(initialimage)-double(i2);
[m,n]=size(e);
erms=sqrt(sum(e(:).^2)/(n*m));
subplot(1,3,3);imshow(e);title('误差图像');
结果图:
思考题:
1.图像变换编码中为什么要对图像进行分块?
答:1.小块图像的变换计算容易;
2.距离较远的像素之间的相关性比距离较近的像素之间的相关性小。
2.简述DCT编码的原理及基本过程。
答:子图像分割、变换、量化、编码。
指导教师意见:
签名:年月日