实验三 基于DCT的数字图像压缩及Matlab实现
更新时间:2023-11-27 04:39:01 阅读量: 教育文库 文档下载
- 实验三中推荐度:
- 相关推荐
实验五 基于DCT的数字图像压缩及Matlab实现
实验报告
一.实验目的
1.了解DCT以及基于DCT的图片压缩的方法和步骤; 2.学会图片压缩的方法
二.实验仪器
PC机(安装Windows98、Windows2000或者Windows XP或以上),Matlab软件。
三.实验原理
(1)DCT的定义
DCT变换利用傅立叶变换的性质,采用图像边界褶翻将图像变换为偶函数形式,然后对图像进行二维傅立叶变换,变换后仅包含余弦项,所以称之为离散余弦变换。
(2)DCT和图像压缩
DCT编码属于正交变换编码方式,用于去除图像数据的空间冗余。变换编码就是将图像光强矩阵(时域信号)变换到系数空间(频域信号)上进行处理的方法。在空间上具有强相关的信号,反映在频域上是在某些特定的区域
内能量常常被集中在一起,或者是系数矩阵的分布具有某些规律。我们可以利用这些规律在频域上减少量化比特数,达到压缩的目的。
图像经DCT变换以后,DCT系数之间的相关性已经很小,而且大部分能量集中在少数的系数上,因此,DCT变换在图像压缩中非常有用,是有损图像压缩国际标准JPEG的核心。从原理上讲可以对整幅图像进行DCT变换,但由于图像各部位上细节的丰富程度不同,这种整体处理的方式效果不好。为此,发送者首先将输入图像分解为8×8或16×16的块,然后再对每个图像块进行二维DCT变换,接着再对DCT系数进行量化、编码和传输;接收者通过对量化的DCT系数进行解码,并对每个图像块进行的二维DCT反变换,最后将操作完成后所有的块拼接起来构成一幅单一的图像。对于一般的图像而言,大多数DCT系数值都接近于0,可以去掉这些系数而不会对重建图像的质量产生重大影响。因此,利用DCT进行图像压缩确实可以节约大量的存储空间。
DCT变换的特点是变换后图像大部分能量集中在左上角,因为左上放映原图像低频部分数据,右下反映原图像高频部分数据。而图像的能量通常集中在低频部分。
四.实验内容
离散余弦变换的Matlab实现
利用余弦变换进行图像压缩,首先要将输入图像分解成8×8或16×16的块,然后对每个块进行二维离散余弦变换,最后将变换得到的量化DCT系数进行编码和传送,形成压缩后的图像格式。解码时对每个块进行二维DCT反变换,最后在将反变换后的块组合成一副图像。
对于通常的图像来说,大多数的DCT系数的值非常接近于0。如果舍弃这些接近于0的值,在重构图像时并不会带来图像画面质量的显著下降。所以,利用DCT进行图像压缩可以节约大量的存储空间。压缩应该在最合理的近似原图像的情况下使用最少的系数,使用系数的多少也决定了压缩比的大小。
按照以上的方法,使用MATLAB,将一幅图像分成8×8的块使用二维离散余弦变换进行压缩(压缩比为16:1,8:1),给出实验仿真结果,要求显示压缩前后的图像,并且计算压缩前后图像的均方误差MSE。改变压缩比为8:1,再如前所做,比较不同之处。
五.实验代码
(1)压缩比为8:1 clear;
I=imread('autumn.tif'); Igray=rgb2gray(I);
Idouble=im2double(Igray)%将图像转换为双精度格式 T=dctmtx(8);%返回一个8×8的DCT变换矩阵
Id=blkproc(Idouble,[8,8],'P1*x*P2',T,T');%进行DCT变换 M=[1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
% 保留6个DCT系数重构图像 Icpress=blkproc(Id,[8,8],'P1.*x',M); %压缩数据,只保留左上角低频数据
Iodct=blkproc(Icpress,[8,8],'P1*x*P2',T',T); üT反变换,得到压缩后的图像 cha=abs(Idouble-Iodct); junfang=mse(cha); figure(1); subplot(211) imshow(I)
title('原始图像','Fontsize',26); subplot(212) imshow(Iodct)
title('压缩图像(保留6个DCT系数)','Fontsize',26); xlabel({'均方误差:';junfang},'Fontsize',20) whos;%显示所有图像的属性
(2)压缩比为16:1 clear;
I2=imread('autumn.tif'); Igray2=rgb2gray(I2);
Idouble2=im2double(Igray2)%将图像转换为双精度格式 T2=dctmtx(16);%返回一个16×16的DCT变换矩阵
Id2=blkproc(Idouble2,[16,16],'P1*x*P2',T2,T2');%进行DCT变换 M2=[1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]; %保留6个DCT系数重构图像
Icpress2=blkproc(Id2,[16,16],'P1.*x',M2);%压缩数据,只保留左上角低频数据
Iodct2=blkproc(Icpress2,[16,16],'P1*x*P2',T2',T2);üT反变换,得到压缩后的图像 cha2=abs(Idouble2-Iodct2); junfang2=mse(cha2); figure(1);
subplot(211) imshow(I2)
title('原始图像','Fontsize',26); subplot(212) imshow(Iodct2)
title('压缩图像(保留6个DCT系数)','Fontsize',26); xlabel({'均方误差:';junfang2},'Fontsize',20) whos;%显示所有图像的属性
六.实验图像
(1)压缩比为8:1
第一幅图为保留6个DCT系数的图像,其中两张为DCT变换后进行处理的图像。后省略。
原始图像DCT变换后的图像压缩后的DCT变换图像压缩图像(保留6个DCT系数)均方误差:0.00317855 原始图像压缩图像(保留10个DCT系数)均方误差:0.0020367
正在阅读:
实验三 基于DCT的数字图像压缩及Matlab实现11-27
数字电子技术第5章 触发器自测练习与习题03-17
监理例会程序09-23
2015福建省高考语文试卷答案、考点详解以及2016预测最新考试试题04-09
申论范文点评:整顿低俗文化现象 - 图文10-28
GMP食品工厂良好作业规范通则 - 图文12-04
校园外卖系统数据库设计04-17
神奇的莫比乌斯带05-23
全国城镇天气预报质量检验方案03-30
学习心得体会作文400字09-12
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 图像
- 压缩
- 基于
- 实验
- 实现
- 数字
- Matlab
- DCT