问题一:随机选取一幅图像x.jpg,先将图像分解为8x8个数据块,然后分别对分解后的每个数据小方块进行DCT及IDCT变换,分别保留左上角3、10、15、32个系数进行处理,并对结果进行对比分析。

    clearclose allclc%清理Matlab窗口A=imread('D:\x.jpg');%读取图像x.jpg(引号内是图像在计算机内的存储路径)I=rgb2gray(A);%RGB图像转灰度图像I=im2double(I);T=dctmtx(8);%得到一个8*8的离散余弦变化矩阵B=blkproc(I,[8 8],'P1*x*P2',T,T'); %x是每一个分成的8*8大小的块%P1*x*P2相当于像素块的处理函数%p1=T,p2=T’,fun=p1*x*p2'=T*x*T'是进行离散余弦变换
%%m=[1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0];%保留左上角3个系数B2=blkproc(B,[8 8],'P1.*x',m);%舍弃每个块中的高频系数,达到图像压缩的目的I2=blkproc(B2,[8 8],'P1*x*P2',T',T);%进行反余弦变换,得到压缩后的图象miss=abs(I-I2);figure(1);imshow(I),title('原始图像','Fontsize',18);figure(2);subplot(2,2,1);imshow(I2),title('压缩(解压缩)图像(3个系数)','Fontsize',18);
%%m3=[1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 01 1 0 0 0 0 0 01 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0];%保留左上角10个系数B3=blkproc(B,[8 8],'P1.*x',m3);%舍弃每个块中的高频系数,达到图像压缩的目的I3=blkproc(B3,[8 8],'P1*x*P2',T',T);%进行反余弦变换,得到压缩后的图象miss3=abs(I-I3);subplot(2,2,2);imshow(I3),title('压缩(解压缩)图像(10个系数)','Fontsize',18);
%%m4=[1 1 1 1 1 0 0 0 1 1 1 1 0 0 0 01 1 1 0 0 0 0 01 1 0 0 0 0 0 01 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0];%保留左上角15个系数B4=blkproc(B,[8 8],'P1.*x',m4);%舍弃每个块中的高频系数,达到图像压缩的目的I4=blkproc(B4,[8 8],'P1*x*P2',T',T);%进行反余弦变换,得到压缩后的图象miss4=abs(I-I4);subplot(2,2,3);imshow(I4),title('压缩(解压缩)图像(15个系数)','Fontsize',18);
%%m5=[1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 01 1 1 1 1 0 0 01 1 1 1 0 0 0 01 1 1 1 0 0 0 01 1 1 0 0 0 0 01 1 0 0 0 0 0 01 0 0 0 0 0 0 0];%保留左上角32个系数B5=blkproc(B,[8 8],'P1.*x',m5);%舍弃每个块中的高频系数,达到图像压缩的目的I5=blkproc(B5,[8 8],'P1*x*P2',T',T);%进行反余弦变换,得到压缩后的图象miss5=abs(I-I5);subplot(2,2,4);imshow(I5),title('压缩(解压缩)图像(32个系数)','Fontsize',18);

编程结果如下,根据编程结果对比,可以明显看出,分别保留左上角32、15、10、3个系数进行处理时,图像恢复效果依次变差。
其中,保留左上角3个系数时恢复图像中,出现了明显的图像模糊现象和“块效应”现象。

问题二:随机选取一幅图像x.jpg,先将图像分解为16x16个数据块,然后分别对分解后的每个数据小方块进行DCT及IDCT变换,分别保留左上角3、10个系数进行处理,并对结果与将图像分解为16*16个数据块时的结果进行对比分析。

    clearclose allclc%清理Matlab窗口A=imread('D:\x.jpg');%读取图像x.jpg(引号内是图像在计算机内的存储路径)I=rgb2gray(A);%RGB图像转灰度图像I=im2double(I);T=dctmtx(16);%得到一个16*16的离散余弦变化矩阵B=blkproc(I,[16 16],'P1*x*P2',T,T');%x是每一个分成的16*16大小的块%P1*x*P2相当于像素块的处理函数%p1=T,p2=T’,fun=p1*x*p2'=T*x*T',是进行离散余弦变换%%m=[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 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];B2=blkproc(B,[16 16],'P1.*x',m);%舍弃每个块中的高频系数,达到图像压缩的目的I2=blkproc(B2,[16 16],'P1*x*P2',T',T);%进行反余弦变换,得到压缩后的图象figure(1);imshow(I),title('原始图像','Fontsize',18);figure(2);subplot(2,2,1);imshow(I2),title('16*16解压缩图像(3个系数)','Fontsize',18);%%m3=[1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 01 1 0 0 0 0 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];%保留左上角10个系数B3=blkproc(B,[16 16],'P1.*x',m3);%舍弃每个块中的高频系数,达到图像压缩的目的I3=blkproc(B3,[16 16],'P1*x*P2',T',T);%进行反余弦变换,得到压缩后的图象subplot(2,2,2);imshow(I3),title('16*16解压缩图像(10个系数)','Fontsize',18);%% TT=dctmtx(8);%得到一个8*8的离散余弦变化矩阵BB=blkproc(I,[8 8],'P1*x*P2',TT,TT');m4=[1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0];%保留左上角3个系数BB2=blkproc(BB,[8 8],'P1.*x',m4);%舍弃每个块中的高频系数,达到图像压缩的目的II2=blkproc(BB2,[8 8],'P1*x*P2',TT',TT);%进行反余弦变换,得到压缩后的图象figure(2);subplot(2,2,3);imshow(II2),title('8*8解压缩图像(3个系数)','Fontsize',18);%%m5=[1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 01 1 0 0 0 0 0 01 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0];%保留左上角10个系数BB3=blkproc(BB,[8 8],'P1.*x',m5);%舍弃每个块中的高频系数,达到图像压缩的目的II3=blkproc(BB3,[8 8],'P1*x*P2',TT',TT);%进行反余弦变换,得到压缩后的图象subplot(2,2,4);imshow(II3),title('8*8解压缩图像(10个系数)','Fontsize',18);

编程结果如下,根据编程结果对比,可以明显看出,将图像分解为8x8个数据块后恢复图像的效果优于将图像分解为16x16个数据块恢复图像的效果。

问题三:对彩色图像进行分块压缩处理。

close all
clc%清理Matlab窗口
RGB=imread('D:\x.jpg');%读取图像x.jpg(引号内是图像在计算机内的存储路径)
gary=rgb2gray(RGB);%RGB图像转灰度图像
%亮度量化表
m=[1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 01 1 0 0 0 0 0 01 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0];
%RGB图分层处理得到3个分量图
R = RGB(:,:,1);
G = RGB(:,:,2);
B = RGB(:,:,3);
%转换为双精度
IR =im2double(R);
IG =im2double(G);
IB =im2double(B);
%建立8*8的DCT变换矩阵
T=dctmtx(8);
%进行DCT变换
RR = blkproc(IR,[8,8],'P1*x*P2',T,T');
GG = blkproc(IG,[8,8],'P1*x*P2',T,T');
BB = blkproc(IB,[8,8],'P1*x*P2',T,T');
RR2=blkproc(RR,[8 8],'P1.*x',m);%舍弃每个块中的高频系数,达到图像压缩的目的
RRR=blkproc(RR2,[8 8],'P1*x*P2',T',T);%进行反余弦变换,得到压缩后的图象
GG2=blkproc(GG,[8 8],'P1.*x',m);%舍弃每个块中的高频系数,达到图像压缩的目的
GGG=blkproc(GG2,[8 8],'P1*x*P2',T',T);%进行反余弦变换,得到压缩后的图象
BB2=blkproc(BB,[8 8],'P1.*x',m);%舍弃每个块中的高频系数,达到图像压缩的目的
BBB=blkproc(BB2,[8 8],'P1*x*P2',T',T);%进行反余弦变换,得到压缩后的图象
D2=cat(3,RRR,GGG,BBB);
subplot(2,2,1);imshow(RRR);title('压缩后R分量图像')
subplot(2,2,2);imshow(GGG);title('压缩后G分量图像')
subplot(2,2,3);imshow(BBB);title('压缩后B分量图像')
subplot(2,2,4);imshow(D2);title('压缩后的恢复图')

编程结果图如下。

(附Matlab程序)(二)基于DCT编码的图像压缩:对分解后的每个数据小方块进行DCT及IDCT变换相关推荐

  1. 【模糊综合评价的运用】——《基于模糊评价法的高校户外公共活动空间研究》论文笔记(内附MATLAB程序)

    基于模糊评价法的高校户外公共活动空间研究 - 中国知网 (cnki.net) [模糊综合评价的运用]--<基于模糊评价法的高校户外公共活动空间研究>论文笔记(内附MATLAB程序) 文章目 ...

  2. 用MATLAB实现转子的故障诊断,单盘转子故障诊断报告(附matlab程序).doc

    单盘转子故障诊断报告(附matlab程序).doc 单盘转子故障诊断报告1数据TEST1TXT,数据长度1556486,2组振动数据第一.二列为测点1涡流传感器X.Y振动数据:第三.四列为测点2涡流传 ...

  3. matlab 多重比较,谈一谈两种常用的多重比较校正方法(附Matlab程序)

    作者:kervin 微信号:kervin_zhao 在科学研究的统计分析中,我们往往会遇到多重比较校正问题.多重比较校正的方法很多,如Bonferroni.False Discovery Rate(F ...

  4. 用matlab仿真导航信号,北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLAB程序)[互联网+]...

    <北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLAB程序)[互联网+]>由会员分享,可在线阅读,更多相关<北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLA ...

  5. 用matlab仿真导航信号,北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLAB程序)...

    <北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLAB程序)>由会员分享,可在线阅读,更多相关<北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLAB程序)(9 ...

  6. 【模糊综合评价的运用】——《电子舌技术在食用盐模糊感官评价中的应用》论文笔记(内附MATLAB程序)

    [模糊综合评价的运用]--<电子舌技术在食用盐模糊感官评价中的应用>论文笔记(内附MATLAB程序) 本文目录 1.因素集:(评价指标集)与评价事物相关的因素. 2. 评语集:(评价的结果 ...

  7. matlab程序,基于广义benders分解法的综合能源系统优化规划,关键词,综合能源系统规划,Benders分解

    matlab程序,基于广义benders分解法的综合能源系统优化规划,关键词,综合能源系统规划,Benders分解,机会约束规划. ID:5999661483864996小陈代码店

  8. matlab程序4名商人,商人们怎样安全过河附MATLAB程序完整.doc

    商人们怎样安全过河附MATLAB程序完整.doc *** 商人们怎样安全过河 随从们密约, 在河的任一岸, 一旦随从的人数比商人多, 就杀人越货. 但是乘船渡河的方案由商人决定. 商人们怎样才能安全过 ...

  9. MATLAB程序:基于主从博弈理论的共享储能与综合能源微网优化运行研究

    MATLAB程序:基于主从博弈理论的共享储能与综合能源微网优化运行研究. 提出共享储能背景下微网运营商与用户聚合商间的主从博弈模型,并证明Stackelberg 均衡解的存在性与唯一性. 最后,在 M ...

最新文章

  1. 三维点云去噪无监督学习:ICCV2019论文分析
  2. oracle一条sql的执行过程,请问执行一条sql的整个过程是怎样的,谢谢!
  3. lamp rpm mysql_centos5.9使用RPM包搭建lamp平台
  4. Jquery操作Cookie,保存商品ID值至本地文件中
  5. Eclipse IDE for Enterprise Java Developers和JDK8与apache-tomcat-8下载地址
  6. html像素绘制文字,HTML5 - Canvas的使用样例10(绘制文本)
  7. Python基础学习四 函数
  8. mac mysql 初始密码_mac下mysql安装后修改默认密码
  9. Pyqt5_QPushButton
  10. 【超图+CESIUM】【基础API使用示例】46、超图|CESIUM - 聚光源设置
  11. python里的url是什么意思_URI和URL的简介
  12. android 简书饿了么,分析饿了么详情页布局
  13. 用ps给照片添加水印
  14. 经济学中的M0 M1 M2 M3的含义
  15. 人民币转换美金的c语言代码大全,JS实现将人民币金额转换为大写的示例代码
  16. 卸载神器——IObit Uninstaller
  17. uni-app生成app的兼容性调研报告
  18. 2020西瓜直播弹幕协议版弹幕提取思路与实现py
  19. 数据预处理之scaling
  20. QT Widget.cpp重新命名、报错“xxxx“ was not declared in this scope

热门文章

  1. driver nvidia web_nvidiawebdriver驱动
  2. Arnold材质节点篇- 动态模糊Motion blur
  3. 使用TCPDF插件生成pdf以及pdf的中文处理
  4. CentOS下mysql 8.0.16 安装完整版教程
  5. Kindeditor 图片粘贴上传后设置图片属性
  6. SQL 数据库简单使用
  7. 为什么要配置数据源ODBC
  8. JPA @PersistenceContext和@Transactional Annotation
  9. android中的ellipsize设置(省略号的问题)
  10. BZOJ4416: [Shoi2013]阶乘字符串