问题一:随机选取一幅图像x.jpg,先将图像分解为8x8个数据块,然后分别对分解后的每个数据小方块进行DCT及IDCT变换,分别保留左上角3、10、15、32个系数进行处理,并对结果进行对比分析。
clear
close all
clc%清理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 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];%保留左上角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 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];%保留左上角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 0
1 1 1 0 0 0 0 0
1 1 0 0 0 0 0 0
1 0