📄 jpeg_dct.m
字号:
function jpeg_dct(I,z)
% I=imread('football.jpg');%读入原始图像,该图片在安装matlab的目录中找,原图为jpeg图象
Y=im2double(I);%图像存储类型转换
T=dctmtx(8);%离散余弦变换矩阵
B(:,:,1)=blkproc(Y(:,:,1),[8 8],'P1*x*P2',T,T');
B(:,:,2)=blkproc(Y(:,:,2),[8 8],'P1*x*P2',T,T');
B(:,:,3)=blkproc(Y(:,:,3),[8 8],'P1*x*P2',T,T');
%对原图像进行DCT变换
z=fix(z);
t(1:z)=1;
t(z+1:64)=0;
mask=jpeg_Dzz8(t);
B2(:,:,1)=blkproc(B(:,:,1),[8 8],'P1.*x',mask);
B2(:,:,2)=blkproc(B(:,:,2),[8 8],'P1.*x',mask);
B2(:,:,3)=blkproc(B(:,:,3),[8 8],'P1.*x',mask);
%数据压缩,丢弃右下角高频数据
I2(:,:,1)=blkproc(B2(:,:,1),[8 8],'P1*x*P2',T',T);
I2(:,:,2)=blkproc(B2(:,:,2),[8 8],'P1*x*P2',T',T);
I2(:,:,3)=blkproc(B2(:,:,3),[8 8],'P1*x*P2',T',T);
%进行DCT反变换,得到压缩后的图像
figure;
set(gcf,'unit','normalized','position',[0.4,0.5,0.3,0.3]);%设置图形窗大小
set(gcf,'menubar','none'); %删除图形窗工具条
str='量化矩阵中1的个数为';
set(gcf,'name',[str sprintf('%1.4g\',z)],'numbertitle','off'); %书写图形窗名
imshow(I2)
title('DCT变换压缩后的图像')
imwrite(I2,'dct.jpg');%输出压缩后的图像,文件名为football_dct.jpg
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -