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

问题一:随机选取一幅图像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 
  • 21
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值