数字图像处理学习笔记(十九)研究系数的阈值对图像质量、压缩率的影响

实验截图:

  • 原图与其DCT系数图:
    在这里插入图片描述

  • 改变系数进行不同的DCT变换的结果
    在这里插入图片描述

实验代码:

img=imread('erciyuan.jpg');
img=rgb2gray(img);
img=im2double(img);
matrix=dctmtx(8);
dct = blkproc(img, [8 8], 'P1 * x * P2', matrix, matrix');
figure(1);subplot(1,2,1);imshow(img);title('原图');
subplot(1,2,2);imshow(log(abs(dct)),[]);title('DCT系数');
mask1=[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个
 
mask2=[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个
 
mask3=[1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 0
1 1 1 1 1 1 0 0
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 0 0 0 0 0 0];%保留了左上角36个
 
mask4=[ 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1];%保留了全部
 
mask5=[ 0 0 1 1 1 1 1 1
0 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1];%保留了右下角64-361)个
 
mask6=[ 0 0 0 0 1 1 1 1
0 0 0 1 1 1 1 1
0 0 1 1 1 1 1 1
0 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1];%保留了右下右下角64-1054)个
 
mask7=[ 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 1
0 0 0 0 0 1 1 1
0 0 0 0 1 1 1 1
0 0 0 1 1 1 1 1
0 0 1 1 1 1 1 1
0 1 1 1 1 1 1 1];%保留了右下右下角64-3628)个
 
y1=blkproc(dct,[8 8],'P1.*x',mask1);
y2=blkproc(dct,[8 8],'P1.*x',mask2);
y3=blkproc(dct,[8 8],'P1.*x',mask3);
y4=blkproc(dct,[8 8],'P1.*x',mask4);
y5=blkproc(dct,[8 8],'P1.*x',mask5);
y6=blkproc(dct,[8 8],'P1.*x',mask6);
y7=blkproc(dct,[8 8],'P1.*x',mask7);
 
y11=blkproc(y1,[8 8],'P1*x*P2',matrix',matrix);
y22=blkproc(y2,[8 8],'P1*x*P2',matrix',matrix);
y33=blkproc(y3,[8 8],'P1*x*P2',matrix',matrix);
y44=blkproc(y4,[8 8],'P1*x*P2',matrix',matrix);
y55=blkproc(y5,[8 8],'P1*x*P2',matrix',matrix);
y66=blkproc(y6,[8 8],'P1*x*P2',matrix',matrix);
y77=blkproc(y7,[8 8],'P1*x*P2',matrix',matrix);
 
figure(2);subplot(2,4,1),imshow(img),title('原图');
figure(2);subplot(2,4,2),imshow(y11),title('还原保留左上角3');
figure(2);subplot(2,4,3),imshow(y22),title('还原保留左上角10');
figure(2);subplot(2,4,4),imshow(y33),title('还原保留左上角36');
figure(2);subplot(2,4,5),imshow(y44),title('还原保留全部');
figure(2);subplot(2,4,6),imshow(y55),title('还原保留右下角64-3(61)个');
figure(2);subplot(2,4,7),imshow(y66),title('还原保留右下64-10(54)个');
figure(2);subplot(2,4,8),imshow(y77),title('还原保留右下64-36(28)个'); 

结果分析:

  • DCT变换,即离散余弦变换,是一种广泛应用的变换编码方法,它能够以数据无关的方式解除输入信号之间的相关性,因而应用广泛。我们在进行DCT变换时,可以将原图分割为一个个88的小块,然后再对这些小块分别进行DCT变换。同时可以调用函数dctmtx来得到变换的矩阵matrix,我们让matrixB*matrix’就能实现变换。接着对矩阵块进行量化。同时建立合适的量化矩阵,对矩阵的每个元素进行除以对应的量化值。我们对DCT系数分别进行遮罩,分别对左上角、右上角赋值为0,对小块的元素进行量化。
    通过上面的图片可知,只保留左上角三个数据,就可以得到一个相对完整的图片,而如果保留除左上角三个数据外的其他所有数据,也只得到了一些图像的边缘细节信息。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值