实验六 图像压缩

  • 实验目的

1、理解有损压缩和无损压缩的概念:

2、理解图像压缩的主要原则和目的:

3、利用MATLAB程序进行图像压缩。

二、实验环境

硬件:一般PC机

操作系统:WindowsXP

编程平台:MATLAB或高级语言

三、实验原理

1、有损压缩和无损压缩的基本流程和基本理论

2、Huffman编码的基本方法

3、JPEG压缩标准基本理论

1、下图是典型的变换编码流程和方法,其采用了DCT变换对256级灰度图进行压缩处理,请实现其过程,并进行以下处理和分析:

(1)对图像进行8X8分块处理并作DCT变换,观察图像8X8子块的DCT系数的分布,并分析其特点;

(2)对DCT系数进行量化及反量化处理,求反量化系数的逆DCT变换,重新显示重建图像、误差图像和误差图像的直方图;

(3)将量化步长分别增大为初始值的2倍、4倍、8倍后再进行DCT变换编码,显示不同量化步长条件下的重建图像、误差图像以及误差图像的直方图。分析重建图像质量和量化步长的关系。

%增加量化步长(N分别为2,4,8)
clc;
clear all
% 读取图像并转换为灰度图像
I0 = imread('E:\hg.jpg');
I = rgb2gray(I0);
% JPEG量化矩阵
jpeg = [16 11 10 16 24 40 51 61
        12 12 14 19 26 58 60 55
        14 13 16 24 40 57 69 56
        14 17 22 29 51 87 80 62
        18 22 37 56 68 109 103 77
        24 35 55 64 81 104 113 92
        49 64 78 87 103 121 120 101
        72 92 95 98 112 100 103 99]*4;

% 预分配数组
I1 = zeros(size(I));
I2 = zeros(size(I));
I3 = zeros(size(I));
% 确保处理的块在图像范围内
[row, col] = size(I);
for m = 1:8:row-7
    for n = 1:8:col-7
        J = I(m:m+7, n:n+7);
        I1(m:m+7, n:n+7) = dct2(J);
        I2(m:m+7, n:n+7) = round(I1(m:m+7, n:n+7) ./ jpeg);
        I2(m:m+7, n:n+7) = I2(m:m+7, n:n+7) .* jpeg;
        I3(m:m+7, n:n+7) = idct2(I2(m:m+7, n:n+7));
    end
end
% 转换数据类型
I3 = uint8(I3);
% 显示图像
figure;
subplot(221); imshow(I); title('原图像');
subplot(222); imshow(I1, []); title('经DCT变化的图像');
subplot(223); imshow(I2, []); title('对经DCT变化的图像进行量化');
subplot(224); imshow(I3); title('反量化的图像');

% 计算误差图像并显示
I4 = I - I3;
figure;
subplot(211); imshow(I4, []); title('误差图像');
subplot(212); imhist(I4); title('误差直方图');

参考p368-373,实现16×16分块离散余弦变换(DCT)编码,用zigzag方式保留每一块的前10个和前21个系数,再进行DCT解码,即通过去掉DCT变换部分系数而实现压缩。编写程序并分别显示解码后的两个图。

I=imread('E:\hg.jpg');
i=rgb2gray(I);
i=im2double(i);
mask1=[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 0
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 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 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 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 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 ];
mask2=[1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0
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 0
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 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 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 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 ];
T=dctmtx(16);
B=blkproc(i,[16 16],'P1*x*P2',T,T');
i1=blkproc(B,[16 16],'P1.*x',mask1);
i2=blkproc(B,[16 16],'P1.*x',mask2);
ii1=blkproc(i1,[16 16],'P1*x*P2',T',T);
ii2=blkproc(i2,[16 16],'P1*x*P2',T',T);
figure,
subplot(121);imshow(ii1); title('第一种压缩比(mask1)');
subplot(122);imshow(ii2); title('第一种压缩比(mask2)');

用imwrite(原始图像,目标图像,'quality',比率)命令对灰度图实现质量为10、30、50、75、90的JPEG压缩。

I=imread('E:\hg.jpg');
imwrite(I,'test1.jpg','quality',10);
J1 = imread('test1.jpg');
imwrite(I,'test2.jpg','quality',30);
J2 = imread('test2.jpg');
imwrite(I,'test3.jpg','quality',50);
J3 = imread('test3.jpg');
imwrite(I,'test4.jpg','quality',75);
J4 = imread('test4.jpg');
imwrite(I,'test2.jpg','quality',90);
J5 = imread('test2.jpg');
subplot(2,3,1),imshow(I); title('原图')
subplot(2,3,2),imshow(J1); title('压缩 quality=10')
subplot(2,3,3),imshow(J2); title('压缩 quality=30')
subplot(2,3,4),imshow(J3); title('压缩 quality=50')
subplot(2,3,5),imshow(J4); title('压缩 quality=75')
subplot(2,3,6),imshow(J5); title('压缩 quality=90')

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值