长期以来,图像压缩编码利用离散余弦变换(DCT)作为主要的变换技术,并成功的应用于各种标准,比如JPEG、MPEG-1、MPEG-2。但是,在基于DCT图像变换编码中,人们将图像分为88像素或者1616像素的块来处理,从而容易出现方块效应与蚊式噪声。小波变换是全局变换,在时域和频域都由良好的局部优化性能。小波变换将图像的像素解相关的变换系数进行编码,比经典编码的效率更高,而且几乎没有失真,在应用中易于考虑人类的视觉特性,从而成为图像压缩编码的主要技术之一。小波变换在信号的高频部分可以取得较好的时间分辨率:在信号的低频部分,可以取得较好的频率分辨率,从而能有效地从信号(如语音、图像等)中提取信息,达到数据压缩的目的。下图为小波编解码系统的框图。

dwt图像 python dwt图像压缩流程图_变换编码

基于小波变换的图像压缩基本步骤如下:

①用小波对图像层分解并提取分解结构中的低频和高频系数

②各频率成分重构

③对第一层低频信息压缩

④对第二层低频信息压缩

close all;                        % 清理工作空间
clear;                 
X=imread('bar.bmp');            
X=rgb2gray(X);
subplot(221); imshow(X);             
title('原始图像(小波变换)');     
disp('压缩前图像X的大小');
whos('X')
%对图像用小波进行层小波分解
[c,s]=wavedec2(X,2,'bior3.7');
%提取小波分解结构中的一层的低频系数和高频系数
cal=appcoef2(c,s,'bior3.7',1);
ch1=detcoef2('h',c,s,1);      %水平方向
cv1=detcoef2('v',c,s,1);      %垂直方向
cd1=detcoef2('d',c,s,1);      %斜线方向
%各频率成份重构
a1=wrcoef2('a',c,s,'bior3.7',1);
h1=wrcoef2('h',c,s,'bior3.7',1);
v1=wrcoef2('v',c,s,'bior3.7',1);
d1=wrcoef2('d',c,s,'bior3.7',1);
c1=[a1,h1;v1,d1];
subplot(222),imshow(c1,[]);
title ('分解后低频和高频信息');
 
%进行图像压缩
%保留小波分解第一层低频信息
%首先对第一层信息进行量化编码
ca1=appcoef2(c,s,'bior3.7',1);
ca1=wcodemat(ca1,440,'mat',0);
%改变图像高度并显示
ca1=0.5*ca1;
subplot(223);imshow(cal,[]);
title('第一次压缩图像');
disp('第一次压缩图像的大小为:');
whos('ca1')
%保留小波分解第二层低频信息进行压缩
ca2=appcoef2(c,s,'bior3.7',2);
%首先对第二层信息进行量化编码
ca2=wcodemat(ca2,440,'mat',0);
%改变图像高度并显示
ca2=0.25*ca2;
subplot(224);imshow(ca2,[]);
title('第二次压缩图像');
disp('第二次压缩图像的大小为:');
whos('ca2')

实验结果:

dwt图像 python dwt图像压缩流程图_变换编码_02