肖泉 陈莹莹《基于 MATLAB 小波变换的图像压缩及仿真实现》第1页 共 24 页
基于 MATLAB 小波变换的图像压缩及
仿真实现
学生姓名:肖泉 陈莹莹 指导老师:张建明
摘 要 图像压缩技术是用最少的数据量来表示尽可能多的原图像信息的一个
过程,这一领域的突破对于通信和多媒体事业的发展将具有深远的影响。本课程
论文主要介绍了基于MATLAB的小波变换基本原理和方法,以及小波变换用于
压缩图像的原理,并应用MATLAB 小波工具箱的相关函数和命令,从两个不同
的方式来实现对此算法的仿真。根据仿真结果进行分析,得出小波变换在图像压
缩中重要性。
关键词 图像压缩;小波变换;MATLAB
1 引 言
在近代科学研究、军事技术等领域中,获得信息非常重要,信息需要通过媒
体来进行记录、传播和获取。最重要的信息媒体是文字、图像和声音。图像是十
分直观和生动的,其内涵非常丰富。但是,表示图像需要大量的数据,图像数据
是高度相关的,或者说存在冗余信息,去掉这些冗余信息后可以有效压缩图像,
同时又不会损害图像的有效信息。通常情况下,图像的记录与传播首先是需要进
行数据压缩处理。小波变换是当前数学中迅速发展的一个领域,将小波分析用于
图像压缩是小波分析的一个重要方面。它的特点是压缩比高,压缩速度快,压缩
后能保持信号与图像的特征不变,且在传递中可以抗干扰。基于小波变换压缩图
像的算法就成为图像压缩界的热点。应用高级语言(如Basic、C)编写的仿真程
序来实现该算法则较为麻烦,而且仿真效果也不是十分理想[1]。本文主要应用
MATLAB发布的小波包工具箱中的相关函数与命令来实现基于小波变换的图像
肖泉 陈莹莹《基于 MATLAB 小波变换的图像压缩及仿真实现》第2页 共 24 页
压缩编码理论算法的仿真。MATLAB 是由美国MathWorks 公司推出的用于数值
计算和图形处理的科学计算软件,它集数值分析、矩阵计算、信号处理和图形显
示多种功能于一体,广泛应用于工业、电子、控制、信号及图像处理等各领域。
MATLAB 本身除了提供强大的图形绘制和输出功能外,而且软件中的小波工具
箱(WaveletToolbox 3. 0)包含的各种小波分析函数,可对信号与图像进行压缩处
理,压缩后能保持信号与图像的特征基本不变,压缩比高,压缩速度快,且在传
递过程中具有抗干扰能力[2]。
2 设计原理
2.1 连续小波变换
定义:设
t
)(
2 RL
(
)
,其傅立叶变换为
(ˆ ,当 )
(ˆ 满足允许条件(完
)
全重构条件或恒等分辨条件)
2)
(ˆ
C
R
d
(2-1)
时,我们称 )(t 为一个基本小波或母小波。将母函数 )(t 经伸缩和平移后得
)(,
tba
(
1
a
bt
a
)
,
;
aRba
0
(2-2)
称其为一个小波序列。其中 a 为伸缩因子,b 为平移因子。对于任意的函数
)(
f
t
2 RL
(
)
的连续小波变换为
),(
baW
f
f
,
,
ba
a
f
)(
t
(
2/1
R
bt
a
)
dt
其重构公式(逆变换)为
f
)(
t
1
C
1
2
a
),(
baW
(
f
bt
a
)
dadb
(2-3)
(2-4)
肖泉 陈莹莹《基于 MATLAB 小波变换的图像压缩及仿真实现》第3页 共 24 页
由于基小波 )(t 生成的小波
tba 在小波变换中对被分析的信号起着观测窗的
)(,
作用,所以 )(t 还应该满足一般函数的约束条件
t)( 〈
dt
(2-5)
故 )
(ˆ 是一个连续函数。这意味着,为了满足完全重构条件式, )
(ˆ 在原点必
须等于 0,即
)0(ˆ
)(
t
dt
0
(2-6)
为了使信号重构的实现在数值上是稳定的,处理完全重构条件外,还要求小波
)(t 的傅立叶变化满足下面的稳定性条件:
2)
2(ˆ
j
B
(2-7)
A
式中 0〈A B〈 [3]。
2.2 离散小波变换
在实际运用中,尤其是在计算机上实现时,连续小波必须加以离散化。因此,
有必要讨论连续小波
tba 和连续小波变换
)(,
),( baW f
的离散化。需要强调指出的
是,这一离散化都是针对连续的尺度参数 a 和连续平移参数 b 的,而不是针对时
间变量 t 的[4]。这一点与我们以前习惯的时间离散化不同。在连续小波中,考虑
函数:
)(
tba
,
a
2/1
(
bt
a
)
(2-8)
这里 Rb ,
Ra
,且 0a ,是容许的,为方便起见,在离散化中,总
限制 a 只取正值,这样相容性条件就变为
C
0
(ˆ
)
d
(2-9)
通常,把连续小波变换中尺度参数 a 和平移参数 b 的离散公式分别取作
a
0 ,
ja
b
j
00bka
,这里 Zj ,扩展步长 1
0 a 是固定值,为方便起见,总是假
肖泉 陈莹莹《基于 MATLAB 小波变换的图像压缩及仿真实现》第4页 共 24 页
定 1
0 a (由于 m 可取正也可取负,所以这个假定无关紧要)。所以对应的离散
小波函数
tkj 即可写作
)(,
,
kj
)(
t
a
0
j
2/
(
t
j
bka
00
a
j
0
)
a
0
j
2/
(
j
ta
0
kb
0
)
而离散化小波变换系数则可表示为
C
,
kj
f
)(
t
*
,
kj
)(
t
dt
f
,
,
kj
其重构公式为
f
)(
t
C
C
kj
,
,
kj
)(
t
(2-10)
(2-11)
(2-12)
C 是一个与信号无关的常数。然而,怎样选择 0a 和 0b ,才能够保证重构信号
的精度呢?显然,网格点应尽可能密(即 0a 和 0b 尽可能小),因为如果网格点越
稀疏,使用的小波函数
tkj 和离散小波系数 kjC , 就越少,信号重构的精确度也
)(,
就会越低[5]。
3 小波分析在图像处理中的应用
3.1 基于小波变换的图像局部压缩
基于离散余弦变换的图像压缩算法,其基本思想是在频域对信号进行分解,
驱除信号点之间的相关性,并找出重要系数,滤掉次要系数,以达到压缩的效果,
但该方法在处理过程中并不能提供时域的信息,在我们比较关心时域特性的时候
显得无能为力。
但是这种应用的需求是很广泛的,比如遥感测控图像,要求在整幅图像有很
高压缩比的同时,对热点部分的图像要有较高的分辨率,例如医疗图像,需要对
某个局部的细节部分有很高的分辨率,单纯的频域分析的方法显然不能达到这个
要求,虽然可以通过对图像进行分快分解,然后对每块作用不同的阈值或掩码来
达到这个要求,但分块大小相对固定,有失灵活。
肖泉 陈莹莹《基于 MATLAB 小波变换的图像压缩及仿真实现》第5页 共 24 页
在这个方面,小波分析就优越的多,由于小波分析固有的时频特性,我们可
以在时频两个方向对系数进行处理,这样就可以对我们感兴趣的部分提供不同的
压缩精度[6]。
下面我们利用小波变化的时频局部化特性,举一个局部压缩的例子,可以通
过这个例子看出小波变换在应用这类问题上的优越性。
load wbarb
%使用sym4小波对信号进行一层小波分解
[ca1,ch1,cv1,cd1]=dwt2(X,'sym4');
codca1=wcodemat(ca1,192);
codch1=wcodemat(ch1,192);
codcv1=wcodemat(cv1,192);
codcd1=wcodemat(cd1,192);
%将四个系数图像组合为一个图像
codx=[codca1,codch1,codcv1,codcd1]
%复制原图像的小波系数
rca1=ca1;
rch1=ch1;
rcv1=cv1;
rcd1=cd1;
%将三个细节系数的中部置零
rch1(33:97,33:97)=zeros(65,65);
rcv1(33:97,33:97)=zeros(65,65);
rcd1(33:97,33:97)=zeros(65,65);
codrca1=wcodemat(rca1,192);
codrch1=wcodemat(rch1,192);
codrcv1=wcodemat(rcv1,192);
codrcd1=wcodemat(rcd1,192);
%将处理后的系数图像组合为一个图像
codrx=[codrca1,codrch1,codrcv1,codrcd1]
肖泉 陈莹莹《基于 MATLAB 小波变换的图像压缩及仿真实现》第6页 共 24 页
%重建处理后的系数
rx=idwt2(rca1,rch1,rcv1,rcd1,'sym4');
subplot(221);image(wcodemat(X,192)),colormap(map);title('原始图像');
subplot(222);image(codx),colormap(map);title('一层分解后各层系数图像');
subplot(223);image(wcodemat(rx,192)),colormap(map);title('压缩图像');
subplot(224);image(codrx),colormap(map);title('处理后各层系数图像');
%求压缩信号的能量成分
per=norm(rx)/norm(X)
per =1.0000
%求压缩信号与原信号的标准差
err=norm(rx-X)
err =586.4979
50
100
150
200
250
50
100
150
200
250
原 始 图 像
一 层 分 解 后 各 层 系 数 图 像
20
40
60
80
100
120
50
100
150
200
250
100
200
300
400
500
压 缩 图 像
处 理 后 各 层 系 数 图 像
20
40
60
80
100
120
50
100
150
200
250
100
200
300
400
500
图3-1 利用小波变换的局部压缩图像
从图3-1可以看出,小波域的系数表示的是原图像各频率段的细节信息,并
且给我们提供了一种位移相关的信息表述方式,我们可以通过对局部细节系数处
理来达到局部压缩的效果。
肖泉 陈莹莹《基于 MATLAB 小波变换的图像压缩及仿真实现》第7页 共 24 页
在本例中,我们把图像中部的细节系数都置零,从压缩图像中可以很明显地
看出只有中间部分变得模糊(比如在原图中很清晰的围巾的条纹不能分辨),而
其他部分的细节信息仍然可以分辨的很清楚。
最后需要说明的是本例只是为了演示小波分析应用在图像局部压缩的方法,
在实际的应用中,可能不会只做一层变换,而且作用阈值的方式可能也不会是将
局部细节系数全部清除,更一般的情况是在N层变换中通过选择零系数比例或能
量保留成分作用不同的阈值,实现分片的局部压缩。而且,作用的阈值可以是方
向相关的,即在三个不同方向的细节系数上作用不同的阈值。
3.2 利用二维小波分析进行图像压缩
二维小波分析用于图像压缩是小波分析应用的一个重要方面。它的特点是压
缩比高,压缩速度快,压缩后能保持图像的特征基本不变,且在传递过程中可以
抗干扰。小波分析用于图像压缩具有明显的优点。
下面给出一个图像信号(即一个二维信号,文件名为 wbarb.mat),利用二维
小波分析对图像进行压缩。一个图像作小波分解后,可得到一系列不同分辨率的
子图像,不同分辨率的子图像对应的频率是不相同的。高分辨率(即高频)子图
像上大部分点的数值都接近于 0,越是高频这种现象越明显。对一个图像来说,
表现一个图像最主要的部分是低频部分,所以一个最简单的压缩方法是利用小波
分解,去掉图像的高频部分而只保留低频部分。图像压缩可按如下程序进行处理。
load wbarb;
subplot(221);image(X);colormap(map)
title('原始图像');
axis square
disp('压缩前图像X的大小:');
whos('X')
%对图像用bior3.7小波进行2层小波分解
[c,s]=wavedec2(X,2,'bior3.7');
%提取小波分解结构中第一层低频系数和高频系数
肖泉 陈莹莹《基于 MATLAB 小波变换的图像压缩及仿真实现》第8页 共 24 页
ca1=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);image(c1);
axis square
title('分解后低频和高频信息');
%下面进行图像压缩处理
%保留小波分解第一层低频信息,进行图像的压缩
%第一层的低频信息即为ca1,显示第一层的低频信息
%首先对第一层信息进行量化编码
ca1=appcoef2(c,s,'bior3.7',1);
ca1=wcodemat(ca1,440,'mat',0);
%改变图像的高度
ca1=0.5*ca1;
subplot(223);image(ca1);colormap(map);
axis square
title('第一次压缩');
disp('第一次压缩图像的大小为:');
whos('ca1')
%保留小波分解第二层低频信息,进行图像的压缩,此时压缩比更大
%第二层的低频信息即为ca2,显示第二层的低频信息