应用于JPEG2000的9/7(5/3)提升小波算法及MATLAB仿真
摘 要:提升算法(Lifting Scheme)是一种新的双正交小波构造方法。在JPEG2000标准中, 采
用了基于提升算法的9/7(5/3)滤波器。详细地介绍了提升算法的原理及实现步骤,推导了9/7
小波滤波器的提升格式,并对文中的提升算法进行了MATLAB仿真,实验表明此提升算法降低了计
算复杂度,有效地完成了对图像的压缩。
关键词:小波变换;提升算法;JPEG2000 ;MATLAB仿真
Matlab emulation of 9/7(5/3) Lifting-Based Wavelet Transform for JPEG2000
Abstract: The lifting scheme is a kind of new method of biorthogonal wavelet structure.
According to the JPEG2000 standards adopts the 9/7(5/3) filters based on the lifting
scheme. Introduces the principle and realization of the lifting scheme in detail and
deduces the 9/7 filters, and carries out Matlab emulation. It confirms that the lifting
scheme makes the complications of calculation lower and the image compression
efficiently.
Key words: Wavelet transform; Lifting scheme; JPEG2000; Matlab emulation
1 引言
小波变换是近几年发展起来的一种信号分析工具,由于其良好的时频局部特性和多分辨分析
特性已成为图像压缩和处理的基础。新一代静止图像压缩标准JPEG2000 也将小波变换纳入标准
之中,并采用二维离散小波变换(2D DWT)作为系统编码算法的核心。二维离散小波变换最有效的
实现方法之一是采用Mallat的塔式分解方法,通过在图像的水平和垂直方向交替采用低通和高通
滤波得到,如图1 所示。这种传统的基于卷积的
离散小波变换计算量大,对存储空间的要求高,提
升小波的出现有效地解决了这一问题。提升算法
相对于Mallat算法而言,是一种更为快速有效的
小波变换实现方法,它不依赖于傅里叶变换,完
全在空域完成了对双正交小波滤波器的构造。
Daubechies已经证明,任何离散小波变换或具有
有限长滤波器的两阶滤波变换都可以被分解成为
一系列简单的提升步骤,所有能够用Mallat算法
实现的小波,都可以用提升算法来实现。在JPEG2000标准中, 用一维的提升运算, 先纵向处理,
再横向处理, 以此来完成二维图像的离散小波变换。在提升运算执行之前, 必须对原始数据进行
对称的周期性扩展, 以利于图像边界的处理。
2 提升算法的实现
Mallat 算法用于二维离散小波分解
图1
提升算法是第二代离散小波变换方法, 避免了复杂的卷积运算,便于实现;还可以进行整系
数和无损滤波[2]。提升方法主要有3个步骤:分裂(Split)、预测(Predict)和更新(Update),
如图2 所示。分裂是把输入信号s(n)分为两个子信号,即由其偶序号采样组成的子信号se=s2k(k
∈Z)和由其奇序号采样组成的子信号so=s2k+1(k∈Z);预测是通过近似信号来计算细节信号;更
新是通过细节信号来计算近似信号。其中预测和更新可以重复多次,最后还有可能再经过一个缩
放步骤。这整个过程完成一次小波变换,得到输入信号s(n)的近似分量c(n)和细节分量d(n)。在
JPEG2000 标准中, 采用了基于提升
算法的5/3可逆滤波器和9/7不可逆滤
波器[1]。
基于提升算法的离散小波变换的
主要特点在于将低通和高通滤波器分
解成为一系列上三角或下三角矩阵,
从而将滤波器的实现转换为矩阵的联
合乘积。Daubechies 9/7小波滤波器
是一种常用的双正交小波滤波器,在
JPEG2000中采用了这种滤波器对图像进行有损压缩。9/7小波滤波器的系数为:
图2 小波变换的提升方法示意图
g0=1.115087052456994
g1=-0.5912717631142470
g2=-0.05754352622849957
g3=0.09127176311424948
h0=0.6029490182363579
h1=0.2668641184428723
h2=0.07822326652898785
h3=0.01686411844287495
h4=0.02674875741080976
提升变换的第一步是取得与滤波器相对应的多项矩阵。9/7小波滤波器的z变换为:
~
h z
z
z
z
z
1
2
2
3
4
4
h z
4
h
0
3
h z
3
g z
3
2
z
2
3
z
3
4
z
2
h z
1
g z
1
h z
2
g z
2
0
1
z
g
~
g z
变换可表示为如下所示:
~
h
z
z
2
2
h
0
g
h z
2
g z
2
~
g
z
则可以得到:
0
h z
4
1
z
2
z
2
~
h
~
h
~
g
~
g
e
o
e
o
z
z
z
z
h
0
h z
1
g
0
g z
1
h z
2
1
g z
2
1
1
z
h z
3
2
2
h z
4
z
1
1
z
g z
3
2
z
1
2
1
h z
3
z
2
4
4
z
g z
1
2
1
z
1
h z
1
g z
3
4
2
z
得到了变换的多项矩阵:
~
p
z
h
0
h z
2
g
0
1
z
g z
2
h z
4
1
z
2
z
2
h z
1
g z
1
1
1
第二步是将多项矩阵转化为提升步骤:
h z
3
g z
3
2
2
1
1
z
z
'
g z
'
h z
x z
x
g z
h z
z
2
e
2
h z s z
2
g z t z
1
z x
z
o
2
s z 、
t z --劳伦多项式
可得:
~
p
z
~
'
h
e
~
'
g
e
z
z
h z
1
1
g z
1
1
h z
3
g z
3
2
1
z
2
1
z
1
z
~
t
0
1
由劳伦多项式的欧几里得定理,可以计算得到:
r
0
h
0
2
h h h
4 1
3
/
r
1
h
2
h
4
3/
h h h
4 1
s
0
h
1
h
3
h r
3 0
1/
r
t
0
r
0
12
r
定义:
/
h h
4
3
-1.586134342
1/
h r
3
-0.0529801186
r
1
0/
s
0.882911075
s
0
0/
t
0.443506852
k
t
0
~
p
z
1
0
r
0
1
2
r
1
z
1
1.230174105
1
1
z
图3
9/ 7 小波滤波器的提升实现结构
图4 原始数据的周期性对称延拓
从而可以得到:
0
1
1
0
1
1
z
1
1
1
z
0
1
0
k
0 1
k
如图3 所示给出了9/7小波滤波器的提升实现结构。对于5/3小波滤波器同理可得,此时提升
系数α=-0.5、β=0.25。
3 对称数据延拓算法
在JPEG2000 标准中, 离散小波变换包含两步:数据延拓和提升运算。为了提升运算能够顺
利进行, 在被处理的原始数据两端应分别做周期性的对称延拓[3](图4)。通过在起始与结尾端改变
小波的计算过程,将数据的对称延拓嵌入到数据的计算过程中。采用对称延拓处理后的9/7小波
的计算过程如下:
s
s
1,2
0,2 1
2
s
s
1,2
0,2 1
l
l
(1)
d
1,
l
对称延拓(偶数结束)
(1)
d
1, 1
l
(1)
d
1,
l
s
0,2
(1)
s
1,
l
s
1,2
正常
正常
l
2
l
l
l
(1)
s
1, 1
l
d
1, 1
l
对称延拓(奇数开始)
正常
对称延拓(偶数结束)
正常
对称延拓(奇数开始)
s
1,
l
d
1,
(1)
2
s
d
1,
0,2
l
l
(1)
(1)
d
s
1,
1,
l
l
(1)
(1)
2
d
s
1,
1,
l
l
(1)
d
s
1,
1,
l
(1)
2
d
s
1,
1,
l
kd
1,
s
k
1,
4 实验及结果
d
1,
s
1,
l
l
l
l
l
l
l
本文分别对5/3可逆滤波器和9/7不可逆滤波器的提升算法进行了MATLAB仿真。仿真结果如图
5、图6所示。9/7小波滤波器对图像进行了有损压缩,相对于5/3小波滤波器压缩比更大。
图 5
5/3 小波变换--依次为原图、行变换后、列变换后、小波系数按 LL,HL,LH,HH 子带重排后
图 6
9/7 小波变换--依次为原图、行变换后、列变换后、小波系数按 LL,HL,LH,HH 子带重排后
5 结论
提升算法是一种新的双正交小波构造方法,它完全在空域对信号进行变换,完成了对信号频
域特性的分析。并且,由于其独特的结构,有效地减少了运行时间,获得了较大的压缩效果,是
一种快速有效的小波实现方法。在JPEG2000标准中, 采用了基于提升算法的5/3可逆滤波器和9/7
不可逆滤波器。
参考文献
[1] ISO/IEC.FCD15444-1: 2000v1.0, JPEG2000 Image Coding System [S].
[2] Sweldens W. The lifting scheme: construction of second generation wavelets. SIAM
J Math Anal [J],1997; 29(2): 511-546.
[3] K.C.B Tan and T.Arslan. Low power embedded extansion algorithm for lifting_based
discrete wavelet transform in JPEG2000. IEEE Electronics Letters,Vol.37,No.22,25th
Oct.2001:1328-1330.
附:文中所用 97/53 小波变换 MATLAB 源程序
function Dwt2d_wp(w97)
%参数 w97=1 时,使用 9/7 滤波器;w97=0 时,使用 5/3 滤波器;
clc;
Image=imread('lena.bmp');
column=256;
row=256;
figure(1),imshow(Image);
if w97==1
%97 小波变换
ParaA = -1.586134342; ParaB = -0.052980118; ParaC = 0.882911075;
ParaD = 0.443506852; ParaE = 1.230174105; ParaEN = 0.812893066;
%**************************行 变 换************************************
%step 1: ParaA = -1.5;
for j = 2:2:column
if j~=column
Image(:,j) = Image(:,j) + (ParaA*(Image(:,j-1)+Image(:,j+1)));
else
Image(:,j) = Image(:,j) + (ParaA*(Image(:,j-1)+Image(:,j-1))); %对称延拓
end
end
%step 2:ParaB = -0.0625;
for j = 1:2:column-1
if j==1
Image(:,j) = Image(:,j) + (ParaB*(Image(:,j+1)+Image(:,j+1))); %对称延拓
else
Image(:,j) = Image(:,j) + (ParaB*(Image(:,j-1)+Image(:,j+1)));
end
end
%step 3: ParaC = 0.8;
for j = 2:2:column
if j~=column
Image(:,j) = Image(:,j) + (ParaC*(Image(:,j-1)+Image(:,j+1)));
else
Image(:,j) = Image(:,j) + (ParaC*(Image(:,j-1)+Image(:,j-1))); %对称延拓
end
end
%step 4: ParaD = 0.46875;
for j = 1:2:column-1
if j==1
Image(:,j) = Image(:,j) + (ParaD*(Image(:,j+1)+Image(:,j+1))); %对称延拓
else
Image(:,j) = Image(:,j) + (ParaD*(Image(:,j-1)+Image(:,j+1)));
end
end
%step 5,6
for j = 1:column/2
Image(:,2*j-1) = Image(:,2*j-1)*ParaEN;
Image(:,2*j)
= -Image(:,2*j)*ParaE;
end
figure(2),imshow(Image);
%**************************列 变 换************************************
%step 1: ParaA = -1.5;
for j = 2:2:row
if j~=row
Image(j,:) = Image(j,:) + (ParaA*(Image(j-1,:)+Image(j+1,:)));
else
Image(j,:) = Image(j,:) + (ParaA*(Image(j-1,:)+Image(j-1,:))); %对称延拓
end
end
%step 2:ParaB = -0.0625;
for j = 1:2:row-1
if j==1
Image(j,:) = Image(j,:) + (ParaB*(Image(j+1,:)+Image(j+1,:))); %对称延拓
else
Image(j,:) = Image(j,:) + (ParaB*(Image(j-1,:)+Image(j+1,:)));
end
end
%step 3: ParaC = 0.8;
for j = 2:2:row
if j~=row
Image(j,:) = Image(j,:) + (ParaC*(Image(j-1,:)+Image(j+1,:)));
else
Image(j,:) = Image(j,:) + (ParaC*(Image(j-1,:)+Image(j-1,:))); %对称延拓
end
end
%step 4: ParaD = 0.46875;
for j = 1:2:row-1
if j==1
Image(j,:) = Image(j,:) + (ParaD*(Image(j+1,:)+Image(j+1,:))); %对称延拓
else
Image(j,:) = Image(j,:) + (ParaD*(Image(j-1,:)+Image(j+1,:)));
end
end
%step 5,6
for j = 1:column/2
Image(2*j-1,:) = Image(2*j-1,:)*ParaEN;
Image(2*j,:)
= -Image(2*j,:)*ParaE;
end
Image = floor(0.5 + Image);
figure(3),imshow(Image);
else %5/3 小波变换 整数可逆变换 ************************************
ParaA = 0.5; ParaB = 0.25;
%**************************行 变 换*****************************
%step 1: ParaA = 0.5;
for j = 2:2:column
if j~=column
Image(:,j) = Image(:,j) - floor(ParaA*(Image(:,j-1)+Image(:,j+1)));
else
Image(:,j) = Image(:,j) - floor(ParaA*(Image(:,j-1)+Image(:,j-1))); %对称延拓
end
end
%step 2:ParaB = 0.25;
for j = 1:2:column-1
if j==1
Image(:,j) = Image(:,j) + floor(ParaB*(Image(:,j+1)+Image(:,j+1)+2)); %对称延拓
else
Image(:,j) = Image(:,j) + floor(ParaB*(Image(:,j-1)+Image(:,j+1)+2));
end
end
figure(2),imshow(Image);
%**************************列 变 换******************************
%step 1: ParaA = 0.5;
for j = 2:2:row
if j~=row
Image(j,:) = Image(j,:) - floor(ParaA*(Image(j-1,:)+Image(j+1,:)));
else
Image(j,:) = Image(j,:) - floor(ParaA*(Image(j-1,:)+Image(j-1,:))); %对称延拓
end
end
%step 2:ParaB = 0.25;
for j = 1:2:row-1
if j==1
Image(j,:) = Image(j,:) + floor(ParaB*(Image(j+1,:)+Image(j+1,:)+2)); %对称延拓
else
Image(j,:) = Image(j,:) + floor(ParaB*(Image(j-1,:)+Image(j+1,:)+2));
end
end
figure(3),imshow(Image);
%***************************************************************
end
for i = 1:row/2
%小波系数重排,分别放入四个子带中,LL,HL,LH,HH
for j = 1:column/2
LL(i,j) = Image(2*i-1,2*j-1);
HL(i,j) = Image(2*i-1,2*j);
LH(i,j) = Image(2*i,2*j-1);
HH(i,j) = Image(2*i,2*j);
end
end
temp=[LL,HL;LH,HH];
figure(4),imshow(temp); %显示变换后的图像