logo资料库

应用于JPEG2000的97(53)提升小波算法及仿真原代码.doc

第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
资料共7页,全文预览结束
应用于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); %显示变换后的图像
分享到:
收藏