码迷,mamicode.com
首页 > 其他好文 > 详细

Wavelet Transform & Image Compression

时间:2016-02-18 10:03:58      阅读:361      评论:0      收藏:0      [点我收藏+]

标签:

                                         /***********************Wavelet  Transform出现背景***********************/

       图像编码在保证一定重构质量的前提下,通过取出图像中的各种冗余,以尽量少的比特数来表示图像。

       图像编码长期以来主要利用离散余弦变换(DCT)作为变换编码的主要技术,然而存在如下一些问题:(1)利用DCT变换存在明显的方块效应,(2)不适用于对非平稳信号,(3)要进一步提高压缩性能很困难。

       小波变换是在短时傅里叶变换的基础上发展起来的一种新型变换方法,他是一种时—频分析法,具有多分辨率分析 (MultiresolutionAnalysis)的特点,而且在时、频域都具有表征信号局部特征的能力,是一种窗口大小不变、形状可变、时间窗和频率 窗都可以改变的时频局部化分析方法。小波变换由于具有很好的时—频特性而且可以匹配人类视觉系统的特性,因而得到图像压缩编码领域的极大关注。

       

       首先我们简单了解一下二维小波变换的塔式结构。我们知道,一维小波变换其实是将一维原始信号分别经过低通滤波和高通滤波以及二元下抽样得到信号的低频部分 L和高频部分H。而根据Mallat算法,二维小波变换可以用一系列的一维小波变换得到。对一幅m行n列的图像,二维小波变换的过程是先对图像的每一行做 一维小波变换,得到L和H两个对半部分;然后对得到的LH图像(仍是m行n列)的每一列做一维小波变换。这样经过一级小波变换后的图像就可以分为 LL,HL,LH,HH四个部分,如下图所示,就是一级二维小波变换的塔式结构:
LL
HL
LH
HH
图1
        而二级、三级以至更高级的二维小波变换则是对上一级小波变换后图像的左上角部分(LL部分)再进行一级二维小波变换,是一个递归过程。下图是三级二维小波变换的塔式结构图:
LL3
HL3
HL2
HL1
LH3
HH3
LH2
HH2
LH1
HH1
图2
       一个图像经过小波分解后,可以得到一系列不同分辨率的子图像,不同分辨率的子图像对应的频率也不同。高分辨率(即高频)子图像上大部分点的数值都接近于 0,分辨率越高,这种现象越明显。要注意的是,在N级二维小波分解中,分解级别越高的子图像,频率越低。例如图2的三级塔式结构中,子图像HL2、 LH2、HH2的频率要比子图像HL1、LH1、HH1的频率低,相应地分辨率也较低。根据不同分辨率下小波变换系数的这种层次模型,我们可以得到以下三 种简单的图像压缩方案。
     
       方案一:舍高频,取低频
        一幅图像最主要的表现部分是低频部分,因此我们可以在小波重构时,只保留小波分解得到的低频部分,而高频部分系数作置0处理。这种方法得到的图像能量损失大,图像模糊,很少采用。
另外,也可以对高频部分的局部区域系数置0,这样重构的图像就会有局部模糊、其余清晰的效果。
       方案二:阈值法
       对图像进行多级小波分解后,保留低频系数不变,然后选取一个全局阈值来处理各级高频系数;或者不同级别的高频系数用不同的阈值处理。绝对值低于阈值的高频 系数置0,否则保留。用保留的非零小波系数进行重构。Matlab中用函数ddencmp()可获取压缩过程中的默认阈值,用函数wdencmp()能对 一维、二维信号进行小波压缩。
        方案三:截取法
        将小波分解得到的全部系数按照绝对值大小排序,只保留最大的x %的系数,剩余的系数置0。不过这种方法的压缩比并不一定高。因为对于保留的系数,其位置信息也要和系数值一起保存下来,才能重构图像。并且,和原图像的 像素值相比,小波系数的变化范围更大,因而也需要更多的空间来保存。

       小波分析在图像领域的应用应归功于Mallat。1987年,Mallat巧妙地将计算机视觉领域内的多尺度分析思想引入到小波分析中小波函数的构造,从 而统一了在此之前的各种小波的构造方法。Mallat研究了小波变换的离散形式,并将相应的算法应用于图像的分解与重建,为随后的小波图像压缩奠定了基 础。进入90年代,利用小波进行图像压缩的研究得到了空前的关注。这一时期正是互联网蓬勃兴起的时候,因此如何适应网络的特点进行图像编码得到了重视。 1993年,Shapiro首先将零树的概念引入到小波图像压缩中,这种称为EZW的方法可以对图像进行渐进性编码,具有很高的压缩性能,非常适合于网络 图像的传输与浏览。对于图像来说,如果需要进行快速或实时传输以及大量存储,就需要对图像数据进行压缩。在同样的通信容量下,如果图像数据压缩后再传输, 就可以传输更多的图像信息。例如,用普通的电话线传输图像信息。图像压缩研究的就是寻找高压缩比的方法且压缩后的图像要有合适的信噪比,在压缩传输后还要 恢复原信号,并且在压缩、传输、恢复的过程中,还要求图像的失真度小,这就是图像压缩的研究问题。图像数据往往存在各种信息的冗余、如空间冗余、信息熵冗 余、视觉冗余和结构冗余等等。所谓压缩就是去掉各种冗余,保留对我们有用的信息。图像压缩的过程常称为编码。相对的,图像的恢复就是解码。图像压缩的方法 通常可分为有失真编码和无失真编码两大类:无失真编码方法如改进的霍夫曼编码。有失真编码方法的还原图像较之原始图像存在着一些误差,但视觉效果是可以接 受的。常见的方法有预测编码、变换编码、量化编码、信息熵编码、分频带编码和结构编码等。在小波分析中也有两个重要的数学实体:"积分小波变换"和"小波 级数"。积分小波变换是基小波的某个函数的反射膨胀卷积,而小波级数是称为小波基的一个函数,用两种很简单的运算"二进制膨胀"与"整数平移"表示。通过 这种膨胀和平移运算可以对信号进行多尺度的细致表示。通过这种膨胀和平移运算可以对信号进行多尺度的细致的动态分析,从而能够解决Fourier变换不能 解决的许多困难问题。利用小波变换可以一次变换整幅图像,不仅可以达到很高的压缩比,而且会出现JPEG重建图像中的"方块"效应,但编码器复杂,有潜像 问题。

       由于小波及小波包技术可以将信号或图像分层次按小波基展开,所以可以根据图像信号的性质以及事先给定的图像处理要求确定到底要展开到哪一级为止,从而不仅 能有效地控制计算量,满足实时处理的需要,而且可以方便地实现通常由子频带、层次编码技术实现的累进传输编码(即采取逐步浮现的方式传送多媒体图像)。这 样一种工作方式在多媒体数据浏览、医学图片远程诊断时是非常必要的。另外,利用小波变换具有放大、缩小和平移的数学显微镜的功能,可以方便地产生各种分辨 率的图像,从而适应于不同分辨率的图像I/O设备和不同传输速率的通信系统。相比之下,利用KL变换进行压缩编码,只能对整幅图像进行;而利用小波变换则 能够比较精确地进行图像拼接,因此对较大的图像可以进行分块处理,然后再进行拼接。显然,这种处理方式为图像的并行处理提供了理论依据。
  
实 际上,由于小波变换分析具有以上许多优点,所以在最近颁布的运动图像压缩标准MPEG4中的视觉纹理模式就支持视觉纹理和静态图像编码。这种模式基于零高 度树小波算法,在非常宽的比特率范围内具有很高的编码效率。除了具有很高的压缩效率之外,它还提供了空间和质量的可缩放性,以及对任意形状目标的编码。其 空间可缩放性高达11级,质量的可缩放性具有连续性。小波公式以累进传输和时间上扩充静态图像分辨率金字塔的形式提供比特率可缩放的编码。编码的位流也可 以用于图像分辨率层次抽样。这种技术提供了分辨率的可缩放性,以便处理在交互应用场合广泛的观察条件,以及把2D图像映射到3D虚拟空间。

       小波变换以小波函数作为函数展开的基底,在时域和频域同时具有良好的局部特性,可以在多尺度上对信号进行多分辨率的分析。在过去的很多年里,小波变换在一 般的信号处理和图像压缩研究中被广泛地接受。在许多应用中,基于小波的方法(也叫子频带编码)要胜过其他编码方法(比如基于DCT的)。因为没必要对图像 分块并且基函数可变长度,小波编码方法在高压缩率时没有方块效应。基于小波的编码对传输和解码错误更具有鲁棒性,有利图像的逐步传输 (prograssivetransmission)。此外,它们更符合HVS的特点。因为它们本身固有的多尺度性质,小波编码方法很适合那些重视可伸缩 性(scalability)和可容忍退化(tolerabledegradation)的应用。基于小波变换的图像压缩有着非常优越的特点。即压缩比 高、压缩速度快,压缩后能保持信号与图像的特征基本不变,且在传递过程中可以抗干扰等等。基于小波变换的图像压缩是在二维离散小波变换的基础上发展起来的 一种塔式快速算法。他的分解以及合成过程都是迭代运算,基本原理如下:对原始图像在水平方向和垂直方向与2个滤波器(低通、高通)相卷积,可以得到4块面 积为原图像1/4的子图,分别为水平方向低频和垂直方向低频(HH)、水平方向低频和垂直方向高频(HG)、水平方向高频和垂直方向低频(GH)、水平方 向高频和垂直方向高频(GG)。HG,GH,GG称为细节子图,HH称为原图像的低分辨率子图,以上只是图像的一级小波分解,对HH再做同样的运算就可以 得到图像的二级小波分解,以此类推,还可以得到三级小波分解,四级小波分解……以WOMAN图像为例,对其进行小波分解,过程如图1所示。合成的过程与上 述分解过程相反下面我们举个例子来深入的认识一下这种优越的压缩算法。


function wt()

a=imread(‘C:\MATLAB7\work\2.jpg‘);

A=rgb2gray(a);

%显示图像

subplot(2,4,1);

imshow(uint8(A));

title(‘原始图像‘);

axis square

disp(‘压缩前图像X的大小‘);

whos(‘A‘)

%对图像用小波进行层小波分解

[c,s]=wavedec2(A,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,‘bior1.3‘,1);

h1=wrcoef2(‘h‘,c,s,‘bior1.3‘,1);

v1=wrcoef2(‘v‘,c,s,‘bior1.3‘,1);

d1=wrcoef2(‘d‘,c,s,‘bior1.3‘,1);

c1=[a1,h1;v1,d1];

%显示分频信息

subplot(2,4,2);

imshow(uint8(c1));

axis square;

title (‘分解后低频和高频信息‘);

%进行图像压缩

%保留小波分解第一层低频信息

%首先对第一层信息进行量化编码

ca1=appcoef2(c,s,‘bior3.7‘,1);

ca1=wcodemat(ca1,460,‘mat‘,1);

%改变图像高度并显示

ca1=0.5*ca1;

subplot(2,4,3);

imshow(uint8(ca1));

axis square;

title(‘第一次压缩图像‘);

disp(‘第一次压缩图像的大小为:‘);

whos(‘ca1‘)

%保留小波分解第二层低频信息进行压缩

ca2=appcoef2(c,s,‘bior3.7‘,2);

%首先对第二层信息进行量化编码

ca2=wcodemat(ca2,440,‘mat‘,2);

%改变图像高度并显示

ca2=0.25*ca2;

subplot(2,4,4);

imshow(uint8(ca2));

axis square;

itle(‘第二次压缩图像‘);

disp(‘第二次压缩图像的大小为:‘);

whos(‘ca2‘)

技术分享

压缩前图像X的大小

 Name     Size                   Bytes  Class

     512x512              3145728  uint8 array

第一次压缩图像的大小为:

 Name     Size                   Bytes  Class

 ca1    263x263              6392200  double array

第二次压缩图像的大小为:

 Name     Size                   Bytes  Class

 ca2    139x139                1652680 double array

       由上述程序运行结果可以发现小波变换在图像压缩领域的应用是很有优势的。而且在当今图像压缩纷繁复杂的算法当中基于小波变换的图像压缩算法还有待于更好的优化。能够调试一个更优化的图像压缩算法对于图像传输和图像优化等方面是十分有价值的。

      由于小波变换继承了Fourier(余弦变换和正弦变换都可以视为Fourier变换的特例)分析的优点,同时又克服它的许多缺点所以它在静态和动态图像 压缩领域得到广泛的应用,并且已经成为某些图像压缩国际标准(如MPEG-4)的重要环节。当然,像其他变换编码一样,在压缩比特别高的时候,小波变换压 缩量化后的重建图像也会产生几何畸变。但伴随着人们对小波基和小波分析的认识的日益成熟相信对于小波变换在图像压缩方面的应用将会更加广泛。

     

      

 


      

     

Wavelet Transform & Image Compression

标签:

原文地址:http://www.cnblogs.com/Qianqian-Dong/p/4019247.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!