小波分析用于图像压缩(共10页).doc
精选优质文档-倾情为你奉上小波分析用于图像压缩1.1 基于小波变换的图像局部压缩基于离散余弦变换的图像压缩算法,其基本思想是在频域对信号进行分解,去除信号点之间的相关性,并找出重要系数,滤掉次要系数,以达到压缩的效果,但该方法在处理过程中并不能提供时域的信息,在我们比较关心时域特性的时候显得无能为力。但是这种应用的需求是很广泛的,比如遥感测控图像,要求在整幅图像有很高压缩比的同时,对热点部分的图像要有较高的分辨率,例如医疗图像,需要对某个局部的细节部分有很高的分辨率,单纯的频域分析的方法显然不能达到这个要求,虽然可以通过对图像进行分块分解,然后对每块作用不同的阈值或掩码来达到这个要求,但分块大小相对固定,有失灵活。在这个方面,小波分析的就优越的多,由于小波分析固有的时频特性,我们可以在时频两个方向对系数进行处理,这样就可以对我们感兴趣的部分提供不同的压缩精度。下面这个局部压缩的例子利用了小波变化的时频局部化特性,通过这个例子可以看出小波变换在应用这类问题上的优越性。具体程序见附录。运行结果如图1.1。图1.1 利用小波变换的局部压缩图像从图1.1可以看出,小波域的系数表示的是原图像各频率段的细节信息,并且给我们提供了一种位移相关的信息表述方式,我们可以通过对局部细节系数处理来达到局部压缩的效果。在本例中,把图像中部的细节系数都置零,从压缩图像中可以很明显地看出只有中间部分变得模糊(比如在原图中很清晰的围巾的条纹不能分辨),而其他部分的细节信息仍然可以分辨的很清楚。本例只是为了演示小波分析应用在图像局部压缩的方法,在实际的应用中,可能不会只做一层变换,而且作用阈值的方式可能也不会是将局部细节系数全部清除,更一般的情况是在N层变换中通过选择零系数比例或能量保留成分作用不同的阈值,实现分片的局部压缩。而且,作用的阈值可以是方向相关的,即在三个不同方向的细节系数上作用不同的阈值。1.2 小波变换用于图像压缩的一般方法二维小波分析用于图像压缩是小波分析应用的一个重要方面。它的特点是压缩比高,压缩速度快,压缩后能保持图像的特征基本不变,且在传递过程中可以抗干扰。小波分析用于图像压缩具有明显的优点。1.2.1 利用二维小波分析进行图像压缩 基于小波分析的图像压缩方法很多,比较成功的有小波包、小波变换零树压缩、小波变换矢量量化压缩等。下面是一个图像信号(即一个二维信号,文件名为wbarb.mat),利用二维小波分析对图像进行压缩。一个图像作小波分解后,可得到一系列不同分辨率的子图像,不同分辨率的子图像对应的频率是不相同的。高分辨率(即高频)子图像上大部分点的数值都接近于0,越是高频这种现象越明显。对一个图像来说,表现一个图像最主要的部分是低频部分,所以一个最简单的压缩方法是利用小波分解,去掉图像的高频部分而只保留低频部分。图像压缩可按附录中的程序进行处理。图像对比如图1.2所示。可以看出,第一次压缩提取的是原始图像中小波分解第一层的低频信息,此时压缩效果较好,压缩比较小(约为1/3);第二次压缩是提取第一层分解低频部分的低频部分(即小波分解第二层的低频部分),其压缩比较大(约为1/12),压缩效果在视觉上也基本过的去。这是一种最简单的压缩方法,只保留原始图像中低频信息,不经过其他处理即可获得较好的压缩效果。在上面的例子中,我们还可以只提取小波分解第3、4、层的低频信息。从理论上说,可以获得任意压缩比的压缩图像。 图1.2 利用二维小波分析进行图像压缩下面再给出用wdenemp函数对一个图像(文件名tire.mat)进行压缩的程序。具体程序清单见附录。图像对比如图1.3所示:原始图像 压缩图像 图1.3 利用二维小波分析对图像进行压缩利用二维小波变换进行图像压缩时,小波变换将图像从空间域变换到时间域,它的作用与以前在图像压缩中所用到的离散余弦(DCT)、傅立叶变换(FFT)等的作用类似。但是要很好的进行图像的压缩,需要综合的利用多种其他技术,特别是数据的编码与解码算法等,所以利用小波分析进行图像压缩通常需要利用小波分析和许多其他相关技术共同完成。1.2.2 二维信号压缩中的阈值的确定与作用命令由于阈值处理只关心系数的绝对值,并不关心系数的位置,所以二维小波变换系数的阈值化方法同一维情况大同小异,为了方便用户使用小波工具箱对某些阈值化方法提供了专门的二维处理命令。下面这个例子可以说明二维信号的小波压缩的一般方法,在这个例子中同时采用了求缺省阈值的ddencmp命令和基于经验公式的wdcbm2命令对图像进行压缩,并对压缩效果进行比较。具体程序见附录。显示结果如图1.4所示。图1.4 detfingr图像的全局阈值化压缩和分层阈值化压缩可见分层阈值化压缩方法同全局阈值化方法相比,在能量损失不是很大的情况下可以获得最高的压缩比,这主要是因为层数和方向相关的阈值化方法能利用更精细的细节信息进行阈值化处理。1.3 基于小波包变换的图像压缩小波分析之所以在信号处理中有着强大的功能,是基于其分离信息的思想,分离到各个小波域的信息除了与其他小波域的关联,使得处理的时候更为灵活。全局阈值化方法作用的信息密度太大,不够精细,所以很难同时获得高的压缩比和能量保留成分,在作用的分层阈值以后,性能明显提高,因为分层阈值更能体现信号固有的时频局部特性。但是小波分解仍然不够灵活,分解出来的小波树只有一种模式,不能完全地体现时频局部化信息。而压缩的核心思想既是尽可能去除各小波域系数之间的信息关联,最大限度体现时频局部化的信息,因此,实际的压缩算法多采用小波包算法,而小波树的确定则是根据不同的信息论准则,以达到分解系数表达的信息密度最高。下面这个例子说明了小波包分析在图像压缩中的应用,并给出性能参数以便于同基于小波分析的压缩进行比较。具体程序见附录。得到的压缩结果如图1.5所示。图1.5 基于小波包分析的图像压缩压缩过程中使用的最优小波数如图1.6所示图4.6 最优小波树这两个命令是Matlab小波工具箱提供的自动获取阈值和自动使用小波包压缩的命令,后者将分解阈值化和重建综合起来。在将小波包用于信号压缩的过程中,ddencmp命令返回的最优小波树标准都是阈值化标准。根据这个标准确定的最优小波树可以使得压缩过程的零系数成分最高,并且自动降低计算量。对高频成分很多的图像,小波包的分解细节信息的特点尤其能发挥其优势。正因为这点,FBI的指纹库就是采用的基于小波包的压缩算法WSQ。图像压缩是应用非常广泛的一类问题,所以其机器实现效率是至关重要的,在实际的应用中,如JPEG2000,一般不采用通常的mallat算法做小波分解,而是应用特定的双正交小波,利用其滤波器分布规则的特性,用移位操作来实现滤波操作。附录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%重建处理后的系数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附录%装入图像load wbarb;%显示图像subplot(221);image(X);colormap(map)title('原始图像');axis squaredisp('压缩前图像X的大小:');whos('X')%对图像用bior3.7小波进行2层小波分解c,s=wavedec2(X,2,'bior3.7');%提取小波分解结构中第一层低频系数和高频系数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 squaretitle('分解后低频和高频信息');%下面进行图像压缩处理%保留小波分解第一层低频信息,进行图像的压缩%第一层的低频信息即为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 squaretitle('第一次压缩');disp('第一次压缩图像的大小为:');whos('ca1')%保留小波分解第二层低频信息,进行图像的压缩,此时压缩比更大%第二层的低频信息即为ca2,显示第二层的低频信息ca2=appcoef2(c,s,'bior3.7',2);%首先对第二层信息进行量化编码ca2=wcodemat(ca2,440,'mat',0);%改变图像的高度ca2=0.25*ca2;subplot(224);image(ca2);colormap(map);axis squaretitle('第二次压缩');disp('第二次压缩图像的大小为:');whos('ca2')输出结果如下所示:压缩前图像X的大小: Name Size Bytes Class X 256x256 double arrayGrand total is 65536 elements using bytes第一次压缩图像的大小为: Name Size Bytes Class ca1 135x135 double arrayGrand total is 18225 elements using bytes第二次压缩图像的大小为: Name Size Bytes Class ca2 75x75 45000 double arrayGrand total is 5625 elements using 45000 bytes附录%装入一个二维信号load tire;%显示图像subplot(221);image(X);colormap(map)title('原始图像');axis square%下面进行图像压缩%对图像用db3小波进行2层小波分解c,s=wavedec2(X,2,'db3');%使用wavedec2函数来实现图像的压缩thr,sorh,keepapp=ddencmp('cmp','wv',X);%输入参数中选择了全局阈值选项gbl,用来对所有高频系数进行相同的阈值量化处理Xcomp,cxc,lxc,perf0,perfl2=wdencmp('gbl',c,s,'db3',2,thr,sorh,keepapp);%将压缩后的图像与原始图像相比较,并显示出来subplot(222);image(Xcomp);colormap(map)title('压缩图像');axis squaredisp('小波分解系数中置0的系数个数百分比:');perf0disp('压缩后图像剩余能量百分比:');perfl2输出结果如下所示:小波分解系数中置0的系数个数百分比:perf0 =49.1935压缩后图像剩余能量百分比:perfl2 =99.9928附录load detfingr;%求得颜色映射表的长度,以便后面的转换nbc=size(map,1);%用缺省方式求出图像的全局阈值thr,sorh,keepapp=ddencmp('cmp','wv',X);thrthr = 3.5000%对图像作用全局阈值xd,cxd,lxd,perf0,perfl2=wdencmp('gbl',X,'bior3.5',3,thr,sorh,keepapp);%用bior.3.5小波对图像进行三层分解c,s=wavedec2(X,3,'bior3.5');%指定Birge-Massart策略中的经验系数alpha=1.5;m=2.7*prod(s(1,:);根据各层小波系数确定分层阈值thr1,nkeep1=wdcbm2(c,s,alpha,m);%对原图像作用分层阈值xd1,cxd1,sxd1,perf01,perfl21=wdencmp('lvd',c,s,'bior3.5',3,thr1,'s');thr1thr1 = 14.7026 68.4907 93.8430 14.7026 68.4907 93.8430 14.7026 68.4907 93.8430%将颜色映射表转换为灰度映射表colormap(pink(nbc);subplot(221);image(wcodemat(X,nbc);title('原始图像');subplot(222);image(wcodemat(xd,nbc);title('全局阈值化压缩图像');xlabel('能量成分',num2str(perfl2),'%','零系数成分',num2str(perf0),'%');subplot(223);image(wcodemat(xd1,nbc);title('分层阈值化压缩图像');xlabel('能量成分',num2str(perfl21),'%','零系数成分',num2str(perf01),'%');附录读入信号load julia求颜色索引表长度nbc=size(map,1);得到信号的阈值,保留层数,小波树优化标准thr,sorh,keepapp,crit=ddencmp('cmp','wp',X)thr = 3.0000sorh =hkeepapp = 1crit =threshold通过以上得到的参数对信号进行压缩xd,treed,perf0,perfl2=wpdencmp(X,sorh,4,'sym4',crit,thr*2,keepapp);更改索引表为pink索引表colormap(pink(nbc);subplot(121);image(wcodemat(X,nbc);title('原始图像');subplot(122);image(wcodemat(xd,nbc);title('全局阈值化压缩图像');xlabel('能量成分',num2str(perfl2),'%','零系数成分',num2str(perf0),'%');plot(treed);专心-专注-专业