实验三小波变换及其应用实验目的1、通过观察小波变换系数建立对小波变换及其有关性质的感性认识。
2、掌握小波变换及重构方法;了解小波变换基本应用。
实验内容1、图像二维离散小波变换及其重构;2、小波变换在去噪、压缩、图像增强上的应用。
实验原理1、“小波”就是小区域、长度有限、均值为0的波形。
所谓“小”是指它具有衰减性;而称之为“波”则是指它的波动性,其振幅正负相间的震荡形式。
与 Fourier变换相比,小波变换是时间(空间)频率的局部化分析,它通过伸缩平移运算对信号(函数)逐步进行多尺度细化,最终达到高频处时间细分,低频处频率细分,能自动适应时频信号分析的要求,从而可聚焦到信号的任意细节,解决了Fourier变换的困难问题,成为继Fourier变换以来在科学方法上的重大突破。
小波转换分成两个大类:离散小波变换 (DWT) 和连续小波转换 (CWT)。
两者的主要区别在于,连续转换在所有可能的缩放和平移上操作,而离散转换采用所有缩放和平移值的特定子集。
小波变换的公式有内积形式和卷积形式,两种形式的实质都是一样的。
它要求的就是一个个小波分量的系数也就是“权”。
其直观意义就是首先用一个时窗最窄,频窗最宽的小波作为尺子去一步步地“量”信号,也就是去比较信号与小波的相似程度。
信号局部与小波越相似,则小波变换的值越大,否则越小。
当一步比较完成后,再将尺子拉长一倍,又去一步步地比较,从而得出一组组数据。
如此这般循环,最后得出的就是信号的小波分解(小波级数)。
当尺度及位移均作连续变化时,可以理解必将产生大量数据,作实际应用时并不需要这么多的数据,因此就产生了离散的思想。
将尺度作二进离散就得到二进小波变换,同时也将信号的频带作了二进离散。
当觉得二进离散数据量仍显大时,同时将位移也作离散就得到了离散小波变换。
2、二维离散小波变换常用函数3、小波图像去噪一般方法如下:1)图像的小波分解。
选择合适的小波函数以及适合的分解层次对图像进行分解。
2)对分解后的高频系数进行阈值处理。
对分解的每一层,选择合适的阈值对该层的水平、垂直和斜线三个方向的高频系数进行阈值量化处理。
3)重构图像。
根据小波分解的低频系数和经阈值量化处理后的高频系数进行图像重构。
4、小波图像压缩图像能够进行压缩的主要原因是:1)原始图像信息存在着很大的冗余度,数据之间存在着相关性;2)人眼作为图像信息的接收端,其视觉对于边缘急剧变化不敏感(视觉掩盖效应),以及人眼对图像的亮度信息敏感,而对颜色分辨率弱等。
基于上述两点,发展出数据压缩的两类基本方法:一种是将相同的或相似的数据或数据特征归类,使用较少的数据量描述原始数据,达到减少数据量的目的,这种压缩一般为无损压缩;另一种是利用人眼的视觉特性有针对性地简化不重要的数据,以减少总的数据量,这种压缩一般为有损压缩。
只要损失的数据不太影响人眼主观接收的效果,即可采用。
5、小波图像增强图像增强的主要目的是提高图像的视觉质量或者凸显某些特征信息。
无论是为了对人类眼睛结构的剖析,还是基于计算机可视化技术的高级图像分析,图像增强都有着重要的作用。
虽然图像增强技术不能增加图像数据本身包含的信息,但是可以凸显特定特征,在处理后图像更容易识别。
通常图像增强的目的主要有:放大图像中感兴趣结构的对比度,增加可理解性;减少或抑制图像中混有的噪声,提高视觉质量。
小波变换可以将图像分解为各个尺度上的子带图像,因为图像分解的低频部分体现了图像的轮廓,图像分解的高频部分表现为图像的细节和混入的噪声,因此对低频部分进行增强,对高频部分进行衰减,可以实现图像增强的目的。
实验步骤1.读入图象,对图象作单尺度二维离散小波分解、二尺度二维离散小波分解、提取并显示二维小波分解的高频系数和低频系数。
2.读入图象,对图象作单尺度二维离散小波逆变换、多尺度二维小波重构、二维小波分解的低频或高频重构并显示。
3、采用wdencmp函数对图像进行阈值去噪,观察软阈值与硬阈值处理结果的不同。
4、采用wdencmp函数对图像进行压缩,观察去噪与压缩处理结果的不同。
5、读取图像“noiswom”,进行图像增强。
例程1、% 加载图像load tire;nbc = size(map,1);colormap(pink(nbc));%用小波函数db2对信号x进行单层分解[cA1,cH1,cV1,cD1] = dwt2(X,'db2');figure(1);subplot(3,2,1);image(wcodemat(X,nbc));title('原始图像');subplot(3,2,3);image(wcodemat(cA1,nbc));title('低频系数图像');subplot(3,2,4);image(wcodemat(cH1,nbc));title('水平高频系数图像');subplot(3,2,5);image(wcodemat(cV1,nbc));title('垂直高频系数图像');subplot(3,2,6);image(wcodemat(cD1,nbc));title('斜线高频系数图像');2、load tire;% 用小波函数db1对信号进行2尺度分解[c,s] = wavedec2(X,2,'db1');sizex = size(X)sizec = size(c)val_s = s% 提取尺度2的所有方向的高频系数[chd2,cvd2,cdd2] = detcoef2('all',c,s,2); sizecd2 = size(chd2)% 提取尺度1的所有方向的高频系数[chd1,cvd1,cdd1] = detcoef2('all',c,s,1); sizecd1 = size(chd1)% 提取尺度2的低频系数ca2 = appcoef2(c,s,'db1',2);sizeca2 = size(ca2)% 提取尺度1的低频系数ca1 = appcoef2(c,s,'db1',1);sizeca1 = size(ca1)nbc = size(map,1);colormap(pink(nbc));figure(1);subplot(221);image(wcodemat(X,nbc)); title('原始图像');subplot(223);image(wcodemat(ca2,nbc)); title('尺度2的低频系数');subplot(224);image(wcodemat(ca1,nbc)); title('尺度1的低频系数');figure(2);subplot(231);image(wcodemat(chd2,nbc)); title('尺度2水平方向的高频系数'); subplot(232);image(wcodemat(cvd2,nbc)); title('尺度2垂直方向的高频系数'); subplot(233);image(wcodemat(cdd2,nbc)); title('尺度2斜线方向的高频系数'); subplot(234);image(wcodemat(chd1,nbc)); title('尺度1水平方向的高频系数'); subplot(235);image(wcodemat(cvd1,nbc)); title('尺度1垂直方向的高频系数'); subplot(236);image(wcodemat(cdd1,nbc)); title('尺度1斜线方向的高频系数');3、load woman;sX = size(X);% 使用小波函数db4进行信号的单层分解[cA1,cH1,cV1,cD1] = dwt2(X,'db4');% 进行小波函数的重构A0 = idwt2(cA1,cH1,cV1,cD1,'db4',sX);%检查重构误差ans = max(max(abs(X-A0)))nbc = size(map,1);colormap(pink(nbc));subplot(121);image(wcodemat(X,nbc));title('原始图像');subplot(122);image(wcodemat(A0,nbc));title('重构图像');4、load woman;% 对信号用小波函数sym5进行2尺度分解[c,s] = wavedec2(X,2,'sym5');% 对小波分解结构[c,s]的低频系数进行尺度1和尺度2上的重构a1 = wrcoef2('a',c,s,'sym5',1);a2 = wrcoef2('a',c,s,'sym5',2);% 对分解结构[c,s]的高频系数进行'h'、'v'、'd'三个方向上尺度2上的的重构hd2 = wrcoef2('h',c,s,'sym5',2);vd2 = wrcoef2('v',c,s,'sym5',2);dd2 = wrcoef2('d',c,s,'sym5',2);% 所有的图像都有相同的大小sX = size(X)sa1 = size(a1)shd2 = size(hd2)nbc = size(map,1);colormap(pink(nbc));subplot(3,2,1);image(wcodemat(X,nbc));title('原始图像');subplot(3,2,2);image(wcodemat(a1,nbc));title('尺度1的低频图像');subplot(3,2,3);image(wcodemat(a2,nbc));title('尺度2的低频图像');subplot(3,2,4);image(wcodemat(hd2,nbc));title('尺度2的水平高频图像');subplot(3,2,5);image(wcodemat(vd2,nbc));title('尺度2的垂直高频图像');subplot(3,2,6);image(wcodemat(dd2,nbc));title('尺度2的斜线高频图像');5、load woman;% 使用小波函数db4对信号进行2层分解[c,s] = wavedec2(X,2,'db4');siz = s(size(s,1),:);%提取尺度1的低频系数ca1 = appcoef2(c,s,'db4',1);%对尺度1的低频部分进行重构a1 = upcoef2('a',ca1,'db4',1,siz);%提取尺度1的水平方向高频系数chd1 = detcoef2('h',c,s,1);%对尺度1的水平方向高频部分进行重构hd1 = upcoef2('h',chd1,'db4',1,siz);%提取尺度1的垂直方向高频系数cvd1 = detcoef2('v',c,s,1);%对尺度1的垂直方向高频部分进行重构vd1 = upcoef2('v',cvd1,'db4',1,siz);%提取尺度1的斜线方向高频系数cdd1 = detcoef2('d',c,s,1);%对尺度1的斜线方向高频部分进行重构dd1 = upcoef2('d',cdd1,'db4',1,siz);nbc = size(map,1);colormap(pink(nbc));subplot(321);image(wcodemat(X,nbc));title('原始图像');subplot(323);image(wcodemat(a1,nbc));title('尺度1的低频系数重构图像'); subplot(324);image(wcodemat(hd1,nbc));title('尺度1的水平高频系数重构图像'); subplot(325);image(wcodemat(vd1,nbc));title('尺度1的垂直高频系数重构图像'); subplot(326);image(wcodemat(dd1,nbc));title('尺度1的斜线高频系数重构图像');6、load woman;%产生含噪信号init=2055615866;randn('seed',init);x = X + 18*randn(size(X));nbc = size(map,1);% 使用sym4小波进行三层分解wname = 'sym4'; lev = 3;[c,s] = wavedec2(x,lev,wname);% 使用wdcbm2获得去噪阀值alpha = 3; m = 3.5*prod(s(1,:));[thr,nkeep] = wdcbm2(c,s,alpha,m)% 对信号进行去噪sorh = 's'; %s为软阈值,h为硬阈值xd= wdencmp('lvd',c,s,wname,lev,thr,sorh); colormap(pink(nbc));figure(1);subplot(2,2,1);image(wcodemat(X,nbc));title('原始信号');subplot(2,2,2);image(wcodemat(x,nbc))title('含噪信号');subplot(2,2,3)image(wcodemat(xd,nbc))title('消噪后的信号');7、load woman;nbc = size(map,1);% 使用haar小波进行三层分解wname = 'sym4'; lev = 3;[c,s] = wavedec2(X,lev,wname);% 使用wdcbm2获得压缩阀值alpha = 1.5; m = 3.5*prod(s(1,:)); [thr,nkeep] = wdcbm2(c,s,alpha,m);% 对信号进行压缩xd= wdencmp('lvd',c,s,wname,lev,thr,'s'); colormap(pink(nbc));figure(1);subplot(1,2,1);image(wcodemat(X,nbc));title('原始信号');subplot(1,2,2)image(wcodemat(xd,nbc))title('压缩后的信号');8、load noiswom;nbc = size(map,1);% 使用haar小波进行2层分解wname = 'haar'; lev = 2;[c,s] = wavedec2(X,lev,wname); sizec = size(c);for i = 1:sizec(2)if (c(i)>180)c(i)=1.2*c(i);elsec(i)=0.8*c(i);endendrx = waverec2(c,s,'haar'); colormap(pink(nbc));subplot(1,2,1);image(wcodemat(X,nbc));title('原始信号');subplot(1,2,2)image(wcodemat(rx,nbc)) title('增强后的信号');。