实验七小波变换一、实验目的1、了解小波变换及其变换系数的分布。2、了解小波变换在图像去噪处理中的应用。二、小波变换及去噪应用1、小波分解及系数分布信号分析是为了获得时间和频率之间的相互关系。傅立叶变换提供了有关频率域的信息,但有关时间的局部化信息却基本丢失。与傅立叶变换不同,小波变换是通过缩放母小波(Motherwavelet)的宽度来获得信号的频率特征,通过平移母小波来获得信号的时间信息。对母小波的缩放和平移操作是为了计算小波系数,这些小波系数反映了小波和局部信号之间的相关程度。常用的母小波有:Haar小波、dbN小波系、symN小波系等。小波系数分布规律:随着分层数的增加,小波系数的范围越来越大,说明越往后层次的小波系数越重要。除LL外,其他子带方差和能量明显减少,充分说明低频系数在图像编码中的重要性。对同一方向子带,按从高层到低层(从低频到高频)子带,有:HL3→HL2→HL1,LH3→LH2→LH1,HH3→HH2→HH1,大部分情况下其方差从大到小,有一定的变换规则。2、小波在图像去噪中的应用工程应用中,有用信号通常表现为低频信号或是一些比较平稳的信号,而噪声信号通常表现为高频信号。所以基于小波变换的去噪过程可以分为以下几步进行:(1)小波分解。选择一个小波并确定一个小波分解的层数N,然后对图像进行N层小波分解。(2)小波分解高频系数的阈值量化。对第1层到第N层的每一层高频系数,选择一个阈值进行阈值量化处理。(3)小波的重构。根据小波分解的第N层的低频系数和经过量化处理后的第1层到第N层的高频系数,进行的小波重构。处理的方法一般有三种:(1)强制去噪处理。该方法把小波分解结构中的高频系数全部变为0,即把高频部分全部去除掉,然后再对信号进行重构处理。这种方法比较简单,重构后的消噪信号也比较平滑,但容易丢失信号的有用成分。(2)默认阈值去噪处理。该方法利用ddencmp函数产生信号的默认阈值,然后利用wdencmp函数进行消噪处理。(3)给定软硬阈值进行去噪处理。在实际的去噪处理过程中,阈值往往可以通过经验公式获得,而且这种阈值比默认阈值更具有可信度。在进行阈值量化处理中可用wthresh函数进行。3、matlab提供的相关函数(1)dwt2功能:单尺度二维离散小波变换语法:[cA,cH,cV,cD]=dwt2(X,‘wname’)[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D)该函数用于二维离散小波分解。X为被分析的图像;wname为分解所用到的小波函数;Lo_D,Hi_D为分解滤波器;cA和cH、cV、cD(水平、垂直、对角线)分别是返回的低频系数和高频系数向量。二维小波分解是把尺度j的低频部分分解成四个部分:尺度j+1的低频部分和三个方向(水平、垂直、斜线)的高频部分。(2)idwt2功能:单尺度逆二维离散小波变换语法:X=idwt2(cA,cH,cV,cD,‘wname’)X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R)X=idwt2(cA,cH,cV,cD,‘wname’,S)X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R,S)该函数用于单尺度二维离散小波变换的重构,它通常和dwt2配套使用。返回向量X为单尺度重构后信号的低频系数。(3)ddencmp功能:获取信号在消噪或压缩过程中的默认阈值语法:[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,IN2,X)[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,'wp',X)[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,'wv',X)输入参数X为一维或二维信号;IN1取值为'den'或'cmp','den'表示进行去噪,'cmp'表示进行压缩;IN2取值为'wv'或'wp',wv表示选择小波,wp表示选择小波包。返回值THR是返回的阈值;SORH是软阈值或硬阈值选择参数;KEEPAPP表示保存低频信号;CRIT是熵名(只在选择小波包时使用)。(4)wdencmp功能:用于一维或二维信号的消噪或压缩语法:[XC,CXC,LXC,PERF0,PERFL2]=wdencmp('gbl',X,'wname',N,THR,SORH,KEEPAPP);[XC,CXC,LXC,PERF0,PERFL2]=wdencmp('lvd',X,'wname',N,THR,SORH);[XC,CXC,LXC,PERF0,PERFL2]=wdencmp('lvd',C,L,'wname',N,THR,SORH);‘wname’是所用的小波函数,gbl(global的缩写)表示每一层都采用同一个阈值进行处理,lvd表示每层采用不同的阈值进行处理,N表示小波分解的层数,THR为阈值向量,对于格式(2)和(3)每层都要求有一个阈值,因此阈值向量THR的长度为N,SORH表示选择软阈值或硬阈值(分别取值为's'和'h'),参数KEEPAPP取值为1时,则低频系数不进行阈值量化,反之,低频系数要进行阈值量化。XC是进行消噪或压缩后的信号,[CXC,LXC]是XC的小波分解结构,PERF0和PERFL2是恢复或压缩L^2的范数百分比。(5)wthresh功能:返回X经过软阈值或硬阈值处理后的信号语法:Y=wthresh(X,SORH,T)T是阈值。SORH='s',进行软阈值处理,即把信号的绝对值与阈值进行比较,小于或等于阈值的点变为零,大于阈值的点为该点值与阈值的差值。SORH='h',进行硬阈值处理,即把信号的绝对值和阈值进行比较,小于或等于阈值的点变为零,大于阈值的点保持不变。一般来说,用硬阈值处理后的信号比用软阈值处理后的信号更粗糙。三、实验内容及步骤1、小波的分解与重构例:以下程序是对图像进行一级小波变换及重构closeallclearI=imread('cameraman.tif');[M,N]=size(I);[A,H,V,D]=dwt2(I,'haar');%使用haar小波对二维图像进行一级小波分解%A近似子带;H水平细节子带;V垂直细节子带;D对角细节子带J=I;%---------小波分解图像-----J(1:M/2,1:N/2)=A;J(1:M/2,N/2+1:N)=H;J(M/2+1:M,1:N/2)=V;J(M/2+1:M,N/2+1:N)=D;%-----------重构图像----II=idwt2(A,H,V,D,'haar');figureimshow(uint8(J)),title('haar小波一级分解')figureimshow(uint8(II)),title('haar小波重构')思考题1:使用haar小波对图像'Fig4.11(a).jpg'进行二级小波分解,结果类似下图。并将其重构回原图。写出命令及结果。程序:closeallclearI=imread('Fig4.11(a).jpg');[M,N]=size(I);[A,H,V,D]=dwt2(I,'haar');%使用haar小波对二维图像进行一级小波分解%A近似子带;H水平细节子带;V垂直细节子带;D对角细节子带J=I;%---------小波一级分解图像-----J(1:M/2,1:N/2)=A;J(1:M/2,N/2+1:N)=H;J(M/2+1:M,1:N/2)=V;J(M/2+1:M,N/2+1:N)=D;[X,Y]=size(A);[cA,cH,cV,cD]=dwt2(A,'haar');Z=J;%---------小波二级分解图像-----Z(1:X/2,1:Y/2)=cA;Z(1:X/2,Y/2+1:Y)=cH;Z(X/2+1:X,1:Y/2)=cV;Z(X/2+1:X,Y/2+1:Y)=cD;%-----------重构图像----II=idwt2(cA,cH,cV,cD,'haar');III=idwt2(II,H,V,D,'haar');figureimshow(uint8(Z)),title('haar小波二级分解')figureimshow(uint8(III)),title('haar小波重构')程序结果haar小波二级分解2、小波阈值去噪阈值法是一种传统的图像分割方法。是在一幅图像中,把目标从背景中分离出来,以便于进一步处理。它是对图像进行视觉分析和模式识别的基本前提.同时它也是一个经典难题,到目前为止既不存在一种通用的图像分割方法,也不存在一种判断是否分割成功的客观标准。例:使用ddencmp函数获取图像的阈值。clear,closeallx=imread('cameraman.tif');xn=imnoise(x,'gaussian');%使用ddencmp函数来计算默认阈值和熵标准%thr是阈值[thr,sorh,keepapp]=ddencmp('den','wv',xn);y=xnthr;%大于阈值的像素点取值为“1”,显白色;%小于阈值的像素点取值为“0”,显黑色;figureimshow(y),title('直接使用阈值判断')z=wthresh(double(xn),sorh,thr);figureimshow(z),title('使用wthresh函数处理')k=im2bw(xn);%将图像转为二值图像figureimshow(k),title('im2bw函数转为二值图像')小波阈值去噪的具体处理过程为:将含噪信号在各尺度上进行小波分解,设定一个阈值,幅值低于该阈值的小波系数置为0,高于该阈值的小波系数完全保留,或者做相应的“收缩(shrinkage)”处理。最后将处理后获得的小波系数用小波反变换进行重构,得到去噪后的图像。例:根据ddencmp函数获取的阈值进行去噪处理。clear,closeallx=imread('cameraman.tif');xn=imnoise(x,'gaussian');%====================================%使用ddencmp函数来计算消噪的默认阈值%根据ddencmp函数计算的默认阈值,使用wdencmp函数来实现图像的去噪[thr,sorh,keepapp]=ddencmp('den','wv',xn);%使用sym5小波进行二级小波分解后,采用同一个阈值去噪,保留低频成分[Xdenoise]=wdencmp('gbl',xn,'sym5',2,thr,sorh,keepapp);%显示去噪后的图像figuresubplot(121),imshow(xn)subplot(122),imshow(uint8(Xdenoise));title('wdencmp去噪后的图像');思考题2:采用强制去噪的处理方法,对加高斯噪声的图像进行二级小波分解,将其所有的高频子带全部清零,然后小波反变换进行重构。与使用wdencmp函数阈值去噪的效果进行比较。程序closeallclearx=imread('cameraman.tif');I=imnoise(x,'gaussian');%对图像添加高斯白噪声[M,N]=size(I);[A,H,V,D]=dwt2(I,'haar');%使用haar小波对二维图像进行一级小波分解%A近似子带;H水平细节子带;V垂直细节子带;D对角细节子带J=I;%---------小波一级分解图像-----J(1:M/2,1:N/2)=A;J(1:M/2,N/2+1:N)=H;J(M/2+1:M,1:N/2)=V;J(M/2+1:M,N/2+1:N)=D;H=zeros(M/2,N/2);V=zeros(M/2,N/2);D=zeros(M/2,N/2);[X,Y]=size(A);[cA,cH,cV,cD]=dwt2(A,'haar');Z=J;%---------小波二级分解图像-----Z(1:X/2,1:Y/2)=cA;Z(1:X/2,Y/2+1:Y)=cH;Z(X/2+1:X,1:Y/2)=cV;Z(X/2+1:X,Y/2+1