下面来介绍一下如何在MATLAB实现CWT,也就是我们常说的连续小波变换,具体如下:
所谓小波(wavelet),即存在于一个较小区域的波。小波函数的数学定义是:设ψ(t)为一平方可积函数,即ψ(t)∈L2(R),若其傅里叶变换Ψ(ω)满足条件:

则称ψ(t)为一个基本小波或小波母函数,并称上式是小波函数的可允许条件。
1、打开MATLAB,在其主界面的编辑器中写入下列代码:
clear; %清除MATLAB工作环境中现有的变量 load wbarb; %装入图像 subplot(2,2,1);image(X);colormap(map); title('原始图像'); disp('原始图像X的大小:'); whos('X'); %对图像用bior3.7小波进行二层小波分解 [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(2,2,2);image(c1); axis square; title('分解后低频和高频信息'); %下面进行图像压缩处理 %保留小波分解第一层低频信息,进行图像的压缩 %第一层的低频信息即ca1,显示第一层的低频信息 %首先对第一层信息进行量化编码 ca1=appcoef2(c,s,'bior3.7',1); ca1=wcodemat(ca1,440,'mat',0); %改变图像的高度 ca1=0.5*ca1; subplot(2,2,3);image(ca1);colormap(map); axis square; title('第一次压缩图像'); disp('第一次压缩图像的大小:'); whos('ca1'); % 保留小波分析分解第二层低频信息,进行图像的压缩,此时压缩比更大 % 第二层的低频信息ca2,显示第二层的低频信息 ca2=appcoef2(c,s,'bior3.7',2); ca2=wcodemat(ca2,440,'mat',0); ca2=0.25*ca2; subplot(2,2,4);image(ca2);colormap(map); axis square; title('第二次压缩图像'); disp('第二次压缩图像的大小:'); whos('ca2');
2、代码保存至自定义路径下,点击运行,结果如下:


如图所示,通过CWT变换后,压缩图像的大小一次比一次减少,并且所占的位数也随之减小,分解的低高频信息是非均匀化的,可以看出连续小波基函数的一个重要性质是窗口面积不随参数a、τ而变,它是小波母函数的时、频窗口宽度Δt和Δω的积。至此基本介绍完毕,请大家继续关注!!!
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209065.html原文链接:https://javaforall.net
