matlab中小波工具箱,使用 MATLAB 小波工具箱进行小波分析:

如上图所示的小波分解过程,可以调用wfilters来获得指定小波的分解和综合滤波器系数,例如:

% Set wavelet name.

wname ='db5';

% Compute the four filters associated with wavelet name given

% by the input string wname.

[Lo_D,Hi_D,Lo_R,Hi_R] = wfilters(wname);

subplot(221); stem(Lo_D);

title('Decomposition low-pass filter');

subplot(222); stem(Hi_D);

title('Decomposition high-pass filter');

subplot(223); stem(Lo_R);

title('Reconstruction low-pass filter');

subplot(224); stem(Hi_R);

title('Reconstruction high-pass filter');

xlabel('The four filters for db5')

% Editing some graphical properties,

% the following figure is generated.

以上例子,得到’db5’小波的分解和综合滤波器系数,并显示出来。下面是wfilters的具体用法:

Wname可指定为列表中的任意一种小波,直接调用

[Lo_D,Hi_D,Lo_R,Hi_R] = wfilters('wname')

会返回分解和综合滤波器系数。如果只想返回其中的一些而不是全部,可以调用

[F1,F2] = wfilters('wname','type')

其中’type’可指定为4种类型,每种类型的具体意义详见matlab wfilters帮助。

查看具体小波的信息

waveinfo(‘wname’)

获得一个标准的正交变换/双正交变换 的尺度和小波函数(数字近似值)

[PHI,PSI,XVAL] = wavefun('wname',ITER)

[PHI1,PSI1,PHI2,PSI2,XVAL] = wavefun('wname',ITER)

例如

% Set number of iterations and wavelet name.

iter = 10;

wav ='sym4';

% Compute approximations of the wavelet function using the

% cascade algorithm.

fori = 1:iter

[phi,psi,xval] = wavefun(wav,i);

plot(xval,psi);

holdon

end

title(['Approximations of the wavelet ',wav,...

' for 1 to ',num2str(iter),' iterations']);

holdoff

如果已知小波分解滤波器系数,计算小波变换的最简单方法就是

[C,S] = wavedec2(X,N,'wname')

[C,S] = wavedec2(X,N,Lo_D,Hi_D)

反过来,已知小波综合滤波器系数,计算反小波变换,只需

X = waverec2(C,S,'wname')

X = waverec2(C,S,Lo_R,Hi_R)

%图片的小波分解

clearall

clc

im  = imread('../../std_images/lena.bmp');%灰度

im  = double(im);

[Lo_D,Hi_D] = wfilters('haar','d');

[C,S]       = wavedec2(im,1,Lo_D,Hi_D);

isize       = prod(S(1,:));

%

cA= C(1:isize);

cH  = C(isize+(1:isize));

cV  = C(2*isize+(1:isize));

cD  = C(3*isize+(1:isize));

%

cA   = reshape(cA,S(1,1),S(1,2));

cH  = reshape(cH,S(2,1),S(2,2));

cV  = reshape(cV,S(2,1),S(2,2));

cD  = reshape(cD,S(2,1),S(2,2));

%

figure,colormapgray

subplot(221),imagesc(cA);

subplot(222),imagesc(cH);

subplot(223),imagesc(cV);

subplot(224),imagesc(cD);

其中C是小波变换后的结果数据,以一维矢量的形式组织,S是二维数组,记录了C中数据的分布形式,详见matlab的帮助文档。此外,dwtmode可以设定输入的边界处理方式。

提取小波的系数。前面使用的wavedec2得到的[C,S]不是非常的直观,可以利用小波工具箱中的函数appcoef2和detcoef2来提取近似矩阵和的n级的某一个细节矩阵。

A = appcoef2(C,S,'wname',N)

A = appcoef2(C,S,'wname')

D = detcoef2(O,C,S,N)

针对特定的小波系数矩阵进行阈值化处理

NC = wthcoef2('type',C,S,N,T,SORH)

NC = wthcoef2('type',C,S,N)

NC = wthcoef2('a',C,S)

NC = wthcoef2('t',C,S,N,T,SORH)

使用wave2gray来显示小波分解的结果

%使用wave2gray显示小波分解的结果,来自dipum_1.1.4 toolbox

clearall

clc

im  = imread('../../std_images/lena.bmp');%灰度

im  = double(im);

[Lo_D,Hi_D] = wfilters('haar','d');

[C,S]       = wavedec2(im,2,Lo_D,Hi_D);

wave2gray(C,S);

关于wave2gray更多用法详见dipum_1.1.4 toolbox的说明文档[官方网站]。

小波综合(重建):waverec2

X = waverec2(C,S,'wname')

X = waverec2(C,S,Lo_R,Hi_R)

[C,S]是使用小波分解函数wavedec2得到的小波矢量和矢量描述矩阵,或者符合这种规定形式的数据。返回X是实数图像矩阵,由于计算误差,可能需要经过一些处理才能正常显示。

%小波综合

clearall

clc

im  = imread('../../std_images/lena.bmp');%灰度

im  = double(im);

[Lo_D,Hi_D] = wfilters('haar','d');

[C,S]       = wavedec2(im,2,Lo_D,Hi_D);

X   = waverec2(C,S,'haar');

%或者

% [Lo_R,Hi_R] = wfilters('haar','r');

% X   = waverec2(C,S,Lo_D,Hi_D);

X   = (X-min(X(:)))/(max(X(:))-min(X(:)));

figure,imshow(X);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值