matlab中haar指定滤波器,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

可指定为db1、db2、......db45、haar中的任意一种小波,直接调用

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

会返回分滤波器系数Lo_D,Hi_D,Lo_R,Hi_R

其中:

Lo_D:低通分解滤波器系数

Hi_D:高通分解滤波器系数

Lo_R:低通重构滤波器系数

Hi_R:高通重构滤波器系数

如果只想返回其中的一些而不是全部,可以调用

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

其中'type’可指定为4种类型,每种类型的具体意义:

‘d’:返回:Lo_D,Hi_D 即返回分解滤波器系数

‘r’:返回:Lo_R,Hi_R 即返回重构滤波器系数

‘l’:返回:Lo_D,Lo_R 即返回低通滤波器系数

‘h’:返回:Hi_D,Hi_R 即返回高通滤波器系数

************************************************************

查看具体小波的信息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.

for i = 1:iter

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

plot(xval,psi);

hold on

end

title(['Approximations of the wavelet

',wav,

...

' for 1 to

',num2str(iter),' iterations']);

hold

off

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

[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)

%

图片的小波分解

clear

all

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,colormap

gray

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

clear

all

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是实数图像矩阵,由于计算误差,可能需要经过一些处理才能正常显示。

%

小波综合

clear

all

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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值