matlab 小波变换

[Lo_D,Hi_D,Lo_R,Hi_R]=wfilters('haar');%获得Haar小波的尺度和小波系数
Lo_D     %打印低通分解滤波器系数
Hi_D     %打印高通分解滤波器系数
Lo_R     %打印低通重构滤波器系数
Hi_R     %打印高通重构滤波器系数

waveinfo('haar');   %打印Haar小波相关信息

[phi,psi,xval]=wavefun('haar',10);%wavefun函数产生尺度向量和小波向量
xaxis=zeros(size(xval));  %y轴
axis square;
title('Haar Scaling Function');
  subplot ( 122 ) ; plot ( xval , psi , ' k ' , xval , xaxis , ' - k ' ) ; % 绘制小波向量
 axis ( [ 0 1 -1.5 1.5 ] ) ; % y轴
axis square ;
title ( 'Haar Wavelet Function ' ) ;

f = magic (4 ) ;  % f 是4 X 4的魔术矩阵
f
% 对f 进行一次小波分解,c1是系数矩阵,s1是c1各分量的维数。
[C1,S1]=wavedec2(f,1,'haar');
C1
S1
[ C2 , S2 ] = wavedec2 ( f , 2 , ' haar ' ) ;
C2
S2

f = imread ( '你的图 ' ) ;  
imshow ( f ) ;
[C,S] = wavefast( f , 1 ,'sym4' ) ;
% 以4格灰度图像方式显示小波分解结果
figure , wave2gray ( C , S , -6 ) ;
[ nc , y ] = wavecut ( 'a' , C , S ) ;  % 去掉分解结果中的近似系数
figure , wave2gray ( nc , S , -6 ) ;  % 显示处理后的小波系数
% 小波反变换,得到边缘图像
edges = abs ( waveback ( nc , S , 'sym4' ) );
figure , imshow ( mat2gray ( edges ) ) ;   % 显示边缘图像

f = imread ( '你的图' ) ;
[ C , S ] = wavefast ( f , 4 , 'sym4' ) ;  % 4层小波分解
wave2gray ( C , S , 20 ); % 以图像形式显示小波系数
% 第一层分解的小波系数置为0 ,并显示反变换后的图像
[ C , g8 ] = wavezero ( C , S , 1 , 'sym4' ) ;  % wavezero 函数请见7.6节
% 第一,二层分解的小波系数置为0 ,并显示反变换后的图像
[ C , g8 ] = wavezero ( C , S , 2 , 'sym4' ) ;  
% 第一,二,三层分解的小波系数置为0 ,并显示反变换后的图像
[ C , g8 ] = wavezero ( C , S , 3 , 'sym4' ) ;
% 4层分解的小波系数都置为0 ,并显示反变换后的图像
[ C , g8 ] = wavezero ( C , S , 4 , 'sym4' ) ; 

f = imread ( '你的图' ) ;  
[ C , S ] = wavefast( f,4,'jpeg9.7') ;  % 4层小波分解
wave2gray ( C , S , 8 ); % 显示处理后的小波系数
f = wavecopy ('a', C , S ) ;  % f 是第4层分解后的近似系数
figure , imshow ( mat2gray ( f ) ) ;  % 显示第4层分解后的近似图像
[ C , S ] = waveback(C,S,'jpeg9.7',1) ;   % 一次重构
%  f 是第3层分解后的近似图像
f = wavecopy ('a',C,S) ;
% 显示第3层分解后的近似图像
figure , imshow ( mat2gray ( f ) ) ;
% 二次重构
[ C , S ] = waveback(C,S,'jpeg9.7',1) ;
%  f 是第2层分解后的近似系数
f = wavecopy ('a',C,S) ;
% 显示第2层分解后的近似图像
figure , imshow ( mat2gray ( f ) ) ;
[C,S]= waveback(C, S,'jpeg9.7',1);%三次重构
f = wavecopy('a', C, S);%f是第1层分解后的近似函数
figure, imshow(mat2gray(f));%显示第1层分解后的近似图像
[C, S]= waveback(C, S, 'jpeg9.7', 1); %四次重构
f = wavecopy('a', C, S);%f是最终重构后的图像
figure, imshow(mat2gray(f)); %显示重构后的最终图像

f = imread ( '你的图 ' ) ; 
[ C , S ] = wavefast( f,2,'db4') ;  % 4层小波分解
wave2gray(C,S); % 显示处理后的小波系数
figure,wave2gray(C,S,8);
figure,wave2gray(C,S,-8);

小波变换的图像处理%MATLAB2维小波变换经典程序 % FWT_DB.M; % 此示意程序用DWT实现二维小波变换 % 编程时间2004-4-10,编程人沙威 %%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%% clear; clc; T=256; % 图像维数 SUB_T=T/2; % 子图维数 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 1.调原始图像矩阵 load wbarb; % 下载图像 f=X; % 原始图像 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 2.进行二维小波分解 l=wfilters('db10','l'); % db10(消失矩为10)低通分解滤波器冲击响应(长度为20) L=T-length(l); l_zeros=[l,zeros(1,L)]; % 矩阵行数与输入图像一致,为2的整数幂 h=wfilters('db10','h'); % db10(消失矩为10)高通分解滤波器冲击响应(长度为20) h_zeros=[h,zeros(1,L)]; % 矩阵行数与输入图像一致,为2的整数幂 for i=1:T; % 列变换 row(1:SUB_T,i)=dyaddown( ifft( fft(l_zeros).*fft(f(:,i)') ) ).'; % 圆周卷积FFT row(SUB_T+1:T,i)=dyaddown( ifft( fft(h_zeros).*fft(f(:,i)') ) ).'; % 圆周卷积FFT end; for j=1:T; % 行变换 line(j,1:SUB_T)=dyaddown( ifft( fft(l_zeros).*fft(row(j,:)) ) ); % 圆周卷积FFT line(j,SUB_T+1:T)=dyaddown( ifft( fft(h_zeros).*fft(row(j,:)) ) ); % 圆周卷积FFT end; decompose_pic=line; % 分解矩阵 % 图像分为四块 lt_pic=decompose_pic(1:SUB_T,1:SUB_T); % 在矩阵左上方为低频分量--fi(x)*fi(y) rt_pic=decompose_pic(1:SUB_T,SUB_T+1:T); % 矩阵右上为--fi(x)*psi(y) lb_pic=decompose_pic(SUB_T+1:T,1:SUB_T); % 矩阵左下为--psi(x)*fi(y) rb_pic=decompose_pic(SUB_T+1:T,SUB_T+1:T); % 右下方为高频分量--psi(x)*psi(y) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 3.分解结果显示 figure(1); colormap(map); subplot(2,1,1); image(f); % 原始图像 title('original pic'); subplot(2,1,2); image(abs(decompose_pic)); % 分解后图像 title('decomposed pic'); figure(2); colormap(map); subplot(2,2,1); image(abs(lt_pic)); % 左上方为低频分量--fi(x)*fi(y) title('\Phi(x)*\Phi(y)'); subplot(2,2,2); image(abs(rt_pic)); % 矩阵右上为--fi(x)*psi(y) title('\Phi(x)*\Psi(y)'); subplot(2,2,3); image(abs(lb_pic)); % 矩阵左下为--psi(x)*fi(y) title('\Psi(x)*\Phi(y)'); subplot(2,2,4); image(abs(rb_pic)); % 右下方为高频分量--psi(x)*psi(y) title('\Psi(x)*\Psi(y)'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 5.重构源图像及结果显示 % construct_pic=decompose_matrix'*decompose_pic*decompose_matrix; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% l_re=l_zeros(end:-1:1); % 重构低通滤波 l_r=circshift(l_re',1)'; % 位置调整 h_re=h_zeros(end:-1:1); % 重构高通滤波 h_r=circshift(h_re',1)'; % 位置调整 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% top_pic=[lt_pic,rt_pic]; % 图像上半部分 t=0; for i=1:T; % 行插值低频 if (mod(i,2)==0) topll(i,:)=top_pic(t,:); % 偶数行保持 else t=t+1; topll(i,:)=zeros(1,T); % 奇数行为零 end end; for i=1:T; % 列变换 topcl_re(:,i)=ifft( fft(l_r).*fft(topll(:,i)') )'; % 圆周卷积FFT end; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% bottom_pic=[lb_pic,rb_pic]; % 图像下半部分 t=0; for i=1:T; % 行插值高频 if (mod(i,2)==0) bottomlh(i,:)=bottom_pic(t,:); % 偶数行保持 else bottomlh(i,:)=zeros(1,T); % 奇数行为零 t=t+1; end end; for i=1:T; % 列变换 bottomch_re(:,i)=ifft( fft(h_r).*fft(bottomlh(:,i)') )'; % 圆周卷积FFT end; construct1=bottomch_re+topcl_re; % 列变换重构完毕 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% left_pic=construct1(:,1:SUB_T); % 图像左半部分 t=0; for i=1:T; % 列插值低频 if (mod(i,2)==0) leftll(:,i)=left_pic(:,t); % 偶数列保持 else t=t+1; leftll(:,i)=zeros(T,1); % 奇数列为零 end end; for i=1:T; % 行变换 leftcl_re(i,:)=ifft( fft(l_r).*fft(leftll(i,:)) ); % 圆周卷积FFT end; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% right_pic=construct1(:,SUB_T+1:T); % 图像右半部分 t=0; for i=1:T; % 列插值高频 if (mod(i,2)==0) rightlh(:,i)=right_pic(:,t); % 偶数列保持 else rightlh(:,i)=zeros(T,1); % 奇数列为零 t=t+1; end end; for i=1:T; % 行变换 rightch_re(i,:)=ifft( fft(h_r).*fft(rightlh(i,:)) ); % 圆周卷积FFT end; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% construct_pic=rightch_re+leftcl_re; % 重建全部图像 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 结果显示 figure(3); colormap(map); subplot(2,1,1); image(f); % 源图像显示 title('original pic'); subplot(2,1,2); image(abs(construct_pic)); % 重构源图像显示 title('reconstructed pic'); error=abs(construct_pic-f); % 重构图形与原始图像误值 figure(4); mesh(error); % 误差三维图像 title('absolute error display');
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值