test_pyramidal.m

来自「小波提升算法的实现」· M 代码 · 共 71 行

M
71
字号
% test for the pyramidal decomposition


options.bound = 'per';
% options.bound = 'sym';
options.J = 5;

g = MakeONFilter('Haar',1);
%g = MakeONFilter('Battle',3);

[qmf,dqmf] = MakeBSFilter( 'CDF', [4,4] );
g = {qmf,dqmf};

sigma = 0.1;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% test in 1D
disp('--- test in 1D ---');
n = 1024;
x = (0:1/(n-1):1)';
% x = ones(n,1);
y = cos( 8*pi*x.^2 );
y = x.^2;

y = y + randn(size(y))*sigma;

% fwd transform
f = fwt_pyramid(y,g,options);

% threshold
N = 100;
f = keep_biggest(f,N);

% bwd transform
y_fr = fwt_pyramid(f,g,options);
y_nfr = fwt_pyramid_nonframe(f,g,options);

Eo = norme(y)^2;
Ep = 0;
for i=1:length(f)
    Ep = Ep + norme(f{i})^2;
end

disp(sprintf('Energy : original=%.3f, transformed=%.3f.', Eo, Ep));

disp( sprintf('Error frame=%.3f, Error non-frame=%.3f', norme(y-y_fr), norme(y-y_nfr) ) ); 
disp( sprintf('PSNR frame=%.3f, PSNR non-frame=%.3f', psnr(y,y_fr), psnr(y,y_nfr)) ); 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% test in 2D
disp('--- test in 2D ---');
n = 512;
y = load_image('peppers', n);
options.J = 6;

% fwd transform
f = fwt_pyramid(y,g,options);

% threshold
if 1
N = 2^14;
f = keep_biggest(f,N);
end

% bwd transform
y_fr = fwt_pyramid(f,g,options);
y_nfr = fwt_pyramid_nonframe(f,g,options);

disp( sprintf('Error frame=%.3f, Error non-frame=%.3f', mean(mean((y-y_fr).^2)), mean(mean((y-y_nfr).^2)) ) ); 
disp( sprintf('PSNR frame=%.3f, PSNR non-frame=%.3f', psnr(y,y_fr), psnr(y,y_nfr)) ); 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?