www.pudn.com > SPIHT_bandelet.rar > test_wavelet_quadtree.m
% test the quadtree construction in wavelet domain
%
% Copyright (c) 2005 Gabriel Peyr?
% set to 0 if you don't want to save the images
save_images = 0;
rep = 'images/';
warning off;
mkdir(rep);
warning on;
n = 128;
options.sigma = 3;
M = load_image('line_circle', n);
if save_images
warning off;
imwrite( M/256, [rep 'original.png'], 'png' )
warning on;
end
Jmin = 3;
Jmax = log2(n)-1;
j_min = 2;
j_max = 4;
T = 100;
disp('Computing quadtree.');
[QT,Theta] = compute_wavelet_quadtree(M,Jmin,T,j_min,j_max);
MW = perform_wavelet_transform(M,Jmin, 1);
% save QT and Theta
if save_images
warning off;
imwrite( (QT-min(QT(:)))/(max(QT(:))-min(QT(:))), [rep sprintf('qt_bandelet_wavelet_%d_m%d.png', T,m)], 'png' );
imwrite( Theta/pi, [rep sprintf('theta_bandelet_wavelet_%d_m%d.png', T,m)], 'png' );
warning on;
str = [rep sprintf('quadtree_wavelet_bandelet_%d', T)];
clf;
plot_wavelet_quadtree(QT,Theta,Jmax,1,MW);
saveas(gcf, str, 'png');
clf;
plot_wavelet_quadtree(QT,Theta,Jmax,1,MW,2);
saveas(gcf, [str, '_geom'], 'eps');
clf;
plot_wavelet_quadtree(QT,Theta,Jmax,1,MW,3);
saveas(gcf, [str, '_struct'], 'eps');
end
% direct transform
disp('Computing forward bandelet transform.');
[MB,m_geom] = perform_wavelet_bandelet_transform(M,Jmin,QT,Theta,1);
disp('Computing inverse bandelet transform.');
[M1,m_geom] = perform_wavelet_bandelet_transform(MB,Jmin,QT,Theta,-1);
disp( ['|f-B^-1(B(f)|^2 (should be 0 for a correct reconstruction) --> ' sprintf( '%f', sum( (M(:)-M1(:)).^2 ) )] );
% performing truncated reconstruction
MBt = MB .* (abs(MB)>T); % thresholded transform
[M1,m_geom] = perform_wavelet_bandelet_transform(MBt,Jmin,QT,Theta,-1);
clf;
imagesc(M1);
% number of coefficients used
m = round( sum( abs(MB(:))>T )+m_geom );
% save image
if save_images
warning off;
imwrite( M1/256, [rep sprintf('bandelet_wavelet_%d_m%d.png', T,m)], 'png' );
disp( sprintf('T=%d, #coefficients=%d', T, m) );
warning on;
end