www.pudn.com > SPIHT_bandelet.rar > test_compression.asv
% 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;
name = 'polygons_blurred';
name = 'barb';
rep = 'images/';
if save_images
warning off;
mkdir(rep);
warning on;
end
global wavelet_vm;
wavelet_vm = 0;
n = 512;
s = Inf; % super-resolution on the geometry
% set to:
% 1 if you want the 3 wavelets bands H/V/D to share the same quadtree
% 0 for 3 different quadtree (more adaptivity but more bits for geometry).
options.use_single_qt = 0;
M = load_image(name, n);
% reduce size for speed up
n = 128;
M = M(end/2-n/2+1:end/2+n/2, end/2-n/2+1:end/2+n/2);
% remove high transition by projecting
% on coarse scale wavelet domain
MW = perform_wavelet_transform(M,log2(n),1);
M = MW(1:n,1:n);
if save_images
warning off;
imwrite( M/256, [rep 'original.png'], 'png' )
warning on;
end
Jmin = 4;
Jmax = log2(n)-1;
j_min = 2;
j_max = 4;
T = [1:0.5:5, 7:2:15, 20];
disp('Computing quadtree.');
if ~exist('QT')
[QT,Theta] = compute_wavelet_quadtree(M,Jmin,T,j_min,j_max,s, options);
end
MW = perform_wavelet_transform(M,Jmin, 1);
% to reccord the results
psnr_wav = [];
bit_wav = [];
psnr_band = [];
bit_band = [];
% test for psnr
i = 0;
for t = T
i = i+1;
QTt = QT(:,:,i);
Thetat = Theta(:,:,i);
% direct transform
disp('Computing forward bandelet transform.');
[MB,Rbandg] = perform_wavelet_bandelet_transform(M,Jmin,QTt,Thetat,1, options);
% quantize
MBt = perform_quantization(MB,t);
MWt = perform_quantization(MW,t);
% evaluate the nbr of bits via entropy
% Rwav = evaluate_nbr_bits_wavelets(MW, Jmin, t);
% Rband = evaluate_nbr_bits_wavelets(MB, Jmin, t);
disp('Computing inverse bandelet transform.');
[Mb,Rbandg] = perform_wavelet_bandelet_transform(MBt,Jmin,QTt,Thetat,-1, options);
disp('Computing inverse bandelet transform.');
Mw = perform_wavelet_transform(MWt,Jmin,-1);
psnr_wav = [psnr_wav, psnr( Mw,M )];
psnr_band = [psnr_band, psnr( Mb,M )];
%bit_wav = [bit_wav, Rwav];
%bit_band = [bit_band, Rband+Rbandg];
end
bit_wav = bit_wav/n^2;
bit_band = bit_band/n^2;
plot(bit_wav, psnr_wav, bit_band, psnr_band);
axis tight;
legend('Wavelets', 'Bandelets');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
m1 = min( min(bit_wav), min(bit_band) );
m2 = max( max(bit_wav), max(bit_band) );
bpp = linspace(m1,m2,200);
interp_psnr_wav = interp1(bit_wav, psnr_wav, bpp);
interp_psnr_band = interp1(bit_band, psnr_band, bpp);
interp_gain = interp_psnr_band - interp_psnr_wav;
I = find(~isnan(interp_gain));
interp_gain = interp_gain(I);
bpp = bpp(I);
plot(bpp, interp_gain);
title('PSNR Gain wav->band');
xlabel('bbp');
ylabel('+PSNR');
axis tight;
if save_images
if wavelet_vm==4
str_wav = '7-9';
elseif wavelet_vm==0
str_wav = 'haar';
end
if options.use_single_qt==1
str_geom = 'singlegeom';
else
str_geom = 'triplegeom';
end
str = [name '_psnrgain_' str_wav '_' str_geom];
saveas(gcf, [str '.png'], 'png');
end