clear all;
close all;
wname = 'db3';
koef = 8192;
level = 3;
%dwtmode : periodization
% [C,S] = wpakdec2('lena.png',3,'db3');
obrazek = 'boat.png';
im = imread(obrazek);
im = im(:,:,1);
% C = wpakdec(im,3,wname);
[C,S] = wpakdec2(im,level,wname);
%% Zobrazeni dekompozice
% wpakim(C);
% title('Dekompozice obrazu')
%% Zobrazeni kvarterniho stromu dekompozice
wpaktree(C);
%% Zobrazeni dekompozice ze vsech koeficientu
wpak2im(C);
%% Zobrazeni rekonstrukce obrazu ze vsech puvodnich koeficientu
o = wpakrec2(C,S,wname);
% o = wpakrec(C,wname);
figure;
imshow(uint8(o));
title('Rekonstrukce obrazu ze vsech koeficientu');
%% Omezeni poctu koeficientu na 5% koeficientu
koefc = wpaknnz(C); % Urceni celkoveho poctu koeficientu dekompozice
out = wpaklim(C,koef); % Omezeni na 8192 koef.
o = wpakrec2(out,S,wname); % Rekonstrukce z omezeneho poctu koef.
% o = wpakrec(out,wname);
figure;
imshow(uint8(o));
title(['Rekonstrukce obrazu pro ' , num2str(koef),' koeficientu']);
%% Zobrazeni rekonstrukce obrazu ze vsech puvodnich koeficientu
wpak2im(out); 
% imwrite(uint8(o),'lenaWP.png');
x = double(im);
y = double(o);
x = x/255;
y = y/255;
error = mean(mean(((x)-(y)).^2));
err = x - y;
err = err(:);
snr = 10 * log10(var(x(:),1) / mean(err(:).^2));
PSNRdb = 10 * log10(1/mean(err .^2));
disp(['PSNR = ',num2str(abs(PSNRdb)),'dB']);
disp(['SNR = ',num2str(abs(snr)),'dB']);
disp(['MSE = ',num2str(abs(error))]);
disp(' ');
disp(' ');