function [output,coef,ocoef] = WAVELET(img,cfs,level,wavename)

%%Transformační metoda schearlet
%% přidání transformační metody wavelet pro porovnání

%   ziska pro vstupni obraz im vystup output, ktery je s omezenym poctem
%   nejvyznamnejsich koeficientu. Ty jsou zadany pod hodnotou cfs.
%   Z možných vystupnich hodnot je na vyber výsledná rekonstrukce obrazu z
%   daneho poctu koeficientu a vypoctene koeficienty dekompozici vstupniho
%   obrazu
%
%   Funkce v zaveru i urci hodnoty kvality obrazu jako jsou SNR,PSNR,MSE a
%   SSIM.
%
%   Obecny tvar funkce:
%   [OUTPUT2,COEF,OCOEF]  = WAVELET(IM,CFS, LEVEL, WAVENAME)
%
%   level -  volba urovne dekompozice  
%   Wavename - typ vlnky
% 
%   Vstupem se zadava primo nazev souboru.
%
%   Priklad zadavani funkce:
%   [output2,coef,ocoef] = WAVELET('lena.png',4000,3,'db7');






%% Nacteni vstupniho obrazku
f = imread(img);
f = f(:,:,1); % omezeni na jednu hladina tedy sedou a to v pripade ze se jedna o barevny obraz
%% Waveletova dekompozice

[X,Y] = wavedec2(f,level,wavename);

%% omezeni transformacnich koeficientu na zvoleny pocet cfs nejvyznamejsich
% koeficientu
len = length(X);
XX = zeros(1,len); % vytvoreni prazdneho vektoru pro ulozeni a serazeni koeficientu

coef = wave2im(X,Y,level,wavename);
%%
[~,s]=sort(abs(R),'descend');  % seskupenzi koeficientu od nejvetsiho po nejmensi
%% Zapsani serazenych koeficientu do pripraveneho vektoru
i = 1;
while i < len + 1  && i < cfs + 1
    XX(y(i)) =X(y(i));
    i = i + 1;
end



%% Rekonstrukce obrazu z omezeneho poctu nejvyznamejsich koeficientu
output = waverec2(XX,S,wavename);

ocoef = wave2im(CC,S,level,wavename);


%% Vypocty PSNR, SNR, MSE a SSIM 

vst = double(im)/256; %%  vstupni hodnoty
vys = (double(output)/256); %%  ystupni hodnoty
chyb = mean(mean(((vst)-(vys)).^2));  % vypocet stredni kvadraticke chyby MSE
chyba = vst - vys;
chyba = chyba(:);
PSNR = 10 * log10(1/mean(chyba .^2));   % vypocet spockoveho pomeru signal-sum: PSNR
ssimm = ssim(im, output);               
SNR = 10 * log10(var(vst(:), 1) / mean(chyba(:).^2));

%% Zobrazení vypoctenych vystupnich parametru na displej
disp(['Transformace pro ',num2str(cfs),' koeficientu metody Surelet']);

disp(' ');

disp(['PSNR = ',num2str(PSNR),'dB']);
disp(['SNR  = ',num2str(SNR),'dB']);
disp(['MSE  = ',num2str(chyb)]);
disp(['SSIM = ',num2str(abs(ssimm))]);

%%vykresleni vysptuniho obrazu

imagesc(output,[0 255]);axis image off;colormap gray(256);

output=uint8(output);