function o = wpakrec2(c,S,wname)
% WPAKREC2 - 2D rekonstrukce Wavelet Packet
%   WPAKREC2 ziska rekonstrukci 2D signalu z koeficientu C pro vlnku WNAME.
%   Rozmery jednotlivych urovni jsou ulozeny v promenne S. Funkce vyuziva
%   vnlky implementovane v programu MATLAB.
%   Rekonstrukce se provadi pomoci WAVEDEC2
% 
%   WPAKREC2 urci rekonstrukci koeficientu ziskanych pomoci WPAKDEC2.
% 
%   Obecny tvar funkce:
%   OUT = WPAKREC2(C,S,WNAME)

%% Definice vstupnich promennych
leng = length(c);
k = 0;
len = length(c{end});
%% Definice nejvyssi urovne rekonstrukce
c{1}{1} = [];
%% Rekonstrukce posledni urovne do nasledujici urovne
for i = 1:4:len-3
        k = k+1;
        if isempty(c{leng}{i}) == 0
            C = [];
            C = [C reshape(c{leng}{i},1,S{leng}{1}(1,1)*S{leng}{1}(1,2)) ];
            C = [C reshape(c{leng}{i+1},1,S{leng}{1}(1,1)*S{leng}{1}(1,2)) ];
            C = [C reshape(c{leng}{i+2},1,S{leng}{1}(1,1)*S{leng}{1}(1,2)) ];
            C = [C reshape(c{leng}{i+3},1,S{leng}{1}(1,1)*S{leng}{1}(1,2)) ];
            dd{leng}{k} = waverec2(C,S{end}{i},wname);
        else dd{leng}{k} = c{leng-1}{k};
        end
       
end
%% Rekonstrukce ostatnich urovni smerem od nizsi urovne k nejvyssi
for l = 1:1:leng-2
    len = length(c{leng-(l)});
    k = 1;
    for i = 1:4:len-3
        if (isempty(c{leng-(l+1)}{k}) == 1 ||  nnz(c{leng-(l+1)}{k}) ==0) && isempty(dd{leng-(l-1)}{i}) == 0
            C = [];
            C = [C reshape(dd{leng-(l-1)}{i},1,S{leng-(l)}{1}(1,1)*S{leng-(l)}{1}(1,2)) ];
            C = [C reshape(dd{leng-(l-1)}{i+1},1,S{leng-(l)}{1}(1,1)*S{leng-(l)}{1}(1,2)) ];
            C = [C reshape(dd{leng-(l-1)}{i+2},1,S{leng-(l)}{1}(1,1)*S{leng-(l)}{1}(1,2)) ];
            C = [C reshape(dd{leng-(l-1)}{i+3},1,S{leng-(l)}{1}(1,1)*S{leng-(l)}{1}(1,2)) ];
            dd{leng-(l)}{k} = waverec2(C,S{leng-(l)}{i},wname);
            k = k+1;
         else dd{leng-(l)}{k} = c{leng-(l+1)}{k};
            k = k+1;
        end
    end
end
%% Definice vystupu do tvaru vhodne pro zobrazeni
o = dd{2}{1};