function cont2im(c)
% CONT2IM - Usporadani koeficientu 2D transformace Contourled a ContourletSD
%   CONT2IM zobrazi koeficienty C urcene dekompozici Contourlet a
%   ContourletSD. 
% 
%   Obecny tvar funkce:
%   CONT2IM(C)
% 
%   Okraj jednotlivych skupin keoficientu je oramovan. 
%   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
%   !!! Funkce slouzi pouze pro ukazku rozlozeni koeficientu        !!!
%   !!! transformace Contourlet a ContourletSD. Skupiny koeficientu !!!
%   !!! urcujici jednotlive smery jsou oramovany.                   !!!
%   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

%% Definice nejvyssi urovne dekompozice
cc = length(c);
maxi = max(max(abs(c{1})));
sizi = size(c{1});
newmat = maxi*ones(sizi(1)+2,sizi(2)+2);
newmat(2:end-1,2:end-1) = c{1};
s{1}{1} = newmat/maxi; % normalizace hodnot
%% Definice ostatnich urovni            
g = 2;
for i = 2:cc
% Jestlize se nerovnaji strany, usporadaji se koeficienty se stejnym
% rozmereme do jedne bunky.
% V prvni polovine jsou delsi radky, 
    if size(c{i}{1}) ~= size(c{i}{end})
        w = length(c{i});
        for ww=1:w/2
            maxi = max(max(abs(c{i}{ww})));
            c{i}{ww}(isnan(c{i}{ww})) = 0;
            
            if maxi == 0;
                maxi = 1;
            end
            sizi = size(c{i}{ww});
            newmat = maxi*ones(sizi(1)+2,sizi(2)+2);
            newmat(2:end-1,2:end-1) = c{i}{ww};
            s{g}{ww} = newmat/maxi; % normalizace hodnot po skupinach
                                    % pro moznost odhaleni keoficientu 
                                    % na nizsich urovni       
        end
        g = g+1;
% ve druhe polovine jsou delsi sloupce.
        for ww=(w/2)+1:w
            maxi = max(max(abs(c{i}{ww})));
            c{i}{ww}(isnan(c{i}{ww})) = 0;
%             maxi = max(max(abs(c{i}{ww})));
            if maxi == 0;
                maxi = 1;
            end
            sizi = size(c{i}{ww});
            newmat = maxi*ones(sizi(1)+2,sizi(2)+2);
            newmat(2:end-1,2:end-1) = c{i}{ww};
            s{g}{ww-w/2} = newmat/maxi;
            
        end
        g = g+1;
% V pripade, ze se stranu rovnaji, neni treba usporadat keoficienty
    else 
        w = length(c{i});
        for ww = 1:w;
            c{i}{ww}(isnan(c{i}{ww})) = 0;
            maxi = max(max(abs(c{i}{ww})));
            if maxi == 0;
                maxi = 1;
            end
            sizi = size(c{i}{ww});
            newmat = maxi*ones(sizi(1)+2,sizi(2)+2);
            newmat(2:end-1,2:end-1) = c{i}{ww};
            s{g}{ww} = newmat/maxi;
        end
        g = g+1;
    end
end
%% Definice provni urovne obrazu
im{1} = s{1}{1};
for i = 2:length(s)
    siz = size(s{i}{1});
    len = length(s{i});
% Jestlize je splneny podminky, usporadaji se skupiny koeficientu do dvou
% skupin
    if siz(1) <= siz(2)
        if len>2 && mod(len,2) == 0
            clear tmp1; clear tmp2;
            for r = 1:len/2
                tmp1{r} = s{i}{r}';
            end
            for r = (len/2+1):len
                tmp2{r-len/2} = s{i}{r}';
            end
            im{i} =[cell2mat(tmp1)' cell2mat(tmp2)'];
        else
            im{i} = zeros(siz(1),siz(2));
            for u=1:len
            temp{u} = s{i}{u};
                if u ==1
                    im{i} = temp{u};
                else
                    im{i} =[im{i}; temp{u}];
                end
            end
        end
% Jestlize je rozmer skupiny keoficientu vetsi do vysky, neni treba
% rozdelit do dvou skupin
    else im{i} =cell2mat(s{i});
    end
end
%% Nastaveni rozmeru vystupu funkce
% Inicializace rozmeru zobrazeneho obrazu
vyska = 0;
sirka = 0;
for i = 1:length(im)
   prm{i} = size(im{i});
   vyska = vyska +prm{i}(1);
   vys{i} = vyska;
end
sirka = prm{end}(2);
obrazek = ones(vyska,sirka); % Inicializace "platna"
obrazek(1:prm{1}(1),1:prm{1}(2)) = im{1};
tmp = prm{1}(1);
% Vykresleni keoficientu na "platno"
for i = 2:length(im)
    obrazek(tmp+1:prm{i}(1)+tmp,1:prm{i}(2)) = im{i};
    tmp = tmp +prm{i}(1);
end
imshow(obrazek);
% qq = im2uint8(obrazek);
