function out = im2pwsym(in,cut,val)
% IM2PWSYM - Nastaveni rozmeru 2D vstupu na hodnotu (2^n)*(2^n).
%   IM2PWSYM nastavi pro 2D vstup IN rozmery o hodnote 2^n pro vystup OUT.
%   IN musi obsahovat hodnoty 2D vstupu.  
% 
%   Obecny tvar funkce:
%   OUT = IM2PWSYM(IN,CUT,VAL)
% 
%   Promenna CUT slozi pro nastaveni oriznuti/dopleni vstupu. 
%   Pri volbe 'y' bude vstup zmensen na nejblizsi nizsi hodnotu (2^n)*(2^n).
%   Pri volbe 'n' bude vstup doplnen nulami na rozmer nejblizsi vyssi
%   hodnoty 2^n. n je cele kladne cislo.
% 
%   Pomoci promenne VAL lze zvolit rozmer vystupu pro hodnoty mensi 
%   nez rozmer vstupu. VAL musi byt z rozsahu hodnot 2^n.
%   Zadanim hodnoty VAL bude obsah promenne CUT ignorovan.
%   V pripade, ze je potrebne oriznuti/dopleni vstupu pomoci CUT, VAL
%   se nezadava.
% 
%   Priklady zadavani funkce:
%   out = im2pwsym(in,'y');     <-- Oriznuti vstupu
%   out = im2pwsym(in,'n');     <-- Doplneni vstupu
%   out = im2pwsym(in,[],256);  <-- Manualni nastaveni rozmeru

%% Urceni rozmeru vstupu
u = size(in);
if length(u) == 2
    u(3) =1;
end
%% Vypocet rozmeru
if exist('val','var') == 0;
%============ Volba nejblizsi nizsi hodnoty 2^n ============%
        if cut == 'y'
            if u(1)>=u(2)
                t = u(2);
            elseif u(1) < u(2)
                t = u(1);
            end
            dim = 2;
            while dim*2 < t
                    dim = dim*2;
            end
            out(dim,dim,u(3)) = 0; % Definovani vystupu
            for i = 1:u(3)
            out(:,:,i) = in(1:dim,1:dim,i); % Oriznuti vstupu
            end
%============ Volba nejblizsi vyssi hodnoty 2^n ============%
        elseif cut == 'n'
            if u(1)>u(2)
                t = u(1);
            else
                t = u(2);
            end
            dim = 2;
            while dim < t
                    dim = dim*2;
            end
            out = zeros(dim,dim,u(3)); % Definovani vystupu
            for i = 1:u(3)
            out(1:u(1),1:u(2),i) = in(:,:,i); % doplneni vstupu od bodu [1,1,:]
            end
        end
%================ Volba vlastni hodnoty 2^n ================%
else
    if val>u(1) || val>u(2)
        error('Error:convert',...
            'Zadany rozmer je vetsi nez rozmer obrazku \nRozmery jsou: %d x %d',u(1),u(2))
    else
        dim = 2;
        while dim < val % Kontrola spravnosti zvolene hodnoty
            dim = dim*2;
        end
        if val ~= dim
            error('Zadana hodnota neni 2^n');
        else
            out = zeros(val,val,u(3));
            for i = 1:u(3)
            out(:,:,i) = in(1:val,1:val,i);
            end
        end
    end
end
out = uint8(out);