function out = im2sym(in,cut,val)
% IM2SYM - Nastaveni rozmeru 2D vstupu na hodnotu n*n.
%   IM2SYM nastavi pro 2D vstup IN rozmery o hodnote n pro vystup OUT.
%   IN musi obsahovat hodnoty 2D vstupu.  
% 
%   Obecny tvar funkce:
%   OUT = IM2SYM(IN,CUT,VAL)
% 
%   Promenna CUT slozi pro nastaveni oriznuti/dopleni vstupu. 
%   Pri volbe 'y' bude vstup zmensen na nejblizsi nizsi hodnotu n*n.
%   Pri volbe 'n' bude vstup doplnen nulami na rozmer nejblizsi vyssi
%   hodnoty n*n. n je cele kladne cislo.
% 
%   Pomoci promenne VAL lze zvolit rozmer vystupu pro hodnoty mensi 
%   nez rozmer vstupu. VAL musi byt mensi nez mensi rozmer vstupu
%   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 = im2sym(in,'y');     <-- Oriznuti vstupu
%   out = im2sym(in,'n');     <-- Doplneni vstupu
%   out = im2sym(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;
    if u(1)~= u(2)
%============== Volba nejblizsi nizsi hodnoty ==============%
        if cut == 'y'
            if u(1)>u(2)
                t = u(2);
            elseif u(1) < u(2)
                t = u(1);
            end
            out(t,t,3) = 0;
            for i = 1:u(3)
            out(:,:,i) = in(1:t,1:t,i);
            end
%============== Volba nejblizsi vyssi hodnoty ==============%
        elseif cut == 'n'
            if u(1)>u(2)
                t = u(1);
            elseif u(1) < u(2)
                t = u(2);
            end
            out = zeros(t,t,u(3)); % Definovani vystupu
            for i = 1:u(3)
            out(1:u(1),1:u(2),i) = in(:,:,i);
            end
        end
    else error('Rozmery jsou zhodne. Nema cenu obtezovat funkci IM2SYM');
    end
%================== Volba vlastni hodnoty ==================%
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
        out = zeros(val,val,u(3));
        for i = 1:u(3)
        out(:,:,i) = in(1:val,1:val,i);
        end
    end
end
out = uint8(out);