function out = im2prim (in,cut,val)
% IM2PRIM - Nastaveni rozmeru 2D vstupu na prvocislo
%   IM2PRIM nastavi pro 2D vstup IN rozmery z mnoziny prvocisel
% 
%   Obecny tvar funkce:
%   OUT = IM2PRIM (IN,CUT,VAL)
% 
%   Promenna CUT slozi pro nastaveni oriznuti/dopleni vstupu. 
%   Pri volbe 'y' bude rozmer vstupu zmensen na nejblizsi nizsi 
%   prvocislo.
%   Pri volbe 'n' bude rozmer vstupu doplnen nulami na nejblizsi 
%   vyssi provcislo.
% 
%   Pomoci promenne VAL lze zvolit rozmer vystupu pro hodnoty mensi 
%   nez rozmer vstupu. VAL musi byt z mnoziny prvocisel.
%   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 = im2prim(in,'y');     <-- Oriznuti vstupu
%   out = im2prim(in,'n');     <-- Doplneni vstupu
%   out = im2prim(in,[],251);  <-- 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 ==============%
    if cut =='y'
        if u(1) > u(2)
            t = 2;
        else t = 1;
        end
        u(t) = u(t) +1;
        ju = 0;
        while ju == 0
            u(t) = u(t)-1;
            ju = isprime(u(t));
        end
        for i=1:u(3)
        out = in(1:u(t),1:u(t),i);
        end
%============== Volba nejblizsi vyssi hodnoty ==============%
    elseif cut == 'n'
        if u(1) > u(2)
            t = u(1);
        else t = u(2);
        end
        ju = 0;
        while ju == 0
            t(1) = t(1)+1;
            ju = isprime(t(1));
        end
        t(2) = t(1);
        out = zeros(t(1),t(2),u(3));
        for i = 1:u(3)
            out(1:u(1),1:u(2),i) = in(:,:,1);
        end
    end
else 
    if val>u(1) || val>u(2)
        error('Error:convert',...
            'Zadany rozmer je vetsi nez mensi rozmer obrazku \nRozmery jsou: %d x %d',u(1),u(2))
    else
        if isprime(val) ==1 % Kontrola spravnosti zvolene hodnoty
            out = zeros(val,val,u(3));
            for i = 1:u(3)
            out(:,:,i) = in(1:val,1:val,i);
            end
        else
            if u(1) > u(2)
                t = u(1);
            else t = u(2);
            end
            error('Error:convert',...
            'Zadana hodnota neni prvocislo. \n Pro mozne hodnoty zapis primes(%d) do konzole',t);
        end
    end
end