function sourad = souradnice(OD, pocetprimek, maticepozic, oreznahore, orezzleva)
% funkce pro doplneni filtrovanych bodu PM svymi stredove symetrickymi
% protejsky a vypocet vyslednych souradnic hranicnich bodu optickeho disku.

% Chybejici body PM jsou doplneny stredove symetrickymi
% protejsky, pokud je tento protejsek dostupny, tedy pokud take nebyl
% odstranen filtrovanim. Funkce v nekterych pripadech (pokud je cast hranice OD nevyrazna nebo chybi) velmi vyrazne
% zlepsuje vysledky.

% Z upravenych bodu PM jsou nasledne vypocitany souradnice hranicnich pixelu optickeho disku

% VSTUP:
% - OD - vstupni matice bodu PM, ktere nalezi jiz nalezenemu centralnimu
%   pixelu - tedy vyslednemu optickemu disku. Jde o soubor pouze nekolika desitek
%   bodu PM.
% - pocetprimek - pocet radialnich primek, pod kterymi bylo prohledavano
%   okoli centralnimu pixelu
% - maticepozic -  matice obsahujici pozice pixelu prohledavaneho okoli (pozice pro kazdou radialni primku (uhel) zvlast)
%   Matice je nezbytna pro zpetne urceni souradnic v obrazu z uhlu a vzdalenosti bodu PM
% - oreznahore - velikost oriznutych okrajovych casti obrazu - nutne pro korektni urceni souradnic na neorezanem obrazu
% - orezzleva - velikost oriznutych bocnich casti obrazu - nutne pro korektni urceni souradnic na neorezanem obrazu

% VYSTUP:
% - sourad - vystupni matice obsahujici na kazdem radku x a y souradnici jednoho hranicniho bodu optickeho disku



    if (size(OD,1) ~= pocetprimek)      % pokud byly odstraneny nektere body PM, pokusime se je doplnit pomoci stredove symetrie
        uhel = 360/pocetprimek;             % uhel po kterem prochazime

        doplnit = pocetprimek - size(OD,1); % kolik potrebujeme doplnit radku do matice OD
        doplnit = zeros(doplnit,6);             % vytvoreni pomocne matice pro doplneni matice OD
        doplnit(:,6) = 3;                       % oznaceni prazdneho radku

        OD = [OD;doplnit];      % doplneni matice do plneho poctu radku (aby bylo mozne zkontrolovat vsechny uhly)


        for i = 1:pocetprimek       % prochazime uhel po uhlu

            resim = i*uhel;         % uhel ktery aktualne resime

            if resim <= 180         % pokud je mensi nez 180
                hledam = resim + 180;   % pak hledame uhel vetsi o 180
            else                    % pokud je vetsi nez 180
                hledam = resim - 180;   % pak hledame uhel mensi o 180 od aktualniho uhlu
            end


            if (OD(i,5) ~= resim)      % pokud se uhel na odpovidajicim radku matice OD neshoduje s aktualne resenym uhlem
                pozice = (OD(:,5) == hledam);   % pak zjistujeme pozici stredove soumerneho uhlu v matici OD
                pozice = find(pozice);              % zjisteni indexu (umisteni) stredove soumerneho uhlu 

                if pozice > 0                   % pokud jsme nasli protejsek
                       pujcimsi = OD(pozice,:); % zkopirujeme ho (cely radek) pro nasledne vlozeni do matice OD na prislusnou pozici
                       pujcimsi(5) = resim;     % uprava uhlu ve zkopirovanem radku, aby odpovidal resenemu uhlu

                       pujcimsi(6) = 2;         % oznaceni symetrickeho PM
                else                            % pokud jsme protejsek nenasli
                       pujcimsi = zeros(1,6);   % vytvorime nulovy pomocny radek (z duvodu korektniho prochazeni dalsich iteraci)
                       pujcimsi(6) = 3;         % oznaceni prazdneho radku
                end
                OD = [OD(1:i-1,:);pujcimsi;OD(i:end,:)];    % vlozeni radku s novou symetrickou hodnotou (nebo nuloveho radku) do matice OD na odpovidajici pozici
            end
        end
        OD(OD(:,6)==3,:)=[];        % po dokonceni hledani symetrickych bodu vymazeme nulove radky
    end
    
    
    
    sourad = zeros(size(OD,1),2);   % inicializace matice souradnic

    for i = 1:size(OD,1)            % prochazime matici OD a z kazdeho bodu PM vytvorime souradnice
        aktuhel = OD(i,5);      % aktualne zpracovavany uhel
        aktvzdal = OD(i,4);     % vzdalenost aktualniho botu PM od jeho stredu
        pomvzdalenosti = maticepozic(maticepozic(:,2) == aktuhel,:);    % z maticepozic jsou vybrany jen radky odpovidajici aktualne zpracovavanemu uhlu

        sourad(i,1) = OD(i,1) + pomvzdalenosti(2,aktvzdal+3)  + oreznahore;                    % 1. radky (urceni y- souradnice)
        sourad(i,2) = OD(i,2) + pomvzdalenosti(1,aktvzdal+3)  + orezzleva;                    % 2. sloupce (urceni x- souradnice)

    end

    sourad = fliplr(sourad);    % prehozeni zleva doprava pro korektni zpracovani funkcemi matlabu (konvence)
    
end