clear all
clc

%% nacteni vsech parametru, inicializace promennych
slozka = dir('..\..\mat_soubory\leve_oko\');
slozka = slozka(3:end);

celk_presnost = zeros(length(slozka),3);
prislusnost_vse = zeros(length(slozka));
podobnost_vse = zeros(length(slozka));

%% ulozeni parametru snimku urceneho k identifikaci
% for q = 1:length(slozka)
q =1;
a = slozka(q).name;

vstup = ['..\..\mat_soubory\leve_oko\',a];
load(vstup);
vypis = {'identifikovany snimek c.',q}

%% omezeni poctu bifurkaci dle priznaku poctu cevnich pixelu v okoli bifurk.
i = 1;
while i <= length(tloustka)
    if tloustka(1,i)<100
        tloustka(i)=[];
        souradnice_omezene(:,i)=[];
        uhel(:,:,i)=[];
    else i = i+1;
    end
end
bifurkace_pocet = length(tloustka);

B_pocet = bifurkace_pocet;
Px = pixely;
fi = uhel;
B_px = tloustka;
B_sourad = souradnice_omezene;

[velikost vztazna] = max(B_px);     % velikost a poloha vztazneho bodu - 
        % obrazek ze souboru se bude napasovavat prave na tento bod
vztazne_sourad = B_sourad(:,vztazna);
    
%% prochazeni databazi
for k = 1:length(slozka)
    soubor = ['..\..\mat_soubory\leve_oko\',slozka(k).name];
    load(soubor);

    vypis = {'oko c.',k}

%% vyjadreni podobnosti v poctu pixelu cevniho reciste v obraze
interval = 2000;        % odlisnost o kazde 2000px odpovida 2.5% dolu na prislusnosti
odlisnost = abs(Px - pixely);
prislusnost(k) = floor(odlisnost/interval);
prislusnost(k) = (100-prislusnost(k)*2.5)/100;      % podobnost v poctu pixelu

%% odstraneni snimku, jejichz prislusnost je 0
if prislusnost(k) <= 0.5
    podobnost(k) = 100;
else
    %% cely dalsi algoritmus
    % osetreni priznaku tloustky
    i = 1;
    while i <= length(tloustka)
        if tloustka(1,i)<100
            tloustka(i)=[];
            souradnice_omezene(:,i)=[];
            uhel(:,:,i)=[];
        else i = i+1;
        end
    end
    bifurkace_pocet = length(tloustka);

    N = B_pocet;
    M = bifurkace_pocet;
    N_sourad = B_sourad;
    M_sourad = souradnice_omezene;
    B_celk_podobnost = zeros(1,length(slozka));    
    
    %% translace obrazu, urcovani vzdalenosti
    for j = 1:length(M_sourad)
        radek = vztazne_sourad(1)-M_sourad(1,j);
        sloupec = vztazne_sourad(2)-M_sourad(2,j);
        posun = [radek;sloupec];
        M_sourad(1,:)+radek;
        M_sourad(2,:)+sloupec;
        
        vzdalenost = zeros(length(N_sourad),length(M_sourad));  % inicializace
        nejblizsi = zeros(1,length(N_sourad));      % inicializace
        
        % hledani vzdalenosti mezi kazdou bifurkaci, vyber te nejmensi
        for n = 1:length(N_sourad)
            for m = 1:length(M_sourad)
                vzdalenost(n,m) = sqrt((N_sourad(1,n)-M_sourad(1,m))^2 + ...
            (N_sourad(2,n)-M_sourad(2,m))^2);
            end
            nejblizsi(n) = min(vzdalenost(n,:));
        end
        
        B_celk_podobnost(j) = mean(nejblizsi);  % prumerna nejmensi vzdalenost - 0 az cca 1800 (uhlopricka obrazu)
        

    end
    [min_vzdalenost pozice] = min(B_celk_podobnost);    % vzdalenost a urceni obrazu, ktery je k identifikovanemu nejbliz
    

    %% podobnost celkova
prislusnost(k) = 1.1 - prislusnost(k);    % prevod na odlisnost,
        % pro moznost nasobeni s vzdalenosti nesmi byt odlisnost rovna 0
podobnost(k) = min_vzdalenost*prislusnost(k);   % 0 (pouze pri nulove vzdalenosti) az moc

end

end           % ukonceni cyklu prohledavajici databazi

prislusnost_vse(q,1:length(prislusnost)) = prislusnost;
podobnost_vse(q,1:length(podobnost)) = podobnost;

%% vektor souhlasu: 1 = stejna osoba s identifikovanou, 2 = jina osoba
[seradit pozice_seradit] = sort(podobnost,'ascend');
for k = 1:length(podobnost)
    pismena = slozka(k).name(1:4);
    vstup_pismena = a(1:4);
    if vstup_pismena == pismena
        souhlasne(find(pozice_seradit==k)) = 1;
    else souhlasne(find(pozice_seradit==k)) = 2;
    end
end

%% chybovost
[stejna pozice] = find(souhlasne==1);
TP = length(stejna);
FP = 0; TN = 0; FN = 0; FPR = 0; presnost = [];
if TP>1
    for i = 1:length(pozice)-1
        FP(i) = pozice(i+1)-pozice(1)-i;
        TN(i) = length(souhlasne)-pozice(i+1)-(TP-i-1);
        FN(i) = TP-i;
        FPR(i) = FP(i)/(FP(i)+TN(i));   % false-positive rate, mira falesne pozitivity
        presnost(i) = 1-FPR(i);
    end
else presnost = 0;
end

celk_presnost(q,1:length(presnost)) = presnost;

%% vymazani nadbytecnych promennych
clear B_celk_podobnost B_pocet B_px B_sourad FN FP M_sourad N_sourad
clear FPR M N Px TN TP a ans bifurkace_pocet fi i interval j k m min_vzdalenost n
clear nejblizsi odlisnost pismena pixely posun pozice_seradit q radek seradit sloupec slozka soubor souhlasne
clear souradnice_omezene stejna tloustka uhel velikost vstup_pismena vypis
clear vzdalenost vztazna vztazne_sourad

%% konec cyklu 'for' pro zjistovani presnosti vice snimku
% end
