clear all
clc

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

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

%% ulozeni parametru snimku urceneho k identifikaci
% for q = 1:length(slozka)
q = 1;    
    vypis = {'soucasny snimek c.',q}
a = slozka(q).name;

vstup = ['..\..\mat_soubory\leve_oko\',a];
load(vstup);

%% omezeni poctu bifurkaci priznakem poctu cevnich pixelu kolem bifurkaci
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;

%% 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 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
    podobnost(k) = 0;
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);

    % odchylky ID snimku a snimku databaze
    N = B_pocet;
    M = bifurkace_pocet;
    B_podobnost = zeros(N,M);
    for i = 1:N
        for j = 1:M
            delta1 = fi(1,1,i)-uhel(1,1,j);
            delta2 = fi(1,2,i)-uhel(1,2,j);
            delta3 = fi(1,3,i)-uhel(1,3,j);
            delta4 = B_px(1,i)-tloustka(1,j);
            vektor = [delta1/360;delta2/360;delta3/360;delta4/441];
            % podobnost bifurkace identifikovaneho obr. na radku, pomocny v
            % sloupci
            B_podobnost(i,j) = 1-1/4*sqrt(sum(vektor.^2));
        end
    end
    
    B_sort_podobnost=zeros(N,M);
    pozice=zeros(N,M);
    B_max_podobnost=zeros(N,1);
            
    for i = 1:N
        [B_sort_podobnost(i,:) pozice(i,:)] = sort(B_podobnost(i,:));
        [B_max_podobnost(i,1)] = max(B_podobnost(i,:));
    end
    vel = size(pozice);

    %% osetreni stejneho poctu bifurkaci ID snimku a snimku databaze
if N == M
    i = 1;
    j = 1;
    while i <= vel(1)
        while j <= vel(1)
            if pozice(i,vel(2)) == pozice(j,vel(2))
                if B_sort_podobnost(i,vel(2))>B_sort_podobnost(j,vel(2))
                    B_max_podobnost(j)=B_sort_podobnost(j,vel(2)-1);
                    pozice(j,vel(2)) = pozice(j,vel(2)-1);
                    pozice(j,vel(2)-1) = pozice(j,vel(2)-2);
                else
                    B_max_podobnost(i)=B_sort_podobnost(i,vel(2)-1);
                    pozice(i,vel(2)) = pozice(i,vel(2)-1);
                    pozice(i,vel(2)-1) = pozice(i,vel(2)-2);
                end
            end
            j = j+1;
        end
        i = i+1;
    end
end

%% vysledna lokalni podobnost
B_celk_podobnost(k) = mean(B_max_podobnost);
    
    %% podobnost celkova
    podobnost(k) = mean([B_celk_podobnost(k)' prislusnost(k)]);

end

end           % ukonceni cyklu prohledavajici databazi

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

%% vektor souhlasu: 1 = stejna osoba s identifikovanou, 2 = jina osoba
[seradit pozice_seradit] = sort(podobnost,'descend');
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_max_podobnost B_pocet B_podobnost B_px B_sort_podobnost FN FP
clear FPR M N Px TN TP a bifurkace_pocet delta1 delta2 delta3 delta4 fi i interval j k
clear odlisnost pismena pixely pozice_seradit q seradit slozka soubor souhlasne
clear souradnice_omezene stejna tloustka uhel vektor vel vstup_pismena vypis

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