function [valueStructure] = fireflyOptimization(snimekADouble,sekvence,mod,n_ff,gamma,alpha,delta,beta0)
obraz1=snimekADouble;                               %převod snímku do formátu double
valueStructure=zeros(4,4);                          %vytvoření matic nul, do které budou následně ukládány hodnoty
pomocna=1;                                          %definice pomocmé proměnné
hWait = waitbar(0,'Program pracuje...');                %ukazatel stavu probíhajícího procesu
[~,celkemSnimku]=size(sekvence.data1);                  %zjištění počtu snímků v sekvenci
for nOfSnimek=1:1:celkemSnimku;                         %cyklus procházející jednotlivé snímky
    snimek2=sekvence.data1{1,nOfSnimek};                %nahrání registrovaného snímku
    obraz2=double(snimek2);                             %převod do formátu double
    if mod==1                                           %mod představje volbu kriteriální funkce, pokud je roven jedná provede se následující
        [posunXsvetluskySSD,posunYsvetluskySSD,hodnotaOdch] = svetluskySSD(obraz1,obraz2,n_ff,alpha,gamma,beta0,delta);
                                                        %volání kriteriální funkce odchylka kvadrátů                                    
        valueStructure(pomocna,1)=nOfSnimek;            %do matice je uloženo číslo registrovaného snímku
        valueStructure(pomocna,2)=posunXsvetluskySSD;   %uložení posun ve směru osy x
        valueStructure(pomocna,3)=posunYsvetluskySSD;   %uložení posun ve směru osy y
        valueStructure(pomocna,4)=hodnotaOdch;          %uložení hodnoty odchylky kvadrátů
    elseif mod==2                                       %pokud je hodnota proměnné mod rovna dvěmi volána kriteriální funkce korelace
        [posunXsvetluskyKor,posunYsvetluskyKor,hodnotaKor] = svetluskyKorelace(obraz1,obraz2,n_ff,alpha,gamma,beta0,delta);
      valueStructure(pomocna,1)=nOfSnimek;              %do matice je uloženo číslo registrovaného snímku
        valueStructure(pomocna,2)=posunXsvetluskyKor;   %uložení posun ve směru osy x
        valueStructure(pomocna,3)=posunYsvetluskyKor;   %uložení posun ve směru osy y
        valueStructure(pomocna,4)=hodnotaKor;           %uložení hodnota korelace
    elseif mod==3                                       %pokud je hodnota proměnné mod rovna třem je volána krieriální funkce kosinové kritérium
        [posunXsvetluskyCosin,posunYsvetluskyCosin,hodnotaCosin] = svetluskyCosin(obraz1,obraz2,n_ff,alpha,gamma,beta0,delta);
        valueStructure(pomocna,1)=nOfSnimek;            %do matice je uloženo číslo registrovaného snímku
        valueStructure(pomocna,2)=posunXsvetluskyCosin; %uložení posun ve směru osy x
        valueStructure(pomocna,3)=posunYsvetluskyCosin; %uložení posun ve směru osy y
        valueStructure(pomocna,4)=hodnotaCosin;         %uložení hodnota kosinova kritéria
    else 
    end
    pomocna=pomocna+1;                                  %navýšení hodnoty pomocné proměnné
    waitbar(nOfSnimek/celkemSnimku)                     %ukazatel průběhu zobrazuje fázi průběhu jako poměr čísla registrovaného ku všem snímkům
end
close(hWait)                                             %zavření ukazatele průběhu
