function [valueStructure] = GeneticOptimization(snimekADouble,sekvence,mod,pocetjedincu,pocetreplikaci,pst_mutace)
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ředstavuje volbu kriteriální funkce, pokud je roven jedná provede se následující
        [posunVyslednySSD,maxValueSSD]=evolucneSSD(obraz1,obraz2,pocetjedincu,pocetreplikaci,pst_mutace);
        valueStructure(pomocna,1)=nOfSnimek;                %do matice je uloženo číslo registrovaného snímku  
        valueStructure(pomocna,2)=posunVyslednySSD(1);      %uložení posun ve směru osy x
        valueStructure(pomocna,3)=posunVyslednySSD(2);      %uložení posun ve směru osy y
        valueStructure(pomocna,4)=maxValueSSD;              %uložení hodnoty odchylky kvadrátů
    elseif mod==2                                           %pokud je hodnota proměnné mod rovna dvěmi volána kriteriální funkce korelace
       [posunVyslednyKorelace,maxValueKorelace]=evolucneKor(obraz1,obraz2,pocetjedincu,pocetreplikaci,pst_mutace);
       valueStructure(pomocna,1)=nOfSnimek;                 %do matice je uloženo číslo registrovaného snímku
       valueStructure(pomocna,2)=posunVyslednyKorelace(1);  %uložení posun ve směru osy x
       valueStructure(pomocna,3)=posunVyslednyKorelace(2);  %uložení posun ve směru osy y
       valueStructure(pomocna,4)=maxValueKorelace;          %uložení hodnoty korelace    
    elseif mod==3                                           %pokud je hodnota proměnné mod rovna třem je volána krieriální funkce kosinové kritérium
       [posunVyslednyCosin,maxValueCosin]=evolucneCos(obraz1,obraz2,pocetjedincu,pocetreplikaci,pst_mutace);
       valueStructure(pomocna,1)=nOfSnimek;                 %do matice je uloženo číslo registrovaného snímku
       valueStructure(pomocna,2)=posunVyslednyCosin(1);     %uložení posun ve směru osy x
       valueStructure(pomocna,3)=posunVyslednyCosin(2);     %uložení posun ve směru osy y
       valueStructure(pomocna,4)=maxValueCosin;             %uložení hodnoty korelace   
    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
