function [valueStructure] = NewtonOptimization(snimekADouble,sekvence,mod)
global A B SSDvalue cosinValue KorValue;
A=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     
B=double(snimek2);                                                           %převod do formátu double  
options=optimset('TolX',1e-2,'TolFun',1e-20,'Display','off','DiffMinChange',1,'DiffMaxChange',Inf,'HessUpdate','bfgs','MaxFunEvals',1e10,...
    'DerivativeCheck','off','GradObj','off','LargeScale','off','MaxIter',50, 'Algorithm', 'active-set');
                                                                             %nastavení pro Newtonovu optimalizační metodu, jednotlivé paramtery
                                                                             %jsou popsány v textu práce
if mod==1;                                                                   %mod představuje volbu kriteriální funkce, pokud je roven jedná provede se následující
SSD_optimum = fmincon(@kritSSD,[0 0],[],[],[],[],[-50 -50],[50 50],[],options);%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)=SSD_optimum(1);                                %uložení posun ve směru osy x
    valueStructure(pomocna,3)=SSD_optimum(2);                                %uložení posun ve směru osy y
    valueStructure(pomocna,4)=SSDvalue;                                      %uložení hodnoty odchylky kvadrátů, pouze pro informacivní účel
elseif mod==2;
CC_optimum = fmincon(@kritCC,[0 0],[],[],[],[],[-50 -50],[50 50],[],options);%volání kriteriální funkce korelace
    valueStructure(pomocna,1)=nOfSnimek;                                     %do matice je uloženo číslo registrovaného snímku       
    valueStructure(pomocna,2)=CC_optimum(1);                                 %uložení posun ve směru osy x
    valueStructure(pomocna,3)=CC_optimum(2);                                 %uložení posun ve směru osy y
    valueStructure(pomocna,4)=KorValue;                                      %uložení hodnoty korelace, pouze pro informacivní účel
elseif mod==3;
Cosin_optimum = fmincon(@kritCosin,[0 0],[],[],[],[],[-50 -50],[50 50],[],options);%volání kriteriální funkce kosinové kritérium
    valueStructure(pomocna,1)=nOfSnimek;                                     %do matice je uloženo číslo registrovaného snímku   
    valueStructure(pomocna,2)=Cosin_optimum(1);                              %uložení posun ve směru osy x
    valueStructure(pomocna,3)=Cosin_optimum(2);                              %uložení posun ve směru osy y
    valueStructure(pomocna,4)=cosinValue;                                    %uložení hodnoty kosinového kritéria, pouze pro informacivní účel
end
pomocna=pomocna+1;                                                           %navýšení pomocné proměnné
waitbar(nOfSnimek/celkemSnimku)                                              %vykreslení okna znázorňujícího průběh algoritmu
end
close(hWait)                                                                 %zavření okna průběhu
