% Funkce pro registraci libovolné sekvence s optimalizací DA
% vstup - sekvence, počet vážek, maximální počet iterací
%výstup - registovaná sekvence, vektor MSE, čas registrace
%příklad spuštění: [registrovana_sek,MSE,t]=registrace_DA(sekvence,20,30)

function [registrovana_sek,MSE,t]=registrace_DA(sekvence,varargin)

if nargin ~=3
    disp('Bylo Vám vybráno nastavení a vážky letí')
        SearchAgents_no=50;
        Max_iteration=200;
       
else
    disp('Jak si přejete, vážky letí')
        SearchAgents_no=varargin{1};
        Max_iteration=varargin{2};
        
end
%% volba okna
obr1=sekvence{1};
imshow(obr1)
title('Tažením myši vyberte obdélníkovou oblast pro registraci')
h=imrect()
pos = h.getPosition();
pos_rect = round(pos);
okno=[pos_rect(2),pos_rect(2)+pos_rect(4),pos_rect(1),pos_rect(1)+pos_rect(3)];
close;
%%
ref=1;
OUTPUT2=zeros(length(sekvence),3);
MSE=zeros(length(sekvence),1);
registrovana_sek=sekvence;
tic; t=[]; %okno=[100,200,90,330];
h = waitbar(0,'Prosím, čekejte...');
for i=2:length(sekvence)
    obr=sekvence{i};
    [gbest_fit,vystup]=DA(sekvence{ref},obr,SearchAgents_no,Max_iteration,okno);
    tmp=imtranslate(obr,vystup(1:2));
    registrovana_sek{i}=imrotate(tmp,vystup(3),'bilinear','crop');
    OUTPUT2(i,1:3)=vystup;
    OUTPUT2(i,4)=gbest_fit;%
    MSE(i)=immse(sekvence{ref}(okno(1):okno(2),okno(3):okno(4)),registrovana_sek{i}(okno(1):okno(2),okno(3):okno(4))); 
    toc;
    t=[t, toc];
    waitbar((i) / length(sekvence))
end
close(h)
end