% % % % % runelastix
% Tento program je součástí diplomové práce práce:
% Metody pro zpracování termovizních snímků s detekcí stanovené oblasti obličeje
% Autor: Dana Kolářová
% ID: 124347
% Škola: VUT Brno
% Fakulta: FEKT
% Obor: Biomedicínské inženýrství a bioinformatika
%************************************************
% Aplikace je spustitelná v prostředi Matlab.
% Použitá verze : Matlab 7.9.0 (R2009b)
% Tato funkce slouží k provedení lícování zpracovávaných snímků. Je nutné
% aby složka obsahovala soubor Elastix_parametry.txt, který specifikuje typ
% prováděného lícování. Tato fuknce spouští externí programy elastix, proto
% musí být ve slože přítomny i programy elastix.exe a transformix.exe.
%
% Funkce se spouští jako: runelastix(N,Newpath1,FileName,m,n)
% Vstupem je:
% N - počet zarovnávaných snímků,
% Newpath1 - cesta ke snímkům
% FileName - zpracovávané snímky
% [m,n] - udávají velikost snímků

function runelastix(N,Newpath1,FileName,m,n)
h=waitbar(0,'Probíhá analýza...'); % vytvoření waitbaru
        set(findobj(h,'type','patch'), ...
            'edgecolor','b','facecolor','b')
fix=FileName{1,1}; % načtení fisního snímku       
for k=2:N
mkdir(Newpath1,'parametry'); % vytvoření pomocných složek
mkdir(Newpath1,'transformace'); 
mov=FileName{1,k}; % načtení pohybujícího se snímku
[status info]=system(['elastix -f ',[fix(1:end-3),'tif'],' -m ',[mov(1:end-3),'tif'],' -out ','parametry -p ','Elastix_parametry.txt -fMask "" -mMask "" -t0 "" -threads 2']); % spuštení programu elastix
[status info]=system(['transformix -in ',[mov(1:end-3),'tif'],' -out transformace -tp parametry/TransformParameters.0.txt -def all']); % spuštení programu transformix

fid = fopen([Newpath1,'transformace\result.raw']); % otevření výsledného snímku
img = zeros(n,m); % vytvoření matice nul o velikosti rozlišení snímku
img(:)=fread(fid,n*m,'uint16'); % převedení na jiný datový typ
img = permute(img,[2 1 3]);
img=uint16(img);
name=FileName{1,k};
imwrite(img,[Newpath1 '\' name(1:end-4),'.tif'],'tif'); % uložení jako formát tif
fclose(fid);
waitbar((k-1)/(N));
end
delete([Newpath1,'*.raw']) % smazání nepotřebných dat
delete([Newpath1,'*.mhd']) % smazání nepotřebných dat
