% % % % % metadata
% 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  výpočtu teploty se zarovnaných snímků
% Tato funkce se volá jako:
% [T_1,store]=teplota(path1,FileName,Data,X,Y,store)
%
% Vstupy:
% FileName - soubor s informacemi o analyzovaných snímcích
% path1 - cesta ke snímkům
% N - počet snímků
% [X,Y] - souřadnice analyzovaných pixelů
% Data - informace o nastavení termokamery
%
% Výstupy:
% T_1 - vypočtené teploty
% store - matice s uloženými pozicemi, ktere jsou zkresleny deformařním
% polem lícování

function [T_1,store]=teplota(path1,FileName,Data,X,Y,store)
img=imread([path1,FileName]); % načtení snímku
[m,n]=size(img); % zjištění velikosti
img=double(img); % převod na ty double
emis=Data{2,1}; % načtení dat ze snímku potřebných pro výpočet teploty
B=Data{2,4};
R1=Data{2,3};
R2=Data{2,6};
O=Data{2,7};
T_REF=Data{2,2}+273.15;
F=Data{2,5};
Distance= Data{2,8};
Air_Temp=Data{2,9}+273.15;
humidity=Data{2,10}/100; % prevedeni z procent
Alpha1=Data{2,11};
Alpha2=Data{2,12};
Beta1=Data{2,13};
Beta2=Data{2,14};
X_c=Data{2,15};

% výpočet teploty podle vzorců z kapitoly  7
h2o=humidity * exp(1.5587 + 0.06939 * (Air_Temp-273.15) - 0.00027816 * (Air_Temp-273.15)^2 + 0.00000068455 *(Air_Temp-273.15)^3);
tau=X_c * exp(-sqrt(Distance) * (Alpha1 + Beta1 * sqrt(h2o))) + (1-X_c) * exp(-sqrt(Distance) * (Alpha2 + Beta2 * sqrt(h2o)));
RAW_Atm=(R1/(R2*(exp(B/(Air_Temp))-F))-O)*(1-tau);
RAW_refl=(R1/(R2*(exp(B/(T_REF))-F))-O)*(1-emis)*tau;
for i=1:m
    for j=1:n
        RAW_obj=(img(i,j)-RAW_Atm-RAW_refl)/emis/tau;
        T(i,j)=B/log(R1/(R2*(RAW_obj+O))+F);
    end
end
t=T-273.15;
T_1=[];

% hledání černých pixelů 
for i=1:length(X)
    if isreal(t(X(i),Y(i))) % v dusledku zarovnanani mohou nektere pixely mit hodotu nula, je nutne je vyjmout z dalšího zpracování
        T_1(end+1)=t(X(i),Y(i));
    else T_1(end+1)=t(X(i),Y(i));
        store(end+1)=i;
    end
end

