%% Načtení textových souborů a vytvoření masek ROI
function [obr_ref1, obr_ref2, obr_ref3, obr_de1, obr_de2, obr_de3, framenorm, maska] = kompletmaska(Height, Width, nFrames, startframe, kolik, ref, de, obr_matice, pomoc)

for i=0:pomoc-1 %načtení textových souborů pro výběr masek podle názvu souboru (pořadové číslo = číslo snímku)
    if i<10
        eval(strcat('fileID = fopen(''',obr_matice,'\matice_00',num2str(i),'.txt'',''r'');'));
        C = textscan(fileID,'%c');
        textaky(:,i+1)=str2num(C{1});
    elseif i<100
        eval(strcat('fileID = fopen(''',obr_matice,'\matice_0',num2str(i),'.txt'',''r'');'));
        C = textscan(fileID,'%c');
        textaky(:,i+1)=str2num(C{1});
    else
        eval(strcat('fileID = fopen(''',obr_matice,'\matice_',num2str(i),'.txt'',''r'');'));
        C = textscan(fileID,'%c');
        textaky(:,i+1)=str2num(C{1});
    end       
end

%% VYTVOŘENÍ MATICE PRO VÝBĚR ROI

if Height == 544 %rozdělení čísel podle rozlišení (zde 544x544)
matice=permute(reshape(textaky,[34,34,pomoc]),[2,1,3]); %vytvoření 3D matice (34 x 34 x POČET SNÍMKŮ)
else %rozdělení čísel podle rozlišení (zde 640x640)
matice=permute(reshape(textaky,[40,40,pomoc]),[2,1,3]); %vytvoření 3D matice (40 x 40 x POČET SNÍMKŮ)
end

for i=1:pomoc %pomoc = počet snímků ve videosekvenci)
    maska(:,:,i)=kron(matice(:,:,i),ones(16)); %rozšíření matice 16x16 (dle velikosti makrobloků)
end

maska=reshape(maska,[Height,Width,1,pomoc]); %rozšíření na 4D matici
maska(:,:,2,:)=maska(:,:,1,:); %rozšíření matice na stejnou velikost, jakou mají ref a de
maska(:,:,3,:)=maska(:,:,1,:); % (VÝŠKA x ŠÍŘKA x BARVA x POČET SNÍMKŮ)
maska=uint8(maska); %změna hodnot matice na stejné jako mají ref a de
maska(maska==255)=1; %ošetření při změně hodnot 

%% VYTVOŘENÍ 4D MATIC PODLE ROI

obr_ref1var=ref*0; %připravení masek, kam se budou načítat reference a testované videosekvence
obr_ref2var=ref*0;
obr_ref3var=ref*0;
obr_de1var=de*0;
obr_de2var=de*0;
obr_de3var=de*0;
maska1=maska;
maska2=maska;
maska3=maska;

for frame = startframe:kolik:nFrames %pro každý snímek
    for x=1:Width %pro každý pixel ve sloupci
       for y=1:Height %pro každý pixel v řádku
           for slozka=1:3 %pro každou barvu
               if  maska1(x,y,slozka,frame) == 3 %číslo 3 v masce značí oblast obličeje
                   maska1(x,y,slozka,frame) = 1; %co je v oblasti obličeje = nech být
                   obr_ref1var(x,y,slozka,frame) = ref(x,y,slozka,frame).*maska1(x,y,slozka,frame);% vytvoření ROI 1
                   obr_de1var(x,y,slozka,frame) = de(x,y,slozka,frame).*maska1(x,y,slozka,frame);% vytvoření ROI 1
               elseif maska1(x,y,slozka,frame) ~= 3 %vše ostatní je černá
                   obr_ref1var(x,y,slozka,frame) = 0; %vše ostatní je černá
                   obr_de1var(x,y,slozka,frame) = 0; %vše ostatní je černá
               end
               
               if  maska2(x,y,slozka,frame) == 2 %číslo 2 v masce značí oblast rukou a pleťové barvy bez obličeje
                   maska2(x,y,slozka,frame) = 1; %co je v oblasti rukou a pleťové barvy bez obličeje = nech být
                   obr_ref2var(x,y,slozka,frame) = ref(x,y,slozka,frame).*maska2(x,y,slozka,frame);% vytvoření ROI 2
                   obr_de2var(x,y,slozka,frame) = de(x,y,slozka,frame).*maska2(x,y,slozka,frame);% vytvoření ROI 2
               elseif maska2(x,y,slozka,frame) ~= 2 %vše ostatní je černá
                   obr_ref2var(x,y,slozka,frame) = 0; %vše ostatní je černá
                   obr_de2var(x,y,slozka,frame) = 0; %vše ostatní je černá
               end
               
               if  maska3(x,y,slozka,frame) == 5 || maska3(x,y,slozka,frame) ==1 || maska3(x,y,slozka,frame)==0 %čísla 5,1 a 0 značí pozadí
                   maska3(x,y,slozka,frame) = 1; %co je v oblasti pozadí = nech být
                   obr_ref3var(x,y,slozka,frame) = ref(x,y,slozka,frame).*maska3(x,y,slozka,frame); % vytvoření ROI 3
                   obr_de3var(x,y,slozka,frame) = de(x,y,slozka,frame).*maska3(x,y,slozka,frame); % vytvoření ROI 3
               elseif maska3(x,y,slozka,frame) ~= 5 || maska3(x,y,slozka,frame) ~=1 || maska3(x,y,slozka,frame)~=0 %vše ostatní je černá
                   obr_ref3var(x,y,slozka,frame) = 0; %vše ostatní je černá 
                   obr_de3var(x,y,slozka,frame) = 0; %vše ostatní je černá
               end
           end
       end
    end
end

%% OŠETŘENÍ PŘI VÝBĚRU VSTUPNÍHO PARAMETRU KOLIK není rovno jedné;

framenorma=fix((nFrames-startframe)/kolik); %normování, pokud se načítá každý i-tý snímek

for i=0:framenorma %počet VŠECH nové HODNOCENÝch snímků
    k=startframe+(i*kolik); %každý i-tý snímek
    l=i+1; %první snímek = 1
obr_ref1(:,:,:,l) = obr_ref1var(:,:,:,k); %převedení matice, kde je každý frame ve videosekvenci na matici...
obr_ref2(:,:,:,l) = obr_ref2var(:,:,:,k); %kde je pouze každý HODNOCENÝ snímek ve videosekvenci
obr_ref3(:,:,:,l) = obr_ref3var(:,:,:,k);
obr_de1(:,:,:,l) = obr_de1var(:,:,:,k);
obr_de2(:,:,:,l) = obr_de2var(:,:,:,k);
obr_de3(:,:,:,l) = obr_de3var(:,:,:,k);
end

framenorm=framenorma+1; %první snímek = 1
