%% Skript pro zpracování a přípravu vstupních dat pro neuronovou síť U-Net
% Vstupním datům byla v tomto skriptu změněna velikost, a obrazy, které 
% byly klasifikovány experty, byly převedeny do matice tříd a zakódovány.
%
% Pozn. při převodu obrazů klasifikovaných experty do matice tříd je podle
% typu databáze použita vždy databázi příslušná vytvořená funkce, a to 
% z důvodu rozdílného typu vstupních dat.

clc; clear; close all

%% Změna velikosti načtených dat
img_location = 'C:\Users\jana-\Documents\FEKT\DP\unet_final';  % cesta ke složce, ve které jsou uložena data pro trénování a testování sítě
addpath(img_location);
img_data = imageDatastore(img_location, 'IncludeSubfolders', true, 'LabelSource', 'foldernames');
pocet = length(img_data.Files);   
imagefiles = img_data.Files;

x = 576;  % nová velikost v ose x
y = 560;  % nová velikost v ose y

for i = 1:pocet
   currentfilename = imagefiles(i);
   currentimage = im2double(imread(currentfilename{1, 1}));
   imgs_zmens = imresize(currentimage, [x, y]);
   imwrite(imgs_zmens, currentfilename{1, 1});     % přepis původních dat na nová
end

%% Převod obrazů klasifikovaných experty do matice tříd a jejich zakódování
img_location1 = 'C:\Users\jana-\Documents\FEKT\DP\unet_final\unet_train\labels'; % cesta ke složce, ve které jsou uloženy klasifikované obrazy cév určené pro trénování sítě
img_location2 = 'C:\Users\jana-\Documents\FEKT\DP\unet_final\unet_test\labels';  % cesta ke složce, ve které jsou uloženy klasifikované obrazy cév určené pro testování sítě

% obrazy pro trénování
addpath(img_location1);
img_data1 = imageDatastore(img_location1);
pocet1 = length(img_data1.Files);   
imagefiles1 = img_data1.Files;

for j = 1:pocet1
    currentfilename1 = imagefiles1(j);
    currentimage1 = imread(currentfilename1{1, 1});
    labels_matice1 = labels_afio(currentimage1);      % přirazení labelu každému pixelu, který je označen příslušnou barvou
    % labels_matice1 = labels_iostar(currentimage1);  % přirazení labelu každému pixelu, který je označen příslušnou barvou
    % labels_matice1 = labels_rite(currentimage1);    % přirazení labelu každému pixelu, který je označen příslušnou barvou
    % onehot1{j} = onehotencode(labels_matice1, 3, 'ClassNames', [1, 2, 3]);  % one-hot zakódování matice
    labels_matice1 = cast(labels_matice1, 'uint8');   % převod matice na datový typ uint8
    imwrite(labels_matice1, currentfilename1{1, 1});  % přepis původních dat na nová
end

% obrazy pro testování
addpath(img_location2);
img_data2 = imageDatastore(img_location2);
pocet2 = length(img_data2.Files);   
imagefiles2 = img_data2.Files;

for k = 1:pocet2
    currentfilename2 = imagefiles2(k);
    currentimage2 = imread(currentfilename2{1, 1});
    labels_matice2 = labels_afio(currentimage1);      % přirazení labelu každému pixelu, který je označen příslušnou barvou
    % labels_matice2 = labels_iostar(currentimage1);  % přirazení labelu každému pixelu, který je označen příslušnou barvou
    % labels_matice2 = labels_rite(currentimage1);    % přirazení labelu každému pixelu, který je označen příslušnou barvou
    % onehot2{k} = onehotencode(labels_matice2, 3, 'ClassNames', [1, 2, 3]);  % one-hot zakódování matice
    labels_matice2 = cast(labels_matice2, 'uint8');   % převod matice na datový typ uint8
    imwrite(labels_matice2, currentfilename2{1, 1});  % přepis původních dat na nová
end
