% Calcul de DeltaE
% WB - 2020
%% Initialisation environnement
clc;
clear;
close all;
%% Déclaration des variables
Nb_images = 5;
I_L_Mean = zeros(1,Nb_images); % réservation espace mémoire
I_A_Mean = zeros(1,Nb_images);
I_B_Mean = zeros(1,Nb_images);
deltaL = zeros(1,Nb_images-1);
deltaA = zeros(1,Nb_images-1);
deltaB = zeros(1,Nb_images-1);
deltaE = zeros(1,Nb_images-1);
bargraph_tick = {'I1-I1'}; % pour construire l'axe X du bargraph deltaE
currentFolder = pwd; % Lit le chemin du répertoire courant
%% ALgorithme de calcul et d'affichage
for i=1:Nb_images
    I = imread([currentFolder,'\MEDICAM\Contact_Obscurite_Mire_Color_Checker_Light_Skin\Contact_Obscurite_Mire_Color_Checker_Light_Skin00',num2str(i),'.jpg']);
    % Lit l'image nommée 'Contact_Obscurite_Mire_Color_Checker_Light_Skin00i.jpg' dans le sous-répertoire indiqué 
    if i == 1
        [ROI,rect]=imcrop(I); % L'utilisateur définit la ROI sur la 1ère image
        figure,
    else 
        [ROI]=imcrop(I,rect); % la ROI définie sur l'image 1 est appliquée aux autres images 
    end
    subplot(2,3,i), imshow(I); title(['Image I',num2str(i)]); axis off; % l'image i est affichée en place i dans la figure graphique
    % Conversion RGB => LAB
    I_LAB = rgb2lab(ROI); % L/A/B = (:,:,1/2/3)
    % Individualisation des matrices L, A et B
    I_L = I_LAB(:, :, 1);
    I_A = I_LAB(:, :, 2);
    I_B = I_LAB(:, :, 3);
    % Calcul de la valeur moyenne pour chaque matrice
    I_L_Mean(i) = mean2(I_L);
    I_A_Mean(i) = mean2(I_A);
    I_B_Mean(i) = mean2(I_B);
    % Calcul de deltaE entre l'image 1 et l'image i
    if i ~= 1
        deltaL(i-1) = I_L_Mean(1) - I_L_Mean(i);
        deltaA(i-1) = I_A_Mean(1) - I_A_Mean(i);
        deltaB(i-1) = I_B_Mean(1) - I_B_Mean(i);
        deltaE(i-1) = sqrt((deltaL(i-1))^2 + (deltaA(i-1))^2 + (deltaB(i-1))^2);
        bargraph_tick = [bargraph_tick, {['I1-I',num2str(i)]}]; % concaténation des labels de ticks pour l'axe X du bargraph deltaE
    end 
    
 end
subplot(2,3,i+1), bar(deltaE); title('Delta E entre Image I1 et image Ii'); % Affichage du bargraph deltaE
xticklabels(bargraph_tick(2:end));
