80 lines
2.3 KiB
Matlab
80 lines
2.3 KiB
Matlab
clear;
|
|
close all;
|
|
|
|
load eigenfaces;
|
|
|
|
% Tirage aleatoire d'une image de test :
|
|
% personne = randi(nb_personnes);
|
|
% posture = randi(nb_postures);
|
|
% si on veut tester/mettre au point, on fixe l'individu
|
|
personne = 26;
|
|
posture = 6;
|
|
|
|
ficF = strcat('./Data/', liste_personnes{personne}, liste_postures{posture}, '-300x400.gif');
|
|
img = imread(ficF);
|
|
image_test = double(transpose(img(:)));
|
|
|
|
|
|
% Pourcentage d'information
|
|
per = 0.95;
|
|
|
|
% Nombre N de composantes principales a prendre en compte
|
|
% [dans un second temps, N peut etre calcule pour atteindre le pourcentage
|
|
% d'information avec N valeurs propres (contraste)] :
|
|
N = 15;
|
|
|
|
%%% plus proche voisin, k = 1
|
|
|
|
% Composantes principales des donnees d'apprentissage
|
|
C = X_centre * W;
|
|
|
|
% Composantes principales de l'image de test
|
|
C_test = (image_test - individu_moyen ) * W;
|
|
|
|
% on calcule les distances entre l'individu test et ceux des données
|
|
% d'apprentissage
|
|
distance = vecnorm(transpose(C(:,1:N) - C_test(:,1:N)));
|
|
|
|
% on trouve le plus proche voisin
|
|
[~, I] = min(distance);
|
|
|
|
|
|
% on trouve le plus proche à partir de I
|
|
personne_proche = floor( (I-1) / nb_postures_base ) + 1;
|
|
posture_proche = mod(I-1, nb_postures_base) + 1;
|
|
|
|
dx = 150;
|
|
dy = 150;
|
|
hold on;
|
|
for i = 1:nb_personnes_base
|
|
lignes = (i-1)*nb_postures_base+1:i*nb_postures_base;
|
|
plot(C(lignes,1), C(lignes,2), '*');
|
|
text(C(lignes,1) + dx, C(lignes,2) + dy, liste_personnes_base(i) + "p" + string([1 2 3 4]));
|
|
end
|
|
|
|
plot(C_test(1),C_test(2), '+', 'MarkerSize',10, 'LineWidth',2); % visage de test
|
|
line([C_test(1) C(I, 1)], [C_test(2) C(I, 2)]);
|
|
axis equal;
|
|
set(gca,'FontSize',20);
|
|
xlabel('$C_1$','FontSize',30,'Interpreter','Latex');
|
|
ylabel('$C_2$','FontSize',30,'Interpreter','Latex');
|
|
|
|
|
|
figure('Name','Image tiree aleatoirement','Position',[0.2*L,0.2*H,0.8*L,0.5*H]);
|
|
|
|
subplot(1, 2, 1);
|
|
% Affichage de l'image de test :
|
|
colormap gray;
|
|
imagesc(img);
|
|
title({'Individu de test' ; ['posture ' num2str(posture) ' de ', liste_personnes{personne}]}, 'FontSize', 20);
|
|
axis image;
|
|
|
|
|
|
ficF = strcat('./Data/', liste_personnes_base{personne_proche}, liste_postures{posture_proche}, '-300x400.gif');
|
|
img = imread(ficF);
|
|
|
|
subplot(1, 2, 2);
|
|
imagesc(img);
|
|
title({'Individu le plus proche ' ; ['posture ' num2str(posture_proche) ' de ', liste_personnes_base{personne_proche}]}, 'FontSize', 20);
|
|
axis image;
|