TP-analyse-donnees/TP1/exercice_2.m
2023-05-29 16:43:44 +02:00

98 lines
2.4 KiB
Matlab
Executable file

clear;
close all;
taille_ecran = get(0,'ScreenSize');
L = taille_ecran(3);
H = taille_ecran(4);
% figure('Name','Separation des canaux RVB','Position',[0,0,0.67*L,0.67*H]);
% figure('Name','Nuage de pixels dans le repere RVB','Position',[0.67*L,0,0.33*L,0.45*H]);
% Lecture et affichage d'une image RVB :
I = imread('Quizz_GroupeIJ/ishihara-20.png');
figure(1); % Premiere fenetre d'affichage
% subplot(2,2,1); % La fenetre comporte 2 lignes et 2 colonnes
% imagesc(I);
% axis off;
% axis equal;
% title('Image RVB','FontSize',20);
% Decoupage de l'image en trois canaux et conversion en doubles :
R = double(I(:,:,1));
V = double(I(:,:,2));
B = double(I(:,:,3));
% % Affichage du canal R :
% colormap gray; % Pour afficher les images en niveaux de gris
% subplot(2,2,2);
% imagesc(R);
% axis off;
% axis equal;
% title('Canal R','FontSize',20);
% % Affichage du canal V :
% subplot(2,2,3);
% imagesc(V);
% axis off;
% axis equal;
% title('Canal V','FontSize',20);
% % Affichage du canal B :
% subplot(2,2,4);
% imagesc(B);
% axis off;
% axis equal;
% title('Canal B','FontSize',20);
% % Affichage du nuage de pixels dans le repere RVB :
% figure(2); % Deuxieme fenetre d'affichage
% plot3(R,V,B,'b.');
% axis equal;
% xlabel('R');
% ylabel('V');
% zlabel('B');
% rotate3d;
% Matrice des donnees :
X = [R(:) V(:) B(:)]; % Les trois canaux sont vectorises et concatenes
% Matrice des données centrées :
X_c = X - mean(X);
% Matrice de variance/covariance :
Sigma = X_c.' * X_c / length(X_c);
% Calcul des couples propres :
[Vect_p, Diag_p] = eig(Sigma);
Val_p = diag(Diag_p);
% On trie les couples propres :
[Val_p, ind] = sort(Val_p, "descend");
Vect_p = Vect_p(ind, ind);
% On choisit la composante principale si besoin (changer l'entier de circshift) :
Val_p = circshift(Val_p, 1);
Vect_p = circshift(Vect_p, 1);
% On calcule C :
C = X_c * Vect_p;
% On reshape pour avoir une image :
Image = reshape(C, size(I));
% On affiche l'image :
colormap gray;
imagesc(Image);
axis off;
axis equal;
% Matrice des données centrées :
C_c = C - mean(C);
% Matrice de variance/covariance :
Sigma2 = C_c.' * C_c / length(C_c);
% Coefficients de correlation lineaire :
coeffs = [ Sigma2(2, 1)/Sigma2(1, 1)/Sigma2(2, 2), Sigma2(3, 2)/Sigma2(2, 2)/Sigma2(3, 3), Sigma2(3, 1)/Sigma2(1, 1)/Sigma2(3,3) ]
% Proportions de contraste :
contrasts = coeffs.^2/sum(coeffs.^2)