98 lines
2.4 KiB
Matlab
Executable file
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) |