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)