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

70 lines
1.7 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('ishihara-0.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;
close all;
% 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);
% Coefficients de correlation lineaire :
coeffs = [ Sigma(2, 1)/Sigma(1, 1)/Sigma(2, 2), Sigma(3, 2)/Sigma(2, 2)/Sigma(3, 3), Sigma(3, 1)/Sigma(1, 1)/Sigma(3,3) ]
% Proportions de contraste :
contrasts = coeffs.^2/sum(coeffs.^2)