TP1 Matlab TI

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 8

Traitement d’images A.U.

2018 /2019

Travaux Pratiques de Traitement d’images


TP°1 : Manipulation d'images en Matlab (lecture/écriture, transformations couleurs et géométriques)

1. INTRODUCTION A MATLAB
1.1. A propos de Matlab
• MATLAB est l'abréviation de MATrix LABoratory. C'est un logiciel pour le calcul
numérique et la visualisation optimisée pour le calcul matriciel.
• MATLAB peut être considéré comme un langage de programmation, il dispose d'une
syntaxe spécifique mais elle est simple et intuitive.
• MATLAB propose deux types de fonctionnement: un fonctionnement en ligne de
commande où MATLAB exécute les instructions au fur et à mesure qu'elles sont
données par l'utilisateur et un fonctionnement via des scripts, dans ce cas MATLAB
exécute ligne par ligne un fichier texte que l'on désigne par programme.
• MATLAB propose également une aide très complète illustrée d'exemple.
• MATLAB dispose également de nombreuses librairies de fonctions spécialisées
appelées Toolbox. Dans notre cas, nous nous intéressons à Image Processing Toolbox.
Ce module contient les différentes fonctions nécessaires au traitement d’image
accompagnées et illustrées par des exemples.
1.2. Les variables
Les variables manipulées sont en priorité des matrices à éléments réels ou complexes.
Un scalaire est une matrice 1x1. Un exemple de matrice : M= [12, 4, 10 ; 40, 20, 7]
12 4 10
M=
40 20 7
Lorsque les composantes d'un vecteur forment une suite régulièrement espacée, on
peut utiliser la boucle suivante : v = (0 :2 :10) ce qui est équivalent à v = [0, 2, 4, 6, 8,
10].
On accède au premier élément d'une matrice par M (1,1) et à la première ligne de la
matrice par M (1, :).
Remarque : Il faut respecter les minuscules et les majuscules dans l'appellation des
variables.
1.3. Les opérations matricielles

u * v multiplication matricielle u. / v division du tableau u par le tableau


u + v addition matricielle v terme à terme.
u - v soustraction matricielle u. ^ v exponentiation terme à terme.
u^v exponentiation u’ prend le transposé de u
u. * v multiplication terme à terme u et v inv(A) inverse d'une matrice
A\b résolution du système linéaire Ax=b det(A) déterminant d'une matrice

ENSA-Fès, Nabil El Akkad -1-


Traitement d’images A.U. 2018 /2019

1.4. Les variables prédéfinies

ones(L,C) : matrice de L lignes C colonnes contenant des 1.


zeros(L,C) : matrice de L lignes C colonnes contenant des 0.
rand(L,C) : matrice de L lignes et C colonnes contenant un échantillon de distribution
uniforme sur l'intervalle (0,1).
eye(L,C) : matrice de L lignes C colonnes contenant des 1 sur la diagonale principale
et des 0 ailleurs (matrice identité).
diag(V) : matrice carrée avec le vecteur V sur la diagonale et des 0 ailleurs.
1.5. Conditions et boucles

Les opérateurs logiques &, | et ~ (respectivement ET, OU et NON logique) opèrent sur
des quantités booléennes. La valeur booléenne « faux » est codée 0 et la valeur vrai est
codée par une valeur non nulle. Les commandes IF, ELSEIF et ELSE permettent
d'exploiter ces quantités. MATLAB dispose aussi des boucles FOR et WHILE.
1.6. Manipulations préliminaires

1. Générer une matrice M (10x8) dont ses éléments sont des variables aléatoires
2. Afficher dans la fenêtre des commandes (Command Window) l’élément M(3,3).
3. Afficher la 3ème ligne de la matrice M.
4. Pour la troisième ligne de la matrice M, remplacer les éléments ayant une valeur qui
dépasse 3 par une nouvelle valeur qui vaut 0.
5. Soit N une matrice construite à partir de la matrice M, en retenant les 4 premières
lignes et les 4 premières colonnes. Afficher N.

2. RAPPEL SUR LA NOTION D’IMAGE


2.1. Définitions
Une image réelle est obtenue à partir d’un signal continu bidirectionnel comme
par exemple un appareil photo ou une caméra,…
Sur un ordinateur on ne peut pas représenter des signaux continus, on travail sur
des valeurs discrètes. Une image numérique est définie comme un signal fini
bidirectionnel échantillonné à valeurs quantifiées dans un certain espace de
couleur. Elle est constituée de points (pixels).
Une image numérique est une matrice MxN de valeurs entières ou réelles prises
sur un intervalle borné

Image binaire
Une image binaire est une matrice MxN où chaque point (pixel) peut prendre
uniquement la valeur 0 ou 1 (p(i,j)=0 ou p(i,j)=1). Les pixels sont, donc, noirs (0)
ou blanc (1).

ENSA-Fès, Nabil El Akkad -2-


Traitement d’images A.U. 2018 /2019

Image en niveau de gris


Une image en niveau de gris autorise un dégradé de gris entre le noir et le blanc.
En général, on code le niveau de gris sur 8 bits soit, donc, 256 nuances de
dégradé. L’expression de la valeur du niveau de gris devient p(i, j) ∈ [0,255].
Image couleur
Une image couleur est la composition de trois images en niveau de gris. On définit
donc trois plans de niveau de gris, un rouge, un vert et un bleu. La couleur finale
est obtenue par synthèse additive des ces trois couleurs. Ainsi, pR (i, j) ∈ [0,255] ,
pV (i, j) ∈ [0,255] et pB (i, j) ∈ [0,255].
2.2. Manipulations
On désire créer puis afficher sous Matlab l’image suivante (im0):

Pour cela, nous allons suivre les étapes suivantes :


1. Créer une matrice C (100x100) tel que chaque élément C(i,j)=0. Utiliser la commande
imshow de Matlab pour afficher la matrice C comme image. Interpréter (quelle
couleur obtiendrez vous). (Utiliser les commandes axis on et colorbar).
%Q°1
c=ones(90,90);
subplot(2,2,1);imshow(c); axis on
colorbar;

2. Faire varier la valeur des éléments C(i,j) de 0 à 1. Afficher pour chaque valeur l’image
correspondante. Interpréter.
%Q°2
for i=1:10
c(i,:)=0;
end
for i=20:30
c(i,:)=0;
end
for i=40:50
c(i,:)=0;
end
for i=60:70
c(i,:)=0;
end
for i=80:90
c(i,:)=0;
end
subplot(2,2,2);imshow(c); axis on
colorbar;
3. Transformer la matrice C, pour générer l’image suivante (im1):
La largeur de chaque bande (noir ou blanc) est 10 pixels
4. Crée la matrice D qui permet d’afficher l’image suivante (im2):
d=ones(90,90);
for i=1:10
d(:,i)=0;
end
for i=20:30
d(:,i)=0;

ENSA-Fès, Nabil El Akkad -3-


Traitement d’images A.U. 2018 /2019

end
for i=40:50
d(:,i)=0;
end
for i=60:70
d(:,i)=0;
end
for i=80:90
d(:,i)=0;
end

subplot(2,2,3);imshow(d);
axis on
colorbar;

5. Soit E=C+D. Afficher l’image correspondante à E.


6. Faire les transformations nécessaires sur E pour générer l’image (im0).
7. Afficher sur la même figure les images img1, img2 et img0. (indication : commande
subplot)
e=c+d;% somme de deux images
subplot(2,2,4);imshow(e); axis on % affichage des deux images dans
%une meme figure.
colorbar;

Lecture, affichage et écriture des images

1. Écrire un script MTLAB qui lit et affiche l’image « lena.jpg » (im1).


Indications:
commandes : imread et imshow
la commande axis permet d’afficher les graduations des axes (largeur et hauteur).
la commande colorbar affiche la barre des couleurs de l’image.
la commande title permet de donner et afficher le titre de l’image.

% lecture et affichage de l’image « lena.jpg » (im1).

im=imread('lena.jpg');
[n,m]=size(im)% nombre de lignes et de colonnes de l'image
h=imshow(im);% affichage de l’images sur écran

2. Quel est le type de l’image « lena » ? (noir et blanc, noir ou blanc, couleur).

3. La commande imfinfo permet d’afficher plusieurs informations concernant une image.


Quelle est la taille (en pixel) de l’image « lena » ?
Sur combien de bit chaque pixel est codé ?
Vérifier le type de l’image « lena ».
%imfinfo permet d’afficher plusieurs informations concernant une image

iminf=imfinfo('lena.jpg');
imageinfo(h,iminf);
axis on
colorbar;
title(lecture&affichage);
iminfo=imfinfo('lena.jpg')
%afficher les coordonnées d’un pixel ainsi que son niveau de gris.

ENSA-Fès, Nabil El Akkad -4-


Traitement d’images A.U. 2018 /2019

impixelinfo;

4. Quels sont les niveaux de gris que peut avoir un pixel de l’image « lena » ?

5. Quels sont les niveaux de gris des pixels de coordonnées suivantes: (20,60),
(70,30) et (170,130).

ng1=im(20,60)
ng2=im(70,30)
ng3=im(170,130)

La commande impixelinfo permet d’afficher les coordonnées d’un pixel ainsi que son
niveau de gris.
Exécuter cette commande et déplacer la souris pour choisir 2 pixels A et B
appartenant à 2 zones différentes (noire puis blanche).
Compléter : coordonnées de A : …………., niveau de gris=………………
coordonnées de B : ………….., niveau de gris =………………

6. Considérons un carré qui se situe au centre de l’image « lena » de dimension 100x100


pixels.
Écrire un scripte MATLAB qui rend ce carré tout blanc.
Afficher l’image originale de « lena » (im1) ainsi que l’image résultat (im2) sur
la même figure.
- Indication : commande : subplot.
for i=(n/2)-50:(n/2)+50
for j=(m/2)-50:(m/2)+50
im(i,j)=1;
end
end
im2=im;
figure (2); subplot( 2,2,2);imshow(im2);
7. Enregistrer l’image (im2) sous les formats suivants : jpg et png.
- indication : commande imwrite
imwrite(im2,'im2.jpg');

imwrite(im2,'im2.png');

Conversion des images

1. Ouvrir et afficher l’image « lena_color.tif » puis calculer sa taille théorique en kilo


octets.

2. Afficher dans la même figure (1 ligne de 4 images) l’image source de « lena » ainsi
que les composantes R, V et B.
Remarque : une composante couleur est représentée par une matrice. Ainsi, lors
de l’affichage, MATLAB le considère comme une image en niveaux de gris.

3. Ecrire un script MATLAB qui permet d’afficher en vraies couleurs les différentes
composantes R, V et B (c-à-d la composante rouge en rouge, verte en vert et bleue en
bleu).
- Quelles sont les composantes R, V et B du pixel de coordonnées (307,318) ?

ENSA-Fès, Nabil El Akkad -5-


Traitement d’images A.U. 2018 /2019

4. La commande rgb2gray permet de transformer une image couleur RVB en une


image en niveaux de gris.
- Transformer l’image « lena » en niveau de gris.
- Calculer la taille théorique de l’image résultat et comparer la avec celle de l’image
source.
- Interpréter.

5. La commande rgb2ind permet de transformer une image couleur RVB en une


image indexée.
- Transformer l’image « lena » en une image indexée (choisir 400 couleurs pour la
palette).
- L’image résultat est représentée par une matrice 512x512 et une autre matrice
400x3. Que représente chaque élément de ces deux matrices ?
- Quelles sont les composantes couleurs correspondantes à l’index 20 ?

6. Afficher dans la même figure l’image source ainsi que ces composantes dans le
système YCbCr.
- indication : commande rgb2ycbcr.

7. Afficher dans la même figure l’image source ainsi que ces composantes dans le
système HSV.
- indication : commande rgb2hsv.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%
% Conversion des images
% lecture de l'image RVB origine.
rgbImage = imread('venise.jpg');

% extraction des composantes couleurs.


R = rgbImage(:,:,1); % rouge
V = rgbImage(:,:,2); % Vert
B = rgbImage(:,:,3); % Bleu
% crée une image de même taille de l'image RVB en noir.
noir = zeros(size(rgbImage, 1), size(rgbImage, 2), 'uint8');

% Créer une version individuelle pour chaque composante couleur.


% la fonction cat (dim, A, B) Permet de concaténer les éléments de
% A et B dans la dimension dim.

just_red = cat(3, R, noir, noir);


just_green = cat(3, noir, V, noir);
just_blue = cat(3, noir, noir, B);

% Recombiner les couleurs individuelles pour construire une image


originale.
recombinedRGBImage = cat(3, R, V, B);

% affichage des résultats.


figure(1); subplot(3, 3, 2);imshow(rgbImage);title('Imageorigine')
figure(1);subplot(3, 3, 4);imshow(just_red);title('composante
rouge')
figure(1);subplot(3, 3, 5);imshow(just_green);title('composante
verte')
figure(1);subplot(3, 3, 6);imshow(just_blue);title('composante

ENSA-Fès, Nabil El Akkad -6-


Traitement d’images A.U. 2018 /2019

bleu')
figure(1);subplot(3, 3, 8);imshow(recombinedRGBImage);title('image
recombinée')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% composantes R, V et B du pixel de coordonnées (307,318)
rgbImage(307,318,1)
rgbImage(307,318,2)
rgbImage(307,318,3)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Transformer l’image « lena » en une image indexée (choisir 400
couleurs pour la palette).
[ii, map]=rgb2ind(rgbImage,400);
[m,n]=size(ii)
[h,l]=size(map)
figure(2);subplot(2, 2, 1); imshow(rgbImage);title('image
origine')
figure(2);subplot(2, 2, 2); imshow(ii, map);title('image Indexée')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%- Quelles sont les composantes couleurs correspondantes à
l’index 20
r20=map(20,1)
V20=map(20,2)
B20=map(20,3)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% - Transformer l’image « lena » en niveau de gris.
ig=rgb2gray(rgbImage);figure(3); subplot(
2,2,4);imshow(ig);title('niveaux de gris')
%composantes dans le système YCbCr.
figure (3); subplot( 2,2,1);imshow(rgbImage);title('imageorigine')
irc=rgb2ycbcr(rgbImage);figure(3); subplot( 2,2,2); imshow(irc);
title('système Ycbcr');
%composantes dans le système HSV.
irh=rgb2hsv(rgbImage);figure(3); subplot( 2,2,3);imshow(irh);
title('système HSV');

Opérations géométriques sur les images

1. Écrire un scripte MATLAB permettant de faire tourner l’image (im1) de 30 degrés


pour avoir une nouvelle image (im3). Afficher les deux images (im1) et (im3) sur la
même figure.
- Indication : commande imrotate.

2. Couper un carré (im4) de l’image (im1) à partir du pixel de coordonnées (200,200).


Le carré est de dimension 120x120. Afficher les deux images (im1) et (im4) sur la
même figure.
- Indication : commande imcrop.

3. Écrire un script MATLAB qui permet d’inverser l’image (im1) de bas en haut par
deux méthodes différentes pour avoir l’image (im5). Afficher les deux images (im1)
et (im5) sur la même figure.

ENSA-Fès, Nabil El Akkad -7-


Traitement d’images A.U. 2018 /2019

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%
% Opérations géométriques sur les images
im3=imrotate(rgbImage,30);
figure (4); subplot( 2,2,1);imshow(rgbImage);title('imageorigine')
figure (4); subplot( 2,2,2);imshow(im3);title('rotation')

im4 = imcrop(rgbImage,[200 200 320 320]);


figure (4); subplot( 2,2,3);imshow(im4);title('couper une partie')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%
%%% inverser l’image (rgbImage) de bas en haut
%%%%%%%%%%%%%%%%%%%%%%%%
[n,m,]=size(rgbImage);
im5= zeros(size(rgbImage,1), size(rgbImage,2),'uint8');
for j=1:n
im5(j,:,1)=rgbImage(n+1 - j,:,1);
im5(j,:,2)=rgbImage(n+1 - j,:,2);
im5(j,:,3)=rgbImage(n+1 - j,:,3);
end
remage = cat(3,im5(:,:,1),im5(:,:,2),im5(:,:,3));

figure(5); subplot( 2,2,1);imshow(rgbImage);title('ImageOrigine');


figure(5); subplot( 2,2,2);imshow(remage);title('Image Inversée');

ENSA-Fès, Nabil El Akkad -8-

Vous aimerez peut-être aussi