Vous êtes sur la page 1sur 8

Faculté des Sciences TP1 Traitement d’images Session d’automne : 2015/2016

Kenitra Master Pr. Y. El merabet

TP de Traitement d‟images.
Séance 1 : Premiers contacts avec MatLab

I. Introduction

A. Contexte

Cet énoncé constitue le premier volet des séances de TP de Traitement d‟images. La vocation de cette
première séance, qui sera assez théorique, est de permettre à chaque étudiant de prendre en main le
logiciel MatLab (connaissance de l‟environnement, commandes usuelles, programmation de base) et de
réaliser ses premiers programmes qui constitueront les briques de bases nécessaires à la réalisation des TP
suivant.

Le TP est en conséquence structuré comme suit :

1. Présentation de MatLab et du cadre de développement des applications du TP.


2. Réalisation des premiers programmes.

B. Objectifs pratiques

Les objectifs sont triples : rafraîchir et consolider les connaissances acquises en cours, découvrir et
assimiler les commandes usuelles de MatLab et le fonctionnement de MatLab Help, et mettre en
application l‟ensemble de ces savoirs et savoir-faire via la réalisation de premiers programmes en vue des
futures TP.

II. Présentation de MatLab et du cadre de développement des applications du TP

 Principales caractéristiques de MatLab :


MatLab est un langage mathématique interprété et un environnement de développement interactif. Il
fait appel à des fonctions et routines qui ont été développées dans des langages de plus bas niveau et sont
interprétées par le logiciel. C‟est pourquoi nous ne devons pas compiler les programmes réalisés.

Calcul matriciel et non calcul formel : inutile de demander à MatLab de calculer une dérivée ! MatLab
est un outil performant de calcul numérique, qui permet de résoudre des problèmes d‟analyse matricielle,
d‟approximation de solutions d‟équations différentielles, de statistiques et de fouille de données, de
traitement du signal numérique, ou encore d‟optimisation numérique. Pour des calculs mathématiques
formels (comme la résolution exacte d‟ED, le calcul d‟intégrales, etc…), l‟utilisateur devra se reporter à
d‟autres logiciels…ou encore aux services d‟un mathématicien !
Faculté des Sciences TP1 Traitement d’images Session d’automne : 2015/2016
Kenitra Master Pr. Y. El merabet

Principales fenêtres de MatLab:


o Command window:
o Command History:
o Current directory:
o Workspace:
o Help:
o Profile:

Figure 1: vue des 6 fenêtres principales de


MatLab. Pour réunir les 6 fenêtres en une avec
onglets de sélection : Menu Desktop, commande
« Desktop Layout », option « All Tabbed ».

Insistons sur Help : le menu et la commande


help : l‟aide de MatLab est munie d‟un moteur
de recherche très pratique, et s‟avère bien
souvent être un recours précieux pour se sortir
des mauvaises passes, mais aussi pour découvrir de nouvelles fonctionnalités. Une utilisation intelligente
de cet outil peut permettre de renforcer très rapidement ses connaissances en MatLab et mener à la
réalisation de programmes au-delà de ses espérances.

Remarques: Penser aussi à utiliser la commande help suivie du nom de la fonction à étudier dans la
fenêtre de commande (plus rapide, mais nécessite de savoir à l‟avance ce que l‟on recherche !).
M-files : les m-files sont les fichiers dans lesquels sont écrits les programmes et les fonctions. Ils portent
l‟extension « .m », et sont analogues (par exemple) aux fichiers « .c » du langage C.
Pour créer un m-file, on peut utiliser l‟éditeur de Matlab : fichier-> Nouveau-> m-file

 Les vecteurs en Matlab


>> v=[11 22 33 44 55] définir un vecteur v = (11 22 33 44 55)
>> v‟ la transposée de ce vecteur
w=[1 :1 :5] ou définit un vecteur allant de 1 à 5 avec une incrémentation unité
>> w=[1 :5]
>> v(2) accès au 2em élément ici 22
>> v(1 :3) accès aux éléments qui vont de 1 `a 3 (le vecteur (11 22 33))

>> v(1 :2 :5) accès aux éléments qui vont de 1 `a 5, mais en incrémentant avec un pas
de 2, le vecteur (11 33 55) est retourné

>> v( :) le symbole “ :” sans autres précisions signifiant “tout le vecteur


Faculté des Sciences TP1 Traitement d’images Session d’automne : 2015/2016
Kenitra Master Pr. Y. El merabet

 Les matrices en Matlab

>> A=[1 2 3; 2 4 5; 6 7 8;] Créer matrice 3x3


>> A(1,3) permet d‟accéder à l‟élément (1,3) de la matrice A, qui est ici 3

>> A(1 :3,2 :3) retourne les lignes 1 à 3 et les colonnes 2 `a 3


>> A( :,2) obtenir la deuxième colonne de A
>> A( :,3) obtenir la troisième.
>> A(1, :) retourne toute la première ligne
>> A‟ est bien la transposée de A
>> rand(p) : crée une matrice p × p dont les éléments sont aléatoires, distribués selon
une loi de probabilité uniforme dans l‟intervalle [0, 1[.

>> eye(p) crée une matrice identité p × p.


>> zeros(p) crée une matrice de zéros p × p.
>> ones(p) crée une matrice de uns p × p.

Il est possible, pour finir, de définir les matrices par blocs, tester les commandes suivantes :

>> B=[eye(3) eye(3) ;ones(3) zeros(3) ;]


>> B=[[eye(3) ones(3)]‟ [eye(3) zeros(3)]‟] (...en utilisant les colonnes)
>> B=[[eye(3) ; ones(3)] [eye(3) ;zeros(3)]]
>>inv(A) calcule l‟inverse de A.
>>det(A) calcule le déterminant de A.
>>diag(A) retourne la diagonale.

>> C=[1 3 4;5 2 1;3 1 2]


>> A*C multiplication entre matrices
>> A.*C multiplier les éléments de A par ceux de C
>> A.^2
>> size(A) taille de la matrice

 Graphes et dessins
Il est facile d‟effectuer diverses représentations graphiques avec Matlab, en 2d aussi bien qu‟en 3d. En
tapant

>> help plot


>> demo
>> helpwin
Faculté des Sciences TP1 Traitement d’images Session d’automne : 2015/2016
Kenitra Master Pr. Y. El merabet

Exemple: afficher la fonction x sin(x) dans l‟intervalle [0 : 10], il suffit d‟écrire

>> x=[0 :0.1 :10]; 8


titre de la figure

>> y=x.*sin(x) ; % l‟on a ici besoin de la 6


multiplication “avec le point” (.*) puisque x et y
4
sont des vecteurs
2

y
>> plot(x,y) 0

>> xlabel(‟x‟) -2
>> ylabel(‟y‟)
>> title(‟titre de la figure‟) -4

-6
0 1 2 3 4 5 6 7 8 9 10
x

>> subplot(1,2,1) %subplot (Nbre pavés sur 1 1

hauteur, Nbre pavés sur largeur, Numéro pavé) 0.8 0.8

0.6 0.6

0.4 0.4
>> plot(x,sin(x),'b') %courbe en bleue 0.2 0.2

>> subplot(1,2,2) 0 0

>> plot(x,cos(x),'r') %courbe en rouge -0.2 -0.2

-0.4 -0.4

-0.6 -0.6

-0.8 -0.8

-1 -1
0 5 10 0 5 10

 Instructions graphiques diverses


Hold on Maintien du graphique
hold off revenir en mode normal,
ginput(N) permet de cliquer N points dans la fenêtre graphique, et la commande renvoie deux vecteurs,
l'un contenant les abscisses, l'autre les ordonnées. Utilisée sans le paramètre N, la commande
tourne en boucle jusqu'à ce que la touche «Entrée» soit tapée.
clf annule toutes les commandes subplot et hold passées

 Les fonctions :
Toute fonction devra être déclarée à la première ligne du fichier en respectant la typologie suivante : «
„function‟ » suivi du vecteur de sortie « [sortie1, sortie2] » « „=‟ » « nomdelafonction » « (entrée1,
entrée2, entrée3) ».

Exemple: fonction qui calcule la somme et le produit de deux entiers :

On crée un fichier som_pro.m dans lequel on écrit :


Faculté des Sciences TP1 Traitement d’images Session d’automne : 2015/2016
Kenitra Master Pr. Y. El merabet

function [s,p]=som_pro(x,y)

s=x+y ;

p=x*y;

On notera le “ ;” pour éviter que Matlab nous affiche ce qu‟il calcule dans la fonction.
On accédera ensuite aux valeurs de cette fonction dans la fenêtre principale de Matlab par

>> [s,p]=som_pro(1,2)

Les fonctions réalisant les fonctions mathématiques couramment utilisées en traitement du signal sont
données par help elfun et help datafun.

 Les boucles et les instructions conditionnées


Instructions conditionnelles if

if condition logique
instructions
elseif condition logique
instructions
...
else
instructions
end

Boucles for

for variable = valeur début:pas:valeur fin


instructions
end
Faculté des Sciences TP1 Traitement d’images Session d’automne : 2015/2016
Kenitra Master Pr. Y. El merabet

Boucles while

while condition logique


instructions
end

III. Prise en main de Matlab pour le traitement d'images

A. Lecture, écriture et affichage d‟une image

 Les fonctions suivantes permettent la lecture, l‟affichage et l‟écriture d‟une image :


a. Le chargement en mémoire d‟une image se fait avec la fonction imread.
b. L‟affichage de l‟image (ou de la variable) est réalisé par la fonction imshow.
c. Les fonctions imwrite et print permettent la sauvegarde, respectivement, des images et
des figures sous différents formats (tif, jpg, bmp, pcx, png, gif, emf, eps, ...).

 Il est à noter que Matlab supporte 4 types d‟images :


 images indexés
 images en niveaux de gris
 images binaires
 images en RGB

 Il est possible de changer de format en utilisant les fonctions suivantes :


 ind2gray : indexé intensité,
 ind2rgb : indexé RGB,
 rgb2ind : RGB indexé,
 rgb2gray : RGB intensité,
 im2bw : intensité, indexé, RGB binaire
 cat : intensité RGB (rgb=cat(3, R, G, B))

 Nous étudierons uniquement deux types d‟images:


 images couleurs: à chaque pixel correspond une couleur codée sur 3 valeurs
correspondant aux couleurs primaires R (Rouge), (V) Vert, (B) Bleu (RGB en anglais);
 images monochrome: à chaque pixel correspond une valeur numérique.

 Travail demandé : Commenter les codes ci-dessous


clear all; close all;
 Image monochrome (niveau de gris) : Créer un
fichier nommé ImgNg.m avec pour contenu le img = imread(' 013.bmp ');
code ci-contre puis l‟exécuter dans la console de figure; imshow(img);
Matlab en tapant ImgNg.m
Faculté des Sciences TP1 Traitement d’images Session d’automne : 2015/2016
Kenitra Master Pr. Y. El merabet

 Image couleur : Créer un fichier nommé clear all; close all;


ImgC.m avec pour contenu le code suivant
puis l‟exécuter dans la console de Matlab en I = imread('mosek.jpg');
figure; subplot(2,2,1); imshow(I);
tapant ImgC.m
I1 = I;
I1(:,:,2) = zeros( size(I,1), size(I,2) );
I1(:,:,3) = zeros( size(I,1), size(I,2) );
subplot(2,2,2); imshow(I1);

I2 = I;
I2(:,:,1) = zeros( size(I,1), size(I,2) );
I2(:,:,3) = zeros( size(I,1), size(I,2) );
subplot(2,2,3); imshow(I2); colorbar;

I3 = I;
I3(:,:,1) = zeros( size(I,1), size(I,2) );
I3(:,:,2) = zeros( size(I,1), size(I,2) );
subplot(2,2,4); imshow(I3);
imwrite(I3, „test.bmp‟) ;

 Conversion image couleur à une image niveau de gris : exécuter et commenter les codes
suivants:

clear all; close all;


I = imread('mosek.jpg'); I = imread('mosek.jpg');
I = imread('mosek.jpg') ; R=I( :, :,1) ; I=double(I) ;
J=rgb2gray(I) ; G=I( :, :,2) ; R=I( :, :,1) ;
J(100, 100) B=I( :, :,3) ; G=I( :, :,2) ;
B=I( :, :,3) ;
J= 0.2989*R + 0.5870*G + 0.1140*B ;
J(100, 100) J= 0.2989*R + 0.5870*G +
0.1140*B ;
J=uint8(J) ;
J(100, 100)

NB/ Dans ces exemples, le format des images est uint8, i.e. les pixels sont des entiers non signé codé sur 8
bits (valeurs des pixels comprises entre 0 et 255). Cependant, lors de traitement (par exemple lors de
filtrage), il est intéressant de manipuler des données au format double (réel double précision codé sur 64
bits), augmentant ainsi la précision des calculs. La commande suivante permet de convertir l‟image en
format double :
>> img = double(img);

B. Manipulation des images

Certaines fonctions ou certains outils de Matlab permettent des manipulations interactive sur une image
contenue dans une figure ou non :
Faculté des Sciences TP1 Traitement d’images Session d’automne : 2015/2016
Kenitra Master Pr. Y. El merabet

o imageinfo : retourne les informations de l‟image dans la figure ou d‟un fichier image,
o zoom : zoom sur une zone de l‟image de la figure,
o imcrop : sélectionne une zone de l‟image,
o improfile : affiche le profil d‟une ligne sélectionnée,
o impixel : retourne les valeurs des pixels sélectionnés,
o impixelinfo : affiche la position et les valeurs d‟un pixel pointé avec la souris,
o impixelregion : affiche les valeurs des pixels dans une région sélectionnée avec la souris,
o imdistline : affiche la distance entre deux pixels sélectionnés,
o imdisplayrange : affiche l‟intervalle des valeurs des pixels de l‟image,
o imcontrast : réajuste une image,
o imtool : outil qui utilise les outils précédents.
D‟autres fonctions permettent des opérations géométriques sur l‟image :
o imresize : ré-échantillonnage de l‟image (homothétie),
o imrotate : rotation de l‟image.

 Travail demandé :
o exécuter et commenter le code suivant

clear all; close all;

f = imread('mosek.jpg');
whos f
class(f)
imshow(f( :, :,1),[10 50])
imshow(f(200:260,150:220))
[m, n, c] = size(f)
[m, n] = size(f)
imtool(f)
whos

o En vous aidant de la commande help (taper « help nom_fonction » dans la console)


effectuer les opérations suivantes en visualisant chaque étape :

1. Pour alléger les traitements, redimensionner car.bmp en 400 pixels * 266 pixels
2. Tester l‟opérateur whos ou imageinfo pour connaitre les caractéristiques de l‟image
originale et l‟image obtenue
3. Décomposez l‟image car.bmp en trois composantes : rouge, verte, bleue
4. A l‟aide l‟opérateur impixelregion, visualiser les valeurs des pixels dans la
composante verte.
5. A l‟aide l‟opérateur imdistline, calculer la distance entre deux pixels de l‟image
originale.
6. Ecrire une fonction distance.m qui prend en entrée le nom de l‟image, deux pixels et
qui retourne la distance entre eux (utiliser les distances vues dans le cours en
employant la fonction switch).

Vous aimerez peut-être aussi