Vous êtes sur la page 1sur 35

Ecole Supérieure de Technologie Oujda

EST-Oujda

Initiation aux outils informatiques de


calcul, CAO et simulation
MATLAB
Destiné aux étudiants de 1ere année GE-ER

Présenté par : Badre BOSSOUFI


Professeur Assistant a EST-Oujda
Badre.bossoufi@usmba.ac.ma
00212 663 48 40 13
1
Avec la parole, l’image constitue l’un des moyens les plus importants qu’utilise
l’homme pour communiquer avec autrui. C’est un moyen de communication
universel dont la richesse du contenu permet aux êtres humains de tout âge et de
toute culture de se comprendre.

C’est aussi le moyen le plus efficace pour communiquer, chacun peut analyser
l’image à sa manière, pour en dégager une impression et d’en extraire des
informations précises.

De ce fait, le traitement d’images est l’ensemble des méthodes et techniques opérant


sur celles-ci, dans le but de rendre cette opération possible, plus simple, plus
efficace et plus agréable, d’améliorer l’aspect visuel de l’image et d’en extraire des
informations jugées pertinentes.

Dans ce cadre s’inscrit ce projet qui porte sur le développement d’une application
permettant d’intégrer sous une seule interface graphique des outils de traitement et
de manipulation d’images. Cette application sera développée sous Matlab à l’aide
du toolbox GUIDE .
2
Définition de l’image :
L’image est une représentation d’une personne ou d’un objet par la
peinture, la sculpture, le dessin, la photographie, le film, etc. C’est
aussi un ensemble structuré d’informations qui, après affichage sur
l’écran, ont une signification pour l’oeil humain.

Représentation des images numériques :

une image numérique est une matrice de pixels repérés par leur
coordonnées (x,y). S'il s'agit d'une image couleur, un pixel est codé
par 3 composantes (r,g,b) (chacune comprise au sens large entre 0
et 255), représentant respectivement les "doses" de rouge, vert et
bleu qui caractérisent la couleur du pixel. S'il s'agit d'une image en
niveau de gris, il est codé par 1 composante comprise au sens large
entre 0 et 255, représentant la luminosité du pixel.
3
Autrement dit, une image est une matrice MxN de valeurs entières
prises sur un intervalle borné [0,Ng] où Ng est la valeur maximale du
niveau de gris.

p(i,j) est le niveau de gris du pixel de coordonnées ligne i et colonne j


dans l'image. p(i,j) Î[0, Ng]. Les valeurs des niveaux de gris sont des
entiers. 4
Image binaire
Une image binaire est une image MxN où chaque point peut prendre
uniquement la valeur 0 ou 1. Les pixels sont noirs (0) ou blancs (1). Le
niveau de gris est codé sur un bit (Binary digIT). Dans ce cas, on
revient au cas donné en I.1. avec Ng = 2 et la relation sur les niveaux de
gris devient: p(i,j) = 0 ou p(i,j) = 1.

Image en niveaux de gris


Une image ne niveaux 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 un octet (8 bits)
soit 256 nuances de dégradé. L'expression de la valeur du niveau de gris
avec Ng = 256 devient: p(i,j) Î[0, 255].

5
Image couleur
Une image couleur est la composition de trois (ou plus) images en
niveaux de gris sur trois (ou plus) composantes. On définit donc trois
plans de niveaux de gris, un rouge, un vert et un bleu. La couleur finale
est obtenue par synthèse additive des ces trois (ou plus) composantes.

Rappels sous Matlab :


Une image Matlab est une matrice bidimensionnelle de valeurs entières
ou réelles. Les principales fonctions de traitement d’images sous Matlab
se trouvent dans la boîte à outils (toolbox) image processing (traitement
d’images). L’aide sur cette boîte à outils est obtenue en tapant help
images en ligne de commande de Matlab. Ensuite, l'aide sur une
commande particulière est obtenue en tapant help suivi du nom de la
commande, par exemple help edge.
6
Traitements d’image :
Pour manipuler une image, on travaille sur un tableau d'entiers qui
contient les composantes de chaque pixel. Les traitements
s'appliquent toujours aux images en niveau gris et parfois aussi sur
des images couleur. Nous allons distinguer plusieurs types de
traitements dans ce projet.

Changement de format de l’image sous Matlab :


L'oeil humain possède des récepteurs pour les trois couleurs primaire
rouge, vert et bleu. Ainsi, tous les espaces couleur ont trois
dimensions. Il ya plusieurs espaces de couleurs disponibles, les plus
connus étant RVB (Rouge-Vert-Bleu), HSV (Hue-Saturation-Valeur)
et NTSC.

7
Commandes Matlab
colorbar - Display colorbar (MATLAB Toolbox).
getimage - Get image data from axes.
image - Create and display image object (MATLAB Toolbox).
imagesc - Scale data and display as image (MATLAB Toolbox).
immovie - Make movie from multiframe indexed image.
imshow - Display image.
montage - Display multiple image frames as rectangular montage.
subimage - Display multiple images in single figure.
truesize - Adjust display size of image.
warp - Display image as texture-mapped surface.
zoom - Zoom in and out of image or 2-D plot (MATLAB Toolbox).
Image file I/O.
imfinfo - Return information about image file (MATLAB Toolbox).
imread - Read image file (MATLAB Toolbox).
imwrite - Write image file (MATLAB Toolbox).
imcrop - Crop image.
imresize - Resize image.
imrotate - Rotate image. 8
Lire et écrire des images sous Matlab
Matlab est capable de lire et de décoder les fichiers images JPEG, TIFF, BMP,
PNG, HDF, PCX ou XWD. Une image sous Matlab peut être représentée sous
plusieurs formes, mais toujours sous forme d'une matrice. Avant de traiter une
image dans Matlab, il faut la lire et décoder son format afin de la transformer
en une matrice de valeurs. L'exemple ci-dessous permet de lire une image au
format TIFF, de la décoder dans la variable img et de l'afficher à l'écran dans
une figure. La commande axis('image') rend l'image affichée carrée pour
garder les proportions.
L'appel à axis on permet l'affichage des graduations des axes. Enfin,
colorbar aff»
img=imread('autumn.tif');
» figure; imshow(img);
» axis('image');
» axis on
» colorbariche la barre des couleurs de l'image.
9
L'accès à une élément particulier d'une image est indexé par le nom et la
position de cet élément. Par exemple, si on conserve l'image img ci-
dessus, on peut récupérer les valeurs ou les modifier aisément.
------------------------------
» img(3,2)
» img(1:10,30:40)
» img(1:3,31:39) = 0;
» figure;imshow(img);
------------------------------

10
Matlab offre une possibilité intéressante, en effet, il est possible
d'afficher plusieurs images dans la même figure. Pour ce faire, il faut
utiliser la commande Subplot. Elle s'utilise avec comme arguments le
nombre de ligne, le nombre de colonnes et le numéro de l'image dans la
figure. Dans l'exemple ci-dessous on souhaite afficher deux images sur
la même ligne dans une seule figure.
------------------------------
» img=imread('blood1.tif');
» img2=imread('alumgrns.tif');
» figure;subplot(1,2,1);imshow(img);
» subplot(1,2,2);imshow(img2);
------------------------------

11
Afin de fermer une figure sous Matlab, on tape close s'il s'agit de la
dernière figure ouverte ou bien close avec en paramètre le numéro de
figure pour fermer la figure donnée en paramètres. Pour fermer toutes
les figures, on demande la fermeture avec le mot-clé all.
------------------------------
» img=imread('rice.tif');
» img2=imread('alumgrns.tif');
» figure;imshow(img);
» figure;imshow(img2);
» close(1)
» close all
------------------------------

12
Détection de contours
La détection de contours permet de repérer les différents objets qui constituent la
scène de l'image. Il existe de nombreuses méthodes pour trouver les contours des
objets, la plupart sont basées sur les dérivées premières et secondes de l'image.
------------------------------
» img = imread('rice.tif');
» cont1 = edge(img,'prewitt');
» cont2 = edge(img,'canny');
» figure; imshow(img);
» figure; imshow(cont1);
» figure; imshow(cont2);
------------------------------
La détection de contours permet de repérer dans les images les objets qui s‘y trouvent
avant d'appliquer le traitement uniquement sur ces objets. Pour mieux comprendre la
notion de contour, il est possible de visualiser une image en 3D.
------------------------------
» img = imread('rice.tif');
» img=im2double(img);
13
» figure;mesh(img);
Histogramme - seuillage
L'histogramme d'une image donne la répartition de ses niveaux de gris.
Ainsi pour une image qui possède 256 niveaux de gris, l'histogramme
représente le niveau de gris en fonction du nombre de pixels à ce
niveau de gris dans l'image.
------------------------------
» img = imread('rice.tif');
» histo = imhist(img,256);
» figure;plot(histo);
------------------------------

14
On sait que les niveaux de gris à zéro correspondent au noir et que les
niveaux de gris à 1 indiquent le blanc. L'histogramme donne donc une
excellente idée de la séparation entre quelque chose qui est clair et
quelque chose qui est foncé dans l'image. Typiquement, une utilisation
de ce fait est le seuillage d'une image, ce terme désigne la définition
d'un seuil au-dessus ou en-dessous duquel on va garder certaines
valeurs de niveaux de gris.
------------------------------
» img=imread('saturn.tif');
» figure;imshow(img);
» img=im2double(img);
» figure;subplot(1,2,1);imshow(img);
» result=(img2>0.5).*img;
» subplot(1,2,2);imshow(result);
------------------------------
15
Transformée de Fourier

La transformée de Fourier est un outil mathématique de traitement du


signal qui permet de passer d'une représentation temporelle à une
représentation fréquentielle du signal. Cette théorie est basée sur le fait
que toute fonction périodique est décomposable sur une base de sinus et
de cosinus. Ainsi, on peut passer d'une représentation temporelle du
signal (dans le repère temporel classique) à une représentation en
fréquence sur une base de sinus et de cosinus (dans le repère
fréquentiel). La puissance de cet outil réside dans le fait que cette
transformée est réversible et qu'elle peut être étendue aux signaux non
périodiques (qu'on considère alors comme de période infinie).

16
L'exemple ci-dessous transforme une image dans l'espace de Fourier, fait la
transformation inverse pour voir si tout s'est bien passé (la transformée de Fourier est
réversible). Ensuite, le programme modifie les valeurs dans l'espace de Fourier et
effectue la reconstruction avec cette fois une nette différence.
» close all
» img=imread('blood1.tif');
» img=im2double(img);
» figure;subplot(1,3,1);imshow(img)
» fourier=fft2(img);
» subplot(1,3,2);imshow(real(fourier));
» subplot(1,3,3);imshow(imag(fourier));
» retour=ifft2(fourier);
» figure;imshow(real(retour));
» fourier(1:200,1:250) = 0;
» retour=ifft2(fourier);
» figure;imshow(real(retour));
» imgresult=abs(retour-img);
» figure;mesh(imgresult);
17
Conversion en intensité RGB :

Cette conversion est réalisée en appliquant le script suivant:

I = imread('fleur.jpg');
I = double(I)/255.0;
R = I(:,:,1);
G = I(:,:,2);
B = I(:,:,3);
J=rgb2ntsc(I);
figure(1);subplot(1,5,1);imshow(I);title('avant');
subplot(1,5,2);imshow(R);title('R');
subplot(1,5,3);imshow(G);title('G');
subplot(1,5,4);imshow(B);title('B');
18
19
Conversion de RGB vers NTSC
NTSC est l'espace de couleur utilisé pour la diffusion de la télévision
aux États-Unis, et le seul espace entre les ci-dessus ceux qui sont
mentionnés qui réalise une séparation complète entre la luminance et la
chrominance de l'information. NTSC a cette propriété, car lorsqu’elle a
été introduite, il fallait séparer les informations utilisées par les
récepteurs de télévision monochrome de celui supplémentaires utilisées
par les récepteurs couleur. Les composantes de l'espace colorimétrique
NTSC sont Y (la composante de luminance), I (la composante cyan-
orange), et Q (la composante verte-mauve).
20
Le code Matlab qui suit permet de réaliser cette conversion :
I = imread('fleur.jpg');
I = double(I)/255.0
R = I(:,:,1);
J=rgb2ntsc(I);
figure(1);subplot(1,2,1);imshow(I);title('avant traitement');
subplot(1,2,2);imshow(J);title('apres traitement');

21
Conversion avec la représentation HSV
HSV est un terme anglais qui signifie (hue, saturation, value) ou encore en
français TSV (teinte, saturation, valeur).Il s’agit d’un espace colorimétrique,
défini en fonction de ses trois composantes :
On code la teinte suivant l'angle qui lui correspond sur le cercle des couleurs
(0° ou 360° : rouge ;60° : jaune ;120° : vert ;180° : cyan ;240° : bleu ;300°
…). La saturation est l’intensité de la couleur et elle varie entre 0 et 100 %.
Plus la saturation d'une couleur est faible, plus l'image sera « grisée » et plus
elle apparaitra fade, il est courant de définir la « désaturation » comme
l'inverse de la saturation. Enfin la valeur est la « brillance » de la couleur et
elle varie entre 0 et 100%. Plus la valeur d'une couleur est faible, plus la
couleur est sombre.
Le modèle TSV a été créé en 1978 par Alvy Ray Smith. C'est une
transformation non-linéaire de l'espace de couleur RVB, et peut être utilisé en
progression colorique.
22
Le code suivant développé sous Matlab permet de réaliser cette
représentation :
I = imread('fleur.jpg');
[x,map]=rgb2ind(I,128);
imview(x,map);
maphsv=rgb2hsv(map);
[H,S,V]=ind2rgb(x,maphsv);
figure(1);subplot(1,4,1);imshow(x,map);title('image couleur');
subplot(1,4,2);imshow(H);title('H');
subplot(1,4,3);imshow(S);title('S');
subplot(1,4,4);imshow(V);title('V');

23
24
Filtrage d’images :
Pour améliorer la qualité visuelle de l’image, on doit éliminer les effets
des bruits (parasites) en lui faisant subir un traitement appelé filtrage.
Le filtrage consiste à modifier la distribution fréquentielle des
composantes d’un signal selon des spécifications données. Le système
linéaire utilisé est appelé filtre numérique.
La section qui suit va exposer quelques codes permettant de réaliser
l’opération de filtrage :
Réduction de bruit avec un filtre linéaire :

Le filtrage de l’image I par le filtre h est une image F dont les


luminances sont données par :
Le code suivant permet de réaliser le filtrage de l’image :

25
Le code suivant permet de réaliser le filtrage de l’image :

I=imread('fleur.jpg'); //Lecture de l’image


J=rgb2gray(I);
J=double(J)/255.0;
h=-ones(3,3); // Definition de h
h(2,2)=8;
F=filter2(h,J); // Filtrer F
//visualization des resultat
figure(2 );subplot(1,2,1);imshow(I);title('image originale');
subplot(1,2,2);imshow(F);title('image filtrée');

26
On peut jouer sur l’intensité du filtre et on peut remarquer que l’image est
plus nette lorsque la valeur de l’intensité est plus importante. Le résultat est
visualisé sur la figure suivante:

27
Synthèse d’un filtre par échantillonnage de fréquence

Le principe consiste à indiquer les valeurs souhaitées de H(w1,w2)


sur une grille (w1, w2) et à en déduire le filtre h(n1 ,n2).
Il est également possible de réaliser le filtrage dans le domaine
fréquentiel. Pour cela, on multiplie la transformée de Fourier de
l’image par le conjugué de la réponse fréquentielle du filtre.
Soit I l’image source, F l’image filtrée, h le filtre, et I, F, H, les
transformées de Fourier. On a donc

28
Le code correspondant est le suivant :

I=imread('fleur.jpg');
I1=fft2(I);
h= zeros(9,9);
h(4:6,4:6)=ones(3,3);
H1=fsamp2(h);
G = filter2(H1,I);
G1=ifft2(G);
figure(1);subplot(1,2,1);imshow(G1);title('frequentiel');
subplot(1,2,2);imshow (G);title('impulsionnel');

29
Réduction de bruit avec le filtre médian :
Lorsqu’une image comporte des pixels aberrants (par exemple un
seul pixel blanc au milieu d'une zone noire ou des pixels isolés
répartis aléatoirement dans l'image qui dégradent la qualité de
l'image), on dit qu’elle est «bruitée ».
Un simple lissage de l'image permet de réduire le bruit car l'effet
des pixels aberrants est amoindri grâce au moyennage avec ses
pixels voisins. Cependant, le lissage entraîne une réduction de
piqué dans l’image.
La méthode basée sur le filtre médian ne présente pas cet
inconvénient. Elle est particulièrement adaptée lorsque le bruit est
constitué de points isolés ou de lignes fines. Cependant, elle n'est
applicable qu'aux images en niveaux de gris, contrairement au
lissage.
30
Le code de ce filtrage est le suivant :
i=imread('fleur.jpg');
i=rgb2gray(i);
j=imnoise(i,'salt & pepper',0.02);
s= strel('disk',1);
k=imopen(j,s);
n=imclose(k,s);
f=imclose(j,s);
p=imopen(n,s);
figure(1);subplot(1,5,1);imshow(j);
subplot(1,5,2);imshow(k);
subplot(1,5,3);imshow(f);
subplot(1,5,4);imshow(n);
subplot(1,5,5);imshow(p);

31
Détection de contours :
Le but de la détection de contours est de repérer les points d'une
image numérique qui correspondent à un changement brutal de
l'intensité lumineuse. La détection des contours d'une image réduit
de manière significative la quantité de données et élimine les
informations qu'on peut juger moins pertinentes, tout en préservant
les propriétés structurelles importantes de l'image. Il existe un grand
nombre de méthodes de détection de l'image.
Dans ce qui suit quelques méthodes seront exposées :

32
Filtre de Prewitt :
La matrice qui correspond au filtrage horizontal, faisant ressortir
essentiellement les contours verticaux, selon l'opérateur de Prewitt,
s'écrit hx = [-1 0 1] tandis que la matrice verticale hy est sa
transposée. Les deux convolutions avec le tableau de valeurs initiales
créent deux tableaux Gxet Gy à l'origine du tableau G sur lequel on
peut localiser les maximums.
Afin de réaliser ce filtre sous Matlab on applique le code suivant :
I=imread('fleur.jpg');
J=rgb2gray (I); Gs=(G>seuil);
J=double(J)/255.0; figure(1);imshow(Gh);
seuil=0.8; figure(2);imshow(Gv);
H=fspecial('prewitt'); figure(3);imshow(G);
V=-H'; figure(4);imshow(Gs);
Gh=filter2(H,J);
Gv=filter2(V,J);
G=sqrt(Gh.*Gh + Gv.*Gv); 33
34
Réduction de bruit par un filtre morphologique
Réduction de En morphologie mathématique, filtrer, c’est conserver l’image en
supprimant certaines structures géométriques (en général implicitement définies
par un ou plusieurs éléments structurants).
Le filtre morphologique simplifie l’image en lui préservant la structure, mais il
perd en général de l’information. Le filtre morphologique est stable et possède une
classe d’invariance connue.
Le code correspondant à ce filtre est le suivant : par un filtre morphologique
h=imread ('fleur.jpg');
figure(1); subplot(1,3,1); imshow(h);
s= strel('square',15) ;
subplot(1,3,2); imshow(i);
i=imerode(h,s);
subplot(1,3,3); imshow(j);
j=imdilate(h,s);

35