Techniques multimédias Dr Soumaya Trabelsi Techniques multimédias Dr Soumaya Trabelsi
2. Allocation d’une matrice dont les coefficients seront remplis plus tard (i.e. matrice
TP 1 : améliorations globales d’image nulle) :
1. Préliminaires : premiers pas avec Matlab >> I =zeros(3,4)
Avant toute chose, on pensera à utiliser la fonction d’aide de Matlab : help fonction. Ce I=
tutoriel est un très bref résumé des fonctionnalités de ce logiciel. On en aura besoin de bien
0 0 0 0
d’autres.
0 0 0 0
Matlab traite un seul type d’objet : les matrices. Les scalaires sont des matrices (1 × 1), les
vecteurs lignes des matrices (1 × n), les vecteurs colonnes des matrices (n × 1). Le type des 0 0 0 0
données est, par défaut, en double.
Cette fonction permet d’allouer une matrice de la taille et la dimension désirée (ici 3
1.1 Les constantes prédéfinies lignes et 4 colonnes). De même, il existe la fonction ones qui a les mêmes propriétés et
qui construit une matrice de 1. Le nombre minimum de paramètres est de 2. Ainsi, pour
Il existe deux constantes prédéfinies particulières : Nan ou Not a Number, pour exprimer construire des vecteurs (matrice de dimension 1) il faut mettre un paramètre à 1 (on le
une indétermination et Inf pour un nombre infini. Il existe aussi les deux constantes suivantes : choisit suivant que l’on souhaite un vecteur colonne ou un vecteur ligne.).
>> pi >> v =zeros (1 ,4)
ans = v=
3.1416 0 0 0 0
>> eps 3. Suite de nombres
ans = >> v1 =1:10
2.2204e−16= v1 =
1.2 Déclaration d’une matrice 1 2 3 4 5 6 7 8 9 10
Il existe plusieurs manières de déclarer une matrice : >> v2=10:−2:1
1. Déclaration par listing de coefficients : v2 =
>> I= [1 2 3; 4 5 6;7 8 9] 10 8 6 4 2
I= La syntaxe deb:fin permet de créer une suite d’entiers de deb à fin avec un pas par défaut de 1.
Si on veut modifier le pas, on utilise la syntaxe deb:pas:fin qui propose une suite de deb à fin
1 2 3
avec un pas de pas (le pas peut être quelconque).
4 5 6
1.3 Taille d’une matrice : size
7 8 9
La taille d’une matrice est donnée par la fonction size(I) qui renvoie deux scalaires, dans
On déclare une matrice entre crochets (pour un vecteur, on peut les omettre), les éléments d’une l’ordre le nombre de lignes puis le nombre de colonnes (pour le cas d’une matrice 2D). Pour
même ligne sont séparés par des espaces, et les lignes sont séparées entre elles par des points récupérer uniquement le nombre de lignes (resp. le nombre de colonnes), on peut spécifier
virgules. size(I,1) (resp. size(I,2)).
TM 1 TM 2
Techniques multimédias Dr Soumaya Trabelsi Techniques multimédias Dr Soumaya Trabelsi
>> I=ones(2,5) utilise l’opérateur ’:’.
I= >> I(1,:)
1 1 1 1 1 ans =
1 1 1 1 1 1 2 3 4 5
>> size(I) >> I(:,4)
ans = ans =
2 5 4
>> size(I,1) 9
ans = Dans ces exemples on a extrait la ligne 1, puis la colonne 4 de la matrice d’origine. On peut
selon le même principe extraire une sous-matrice.
2
>> I (1:2 ,3:4)
>> size(I,2)
ans =
ans =
3 4
5
8 9
1.4 Eléments de la matrice
Dans cet exemple on a extrait les lignes 1 à 2 et les colonnes 3 à 4 de la matrice d’origine.
Pour extraire un élément, il faut donner un indice pour la ligne puis un indice pour la colonne
de la matrice (qui doivent être valides). Attention, dans Matlab les indices d’une matrice 1.5 Opérations entre les matrices
commencent par 1.
On peut effectuer un certain nombre d’opérations de base sur les matrices (Matlab vérifie
>> I=[1 2 3 4 5;6 7 8 9 10] que les dimensions des matrices permettent d’effectuer ces opérations entre elles, et affiche un
message d’erreur en cas d’incompatibilité, parmi lesquelles :
I=
— Le produit, la division matriciels, respectivement par les opérateurs *, / (exemple :
1 2 3 4 5 I*J). =
6 7 8 9 10 — Le produit, la division, la somme, la soustraction matriciels terme à terme,
respectivement par les opérateurs .*, ./, .+ et .- (exemple : I.*J) =
>> I(2,4)
— L’opposé d’une matrice par l’opérateur préfixe - (exemple : -I) =
ans =
— La transposée d’une matrice par l’opérateur postfixe ’ (exemple : I’) =
9
>> I=[1 2;4 6]
>> I(3,2)=
((( ) 35 ; 2 . 5 . 3 ,
On peut extraire toute une ligne ou toute une colonne d’une matrice, pour cela, on
TM 3 TM 4
Techniques multimédias Dr Soumaya Trabelsi Techniques multimédias Dr Soumaya Trabelsi
I= −1.0000 1.0000
1 2 −1.0000 0.0000
4 6
>> J=[4 5; 2 5] >> I 2
J= ans =
4 5 6.2832 0
2 5 −6.2832 3.1416
>> I J 2 Premières fonctions pour la manipulation d’images
ans = Il est vivement conseillé de consulter l’aide de Matlab pour connaître le fonctionnement
complet des fonctions citées plus bas.
8 15
2.1 Chargement d’une image : imread
28 50
La fonction imread prend en paramètre le nom d’un fichier, localisé par son chemin à partir du
>> I. J
répertoire courant de travail. Les formats acceptés par la fonction sont : BMP, JPEG, GIF, PNG,
ans = TIFF, ... Dans le cas d’une image en niveaux de gris, la matrice est une matrice d’entiers (entre
0 et 255) de dimension 2. Dans le cas d’une image en couleurs, le format de base de MatLab
4 10 est une matrice de dimension 3.
8 30 >> I=imread(’[Link]’);
Ne pas confondre une opération matricielle avec la même opération terme à terme (par exemple >> size(I)
le cas de la multiplication illustrée ci-dessus).
ans ==
1.6 Opération sur une matrice
129 132
Ces opérations s’effectuent terme à terme. Il y en a beaucoup de possibles, car les fonctions
Matlab sont très nombreuses (opération avec un scalaire mais aussi fonctions de base Ici l’image est de taille (129 × 132) en niveaux de gris.
mathématiques, par exemple).
>> I=imread(’[Link]’);
>> I=[pi 0 ; −pi pi/2]
>> size(I)
I=
ans ==
3.1416 0
320 400 3
−3.1416 1.5708
Ici l’image est une image couleur de taille (320 × 400) `a trois composantes codant la couleur.
>> cos(I)
N.B : l’appel de la méthode I = imread(nom) va renvoyer une matrice I au format uint8 (entier
ans = non signé). Les calculs effectués à partir des valeurs de I peuvent alors poser des problèmes liés
aux opérations sur les entiers. Pour effectuer des calculs en nombres réels, effectuer la
TM 5 TM 6
Techniques multimédias Dr Soumaya Trabelsi Techniques multimédias Dr Soumaya Trabelsi
conversion suivante : I=double(I). Exercice 1 — Premières fonctions personnalisées
2.2 Enregistrement d’une image : imwrite Dans cet exercice, on va travailler systématiquement sur l’image [Link] qui est fournie
avec le logiciel Matlab.
La fonction imwrite prend en premier paramètre la matrice à enregistrer comme image. Le
format d’enregistrement est choisi par l’extension qui est fournie dans le nom qui sert de 1. Ecrire et tester une fonction [I,n, m] = ouvrirImage(nom) qui permet d’ouvrir une
deuxième argument. image, de la renvoyer ainsi que sa taille (nbLignes, nbColonnes).
2. Ecrire et tester une fonction nb =compterPixels(I,k) qui renvoie le nombre de pixels
imwrite (I , ’ [Link] ’ , ’ gif ’ ) ; de niveau de gris k dans l’image I.
3. Ecrire et tester un script J = remplacerPixels(I,k1,k2) qui renvoie l’image
Cette instruction sauve le contenu de la matrice I dans une image au format GIF appelée correspondant à I quand on a changé les valeurs k1 en k2.
“[Link] ”. 4. Ecrire et tester une fonction J = normaliseImage(I,k1,k2) qui renvoie l’image
correspondant à I après changement de l’intervalle de variation des niveaux de gris
2.3 Visualisation d’une image : image, imagesc ou imageview= à [k1, k2].
5. Ecrire et tester une fonction J = inversionImage(I) qui renvoie l’image inversée (i.e.
Ces différentes fonctions permettent de visualiser une image en niveaux de gris ou
kʹ =255−k).
couleur stockée dans une matrice
6. Ecrire et tester une fonction h = calculerHisto(I) qui renvoie un vecteur contenant
imagesc(I); l’histogramme de I. Regarder l’aide sur la fonction plot et tracer cet histogramme.
7. Ecrire et tester une fonction I = seuillerImage(I,s) qui renvoie l’image I seuillée (les
pixels de valeur supérieure à s sont mis à 255, les autres à 0).
8. Quelle série d’instructions (à partir des fonctions déjà écrites) proposer pour pouvoir, à
partir d’un nom d’image, l’ouvrir, l’afficher, afficher son l’histogramme, l’inverser, calculer
son histogramme après inversion et visualiser le résultat des traitements.
9. Quelle série d’instructions proposer pour pouvoir, à partir d’un nom d’image, l’ouvrir,
l’afficher, afficher son l’histogramme, la normaliser dans [10, 50], calculer son
histogramme après normalisation et visualiser le résultat des traitements. Interpréter le
résultat de la visualisation.
10. Quelle série d’instructions proposer pour pouvoir, à partir d’un nom d’image, l’ouvrir,
l’afficher, afficher son l’histogramme, la seuiller par un seuil s = 128, calculer son
histogramme après seuillage et visualiser le résultat des traitements.
TM 7 TM 8