1) Définition de l’image :
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.
2) 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.
2.1) Changement de format de l’image sous Matlab :
L'oeil humain possède des récepteurs pour les trois couleurs primaires 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) et HSV (Hue-Saturation-Valeur).
Charger deux images : une en "noir et blanc" et une en couleurs que vous enregistrerez
dans votre répertoire de travail.
Chercher la taille de chaque image
Décomposer l'image en trois plans de couleurs R, G et B. Afficher les 3 images obtenues.
Convertir l'image au niveau de gris. Afficher l'image couleur et l'image résultante sur la
même figure.
Les commandes à utiliser : imread, imshow, rgb2gray
2.2) Histogramme d’images :
Publicité
Charger et afficher une image
Afficher son histogramme
Egaliser son histogramme.
Afficher l'histogramme de l'image résultante.
Interpréter
Commandes à utiliser : imhist, histeq
2.3) 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.
Dans une image, les basses fréquences correspondent à des variations lentes de l'intensité
(zones uniformes), et les hautes fréquences à des variations rapides (contours, bruits). Le
filtrage d'une image par un filtre passe-bas donne une image floue, c'est à dire une image
possédant peu de hautes fréquences (les contours sont adoucis par le filtre). D'une manière
générale, un passe-haut accentue les contours et le bruit, tandis qu'un passe-bas réduit le bruit
et adoucit les contours.
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.
Le but de ce TP est de mettre le point sur les différentes méthodes de filtrage, à savoir : le filtrage
linéaire et le filtrage non linéaire. L’étudiant est mené à tester et comparer la performance de
plusieurs filtres.
Commandes à utiliser : imread, imshow, imnoise, fspecial, filter2, medfilt2, nrfildemo
Publicité
Manipulation 1 : Ajout d’un Bruit
Avec la commande imnoise, ajouter un bruit à l’image. Tester plusieurs types de bruit : gaussien,
sel et poivre
Manipulation 2 : Filtrage linéaire et Filtrage non linéaire
Filtrage linéaire
Filtre moyenneur
Charger et afficher une image
Ajouter un bruit gaussien à cette image, avec une variance de 0.2 puis 0.4. Afficher
sur la même figure : l’image originale, l’image bruitée (gaussien 0.2) et l’image
bruitée (gaussien 0.4). Insérer des titres.
Filtrer avec le filtre moyen de taille 3x3, puis 5x5 puis 7x7 les images bruitées.
Comparer les résultats obtenus.
Filtre gaussien
Refaire le même travail avec le filtre gaussien. Varier à chaque fois la variance
(sigma) et la taille du filtre.
Filtrage non linéaire
Charger et afficher une image
Ajouter un bruit gaussien à cette image, avec une variance de 0.2 puis un bruit sel et
poivre à l’image. Afficher sur la même figure : l’image originale, l’image bruitée
(gaussien 0.2) et l’image bruitée (sel et poivre). Insérer des titres.
Filtrer les images bruitées avec des filtres non linéaires : Médian, Minimum,
Maximum
Publicité
Varier la taille des filtres. Interpréter.
2.4) 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 :
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.
Commandes à utiliser : fspecial, filter2, sqrt
Filtre de Sobel :
Le principe de ce filtre est que l'opérateur calcule le gradient de l'intensité de chaque pixel. Ceci
indique la direction de la plus forte variation du clair au sombre, ainsi que le taux de changement
dans cette direction. On connaît alors les points de changement soudain de luminosité,
correspondant probablement à des bords, ainsi que l'orientation de ces bords.
L'opérateur utilise des matrices de convolution. La matrice (généralement de taille 3×3) subit
une convolution avec l'image pour calculer des approximations des dérivées horizontale et
verticale. Soit A l'image source, Gx et Gy deux images qui en chaque point contiennent des
Publicité
approximations respectivement de la dérivée horizontale et verticale de chaque point. Ces
images sont calculées comme suit:
En chaque point, les approximations des gradients horizontaux et verticaux peuvent être
combinées comme suit pour obtenir une approximation de la norme du gradient:
Commandes à utiliser : fspecial, filter2, sqrt
Filtre de robert :
Les filtres de Roberts sont une approche discrète de la dérivée de pas 1 d'une fonction: le
gradient de cette fonction.
Si I(x,y) représente un pixel dans une image, alors les amplitudes des gradients en x et en y
peuvent s'écrire respectivement:
Cela revient à convoluer l'image avec les deux filtres Rx = [-1 1] et Ry = transpose ([-1 1]).
L'amplitude du gradient peut être alors calculée de plusieurs façons:
Gx = I(x+1,y) - I(x,y),
Gy = I(x,y+1) - I(x,y).
G1(x,y) = sqrt(Gx^2 + Gy^2),
G2(x,y)= max(abs(Gx),abs(Gy))
ou G3(x,y) = abs(Gx) + abs(Gy).
Et la direction du gradient est donneée par: D(x,y) = Arctan(Gy/Gx).
Or le bruit peut aussi être une brusque variation locale des niveaux de gris : ces filtres sont donc
très sensibles au bruit car ils accentuent, par dérivation, le bruit présent dans l'image. De plus,
ces filtres donneront un contour épais si celui-ci est un contour de type "rampe".