Introduction à l'Image Numérique et Traitement avec Matlab
Introduction à l'Image Numérique et Traitement avec Matlab
1.1.1- Définition
Une image numérique est composée d’unités élémentaires (appelées pixels) qui représentent chacun
une portion de l’image. Une image est définie par :
– le nombre de pixels qui la compose en largeur et en hauteur (qui peut varier presque à l’
infini),
– l’étendue des teintes de gris ou des couleurs que peut prendre chaque pixel (on parle de
dynamique de l’image).
Une image est avant tout un signal 2D (x,y) ou la représentation d’une réalité d’une représentation
3D (x,y,z)
D’un point de vue mathématique, une image numérique 2D I est représentée par une matrice de H
lignes et de L colonnes M(H,L). Le pixel est désigné par un couple (i,j) où i est l’indice de la
colonne et j celle de la ligne. Par convention le pixel (0,0) est en général en haut et à gauche (voir
figure). Le nombre I(i,j) représente la valeur (ou le niveau de gris) du pixel (i,j). Nmax est le
nombre de niveau de gris.
Manipulation 1
à l’aide la la commande « help » donner la syntaxe de ces trois commandes
Manipulation 2
Entrer une matrice 100 x 100 contenant des valeurs aléatoires et afficher l’image correspondant à
l’aide de la fonction « imshow »
Manipulation 3
Lire l’image « riz.bmp » et l’afficher sous forme matricielle puis à l’aide de la commande
« imshow ». affichez les graduations et la barre des couleurs (commande « axis » et « colorbar »)
Afficher la meme image à l’aide de la fonction « image » et commenter les deux resultats obtenus
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.
Manipulation 4
Ouvrez les images « cailloux.bmp » et « herbe .bmp » et les afficher dans le même graphique
L'accès à une élément particulier d'une image est indexé par le nom et la position de cet
élément.
Manipulation 5
Lire l’image « lena.gif », récupérer une zone de votre choix, l’afficher, puis mettre les valeurs à
zéro puis réafficher l’image
Manipulation 6 :
Créez deux variables « im1 » et « im2 » dans lesquelles vous chargez respectivement les
images « lena.gif » et « lena.jpg » (utilisation de la fonction imread). Visualisez ces deux
images. Observez leur type et la taille des données associées, (commande « whos » ou dans le
workspace) quelles différences observez vous ?
1
1.1.2- Types d’image
2
Une image couleur est un tableau à trois dimensions de la forme N×M×P, N×M représente le
nombre de pixels de l’image (N points par lignes, M lignes) et P représente les plans Rouge -
Vert - Bleu. On aura donc pour une image couleur P=3 et pour une image en niveaux de gris P=1.
Manipulation 7
Lire l’image couleur « flower.jpg »Créez 3 nouvelles variables imr, imv, et imb dans lesquelles
vous chargez respectivement la composante rouge (P=1), la composante verte (P=2) et la
composante bleue (P=3) de l’image flower. Visualisez ces 3 plans.
3
Récapitulatif
Manipulation 8
Regarder la palette des couleurs utilisées par défauts dans Matlab. Pour cela, reouvrir Matlab et puis
taper « colorbar ». Regarder les composantes RGB. Utiliser « rgbplot(colormap) » pour voir la
distribution RGB.
Manipulation 9
Ouvrir l'image couleur indexée « trees.tif » avec sa palette : « [x,map]=imread(‘trees.tif’) ». La
tracer avec la palette de Matlab utilisant « imshow(X,colormap) » et avec son propre palette
« imshow(X,map) » Observer.
Manipulation 10
Transformer les couleurs RGB de map en niveaux de gris. Utiliser la fonction « rgb2gray ».
Observer les nouvelles composantes RGB. Retracer l'image trees en niveaux de gris. Observer.
Manipulation 11
Ouvrir l’image couleur « peppers.tiff ». c’est une image couleur dont sa matrice est 3D. Faire
« whos » pour voir X et imshow(x) et observer les couleurs.
Il existe cependant des problèmes qui peuvent nécessiter de changer d'espace de couleur
pour percevoir différemment l'image. Il y a des images où la couleur importe peu, par
exemple des photographies de cellules vivantes (pseudo-transparentes), des images radar, des
images satellites... Dans ce cas, l'espace RGB n'est plus utilisé. On lui préfère d'autres espaces
comme HSV (Hue/Saturation/Value) ou YCbCr (Luminance/Chrominance bleue/Chrominance
rouge).
Manipulation 12
Ouvrir l’image « blood1.tif » et l’afficher.
Taper « help graph3d » pour voir les différentes espaces de couleurs disponibles.
Appliquer la fonction « colormap » avec chacune de ces options et observez le résultat obtenu
Que constatez-vous ?
La boîte à outils images de Matlab gère les espaces de couleur RGB, HSV, YCbCr, NTSC.
Un exemple ci-dessous permet de se rendre compte de l'utilisation d'un changement d'espace
4
de couleur. On lit une image colorée, on la passe dans l'espace HSV et on va changer la
saturation avant de repasser dans l'espace RGB pour visualiser le résultat.
Manipulation 13
Ouvrir l’image « flowers.tif » et l’afficher.
Utiliser les fonctions « rgb2hsv » et « hsv2rgb » pour passer de l’espace des couleurs RGB à
l’espace HSV et vive versa et afficher les resultats obtenus
5
1.1.4- Stockage des images en mémoire (format d’image)
On va s’intéresser au stockage des images en mémoire, c’est-à-dire sous forme de fichier. Les infos
qui doivent stockées sont la largeur et la hauteur ainsi que les valeurs des pixels. On peut vouloir
stocker d’autres types d’informations telles que le type de données, l’auteur, la date, les conditions
d’acquisition, … On va ainsi stoker les informations concernant l’image dans un entête puis les
données. Certains formats d’images stockent dans deux fichiers différents l’entête et les données.
Les données sont souvent stockées dans l’ordre des pixels de gauche à droite et de haut en bas,
relatif au repère image.
Il existe beaucoup de format de fichiers pour sauvegarder les images : TIF, GIF, JPEG, PNG, PPM,
PGM, BMP, ...
Nous donnons ici juste quelques notions seulement sur les principaux formats que nous utiliserons
Manipulation 14
Afficher l’image « blood1.tif » dans une figure et grâce à la commande « print », exporter le
résultat dans le format JPEG avec pour nom de fichier result.jpg.
Les valeurs des images lues sous Matlab sont entières, mais dans certaines circonstances, on
a besoin de travailler sur des valeurs réelles. La transformation pour passer d'entier à réel
utilise la fonction im2double.
Manipulation 15
Lire l’image ‘baboon.tiff ‘ et le stocker, transformer ses valeurs en réel, reconvertir en entier
(im2uint8) et le sauvegarder sous le format « jpeg » avec le nom « test » à l’aide de la fonction
« imwrite »
Afficher les informations sur les images baboon.tif et test.jpg puis comparer
1.2.1- Définition
Le Traitement d’image désigne l'ensemble des opérations sur les images numériques, qui
transforment une image en une autre image. Il s’agit d’une transformation du type f " = t (f ) qui
permet de modifier la dynamique des niveaux de gris dans le but d’améliorer l’aspect visuel de
l’image. A un niveau de gris f de l’image originale correspond le niveau t(f ) dans l’image
transformée. On fait subir à chaque pixel un traitement ne dépendant que de sa valeur. La
transformation t(f ) peut être réalisée en temps réel sur l’image en cours d’acquisition à l’aide d’une
table de transcodage dans laquelle les valeurs de la transformation sont mémorisées. Un adressage
de cette mémoire par une donnée f fournit directement la valeur t(f ).
7
1.2.2- Applications du traitement d’image
8
MEDECINE
9
1.3- ECHANTILLONNAGE ET QUANTIFICATION
1.3.1- Définitions
Deux procédés sont impliqués pour numériser une image : Numérisation = Échantillonnage +
Quantification
L’échantillonnage est limité par la capacité du capteur, donc le nombre de pixels disponible (ou
autre limite imposée). L'échantillonnage est le procédé de discrétisation spatiale d'une image
consistant à associer à chaque zone rectangulaire R(x,y) d'une image continue une
unique valeur I(x,y). On parle de sous échantillonnage lorsque l'image est déjà discrétisée et
qu'on diminue le nombre d'échantillons.
La quantification est limitée par la quantité de tons (de gris) définie dans l’intervalle. La
quantification désigne la limitation du nombre de valeurs différentes que peut prendre I (x, y ).
10
Ce phénomène appelé aliasing est encore pire en 2d, car il affecte la fréquence et la direction des
structures périodiques. Imaginons par exemple qu'on souhaite échantillonner l'image
correspondant aux bandes noires ci-dessous:
Avec un échantillonnage adapté, l'image numérique fait apparaître des structures conformes à
l'information présente dans l'image :
Mais en considérant seulement 1 échantillon sur 2, une structure différente apparaît, dont
l'analyse (ici des bandes verticales, plus épaisses) ne sera pas conforme à la réalité de l'objet :
11
1.3.3- Quantification et information
12
perturbation aléatoire qui affecte les niveaux de gris. En prenant le logarithme, on a le
nombre de bits utile au capteur pour coder les images.
Outre les capacités du capteur, le nombre de bits réellement nécessaires pour coder une image
varie d'une image à l'autre, en fonction de leur contenu informationnel. Ce nombre dépend de
l'entropie, définie à partir de la distribution des niveaux de gris de l'image (cf plus loin,
l'histogramme).
Où N est le nombre de niveaux de gris présents, pi est la proportion (0 < pi < 1) de points de
l'image ayant pour niveau de gris i. Cette grandeur représente le nombre moyen de bits par
pixel nécessaires pour coder toute l'information présente. Elle est utilisée dans les techniques de
compression sans perte pour adapter le volume de donnée des images à leur contenu
informationnel.
Manipulation 16
L’image « Lena.gif » en niveau de gris est codée sur 256 niveaux. Notre œil n’en discerne pas
autant. Affichez l’image de Lena en niveau de gris sur 128, 64, 32, 16, 8, 4 et enfin 2 niveaux afin
de visualiser la dégradation de l’image en cas de sous-quantification trop importante.
Manipulation 17
Ouvrir l’image « cameraman.tif » et diviser sa taille par quatre en utilisant la fonction « imresize ».
Afficher et comparer l’image obtenue avec l’image originale , puis commenter.
1- Afficher l’image ’cameraman.tif’ et donner les caractéristiques de cette image. ´Etudier les
options de la fonction imshow
2- Enregistrer l’image ’cameraman.tif’ sous les formats suivants : JPEG, BMP, PNG, GIF et le
format TIFF sans compression. Ouvrir et afficher ensuite chacune de ces images, observer
leurs différences et comparer les avec l’image d’origine. Mesurer ces différences avec
l’image d’origine en calculant l’erreur quadratique moyenne.
3- Enregistrer l’image ’cameraman.tif’ au format JPEG avec différents niveaux de compression
(mettre le paramètre ’Quality’ `a 0, 25, 50, 75 et 100). Ouvrir et afficher ensuite chacune de
ces images, observer leurs différences en taille et en qualité et comparer les avec l’image
d’origine. Mesurer ces différences avec l’image d’origine en calculant l’erreur quadratique
moyenne.
4- Ouvrer et afficher l’image « lena.gif ». C’est une image en niveau de gris
- Convertissez la en une image binaire et afficher le resultat
- Convertissez-la en une image rgb et affichez le resultat
13
5- Créez un damier de taille 256 à 4 carrés. Affichez-le avec un titre.
6- Ouvrez l’image ’cameraman.tif’. Affichez-la dans une nouvelle figure. Affichez-la dans 2
fenêtres de la même figure puis dans 4.
7- Tout d’abord, ouvrez avec imread de Matlab l’image ’mandrill.bmp’. Calculer la taille
théorique de cette image en KiloOctets. Vérifiez que la valeur obtenue est la même que celle
fournie par Windows.
8- Ouvrez à présent l’image ’Lena.jpg’. Sur la même figure, affichez avec imshow l’image
source et chacune des composantes R, V et B. Transformez cette image en niveau de gris à
l’aide la fonction rgb2gray. Affichez sur différentes figures à 4 fenêtres avec subplot l’image
source ainsi que ses 3 composantes dans les systèmes YCbCr et HSV.
NB : il est inutile de calculer la taille de cette image car elle a subi une compression JPEG
qui l’a considérablement diminuée.
9- Nous allons dans un premier temps sous-échantillonner une image en ne prenant qu’un point
sur deux dans les deux directions. Ainsi, les nombre de lignes et de colonnes vont être
divisés par deux et par conséquent la taille sera divisée par quatre. Pour cela, ouvrez l’image
’mandrill.bmp’. Créez une nouvelle image sous-échantillonnée en vous rappelant de
l’assignation particulière des éléments d’une matrice avec Matlab. Ensuite, utilisez la
fonction « interp2 » pour sur-échantillonner par interpolation l’image précédemment sous-
échantillonnée.
14
CHAPITRE 2
Traitements de base sur les images
2.1.1- Définition
15
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.
On appelle ainsi dynamique d'une image l’intervalle des valeurs des pixels de l’image.
Dynamique d'une image = [valeur_min,valeur_max]
Manipulation 18
Exécuter le fichier demo : « imadjdemo.m » et faire suivre les instructions
Manipulation 19
Ouvrir l’image « cameraman.tif » et afficher son histogramme
16
2.1.2- Notion d’histogramme cumulé
Intéressons-nous maintenant à la notion d’histogramme cumulé. Elle est basée sur le même principe
que l’histogramme. Il suffit en fait de prendre tous les pixels dont la valeur est inférieure ou égale
au niveau de gris courant. On normalise ce nombre en le divisant par le nombre total de pixels de
l’image. L’histogramme cumulé est alors strictement croissant par morceaux et a pour valeur finale
1.
L’application la plus connue de l’histogramme cumulé est l’égalisation d’histogramme. Cela
consiste à affecter pour chaque niveau de gris un même nombre de pixels. L’histogramme devient
alors plat. On obtient la transformation dite d’égalisation par la formule : S(n) = round
[255.Hc(n)] où Hc est l’histogramme cumulé et n le niveau de gris de l’image source.
Manipulation 20
Ouvrir l’image « tire.tif » et l’afficher ainsi que son histogramme.
A l’aide de la fonction « histeq » égaliser l’image, afficher l’image obtenue avec son histogramme
et commenter les deux résultats
Manipulation 21
Ouvrez l’image « tire.tif » et vérifiez que son histogramme est resserré dans les valeurs faibles. A
l’aide des fonctions « imhist » et « cumsum », calculez l’histogramme cumulé de cette image.
Manipulation 22
Déterminer les valeurs de recadrage en utilisant la fonction « stretchlim » d’abord, puis les
fonctions « min » et « max » ensuite. Réaliser respectivement les deux recadrages dynamiques
correspondant.
17
2.2- LUMINANCE OU BRILLANCE D'UNE IMAGE
La luminance (ou brillance) est définie comme la moyenne de tous les pixels de l'image. Dans les
deux images ci-dessous, seule la luminance est différente :
Sous Matlab
Il faut pour cela utiliser les commandes «imadjust(A,[n ;m],[p ;q]) » (où A représente la matrice de
l’image qu’on veut ajuster, n et m les limites de luminance de l’image à ajuster, p et q les limites de
luminance de l’image à obtenir) et ou « brighten » .
Manipulation 24
Ouvrir l’image « suzan.gif », modifier sa luminance à l’aide des paramètres de votre choix, afficher
l’image de départ et l’image obtenue dans une même figure
Faite le même chose en utilisant la commande « brighten »
Remarque : Lorsqu’on retouche une image en changeant sa luminance son histogramme ne change
montrant ainsi que sa matrice représentative est resté inchangé. En d’autres termes cela montre
qu’aucun détail d’une image ne peut être perdu ni retrouver après avoir changé la luminance d’une
image.
En conclusion changer la luminance d’une image permet juste d’améliorer la vue de l’image (au
niveau de nos yeux).
2.3.1- Définition
𝑁−1 𝑀−1
1
𝐶=√ ∑ ∑ (𝑓(𝑥, 𝑦) − 𝑀𝑜𝑦)2
𝑀×𝑁
𝑥=0 𝑦=0
18
max[𝑓(𝑥, 𝑦)] − min[𝑓(𝑥, 𝑦)]
𝐶=
max[𝑓(𝑥, 𝑦)] + min[𝑓(𝑥, 𝑦)]
Avec Matlab
Il suffit d’utiliser la commande « contrast » après avoir initialiser le contexte graphique avec
« imshow(A) » . Cette commande nous affiche donc une fenêtre qui nous permet de changer le
contraste d’une image à notre guise.
Manipulation 25
Ouvrir une l’image « tree.gif », modifier le contraste avec le paramètre de votre choix et afficher
l’image originale et l’image obtenue dans la même figure
Remarque : On a remarqué que contrairement à la luminance en changeant le contraste d’une
image on pouvait soit mieux mettre en exergue certains détails de l’image ou bien plutôt les cacher
encore plus puisque l’histogramme de l’image obtenu après le contraste est différent de celui de
l’originale.
En conclusion on peut retrouver/perdre des détails sur une image en effectuant un contraste de
celle-ci.
19
2.3.2- Amélioration du contraste
Transformation linéaire
Transformation linéaire avec saturation
Transformation linéaire par morceau
Transformation non-linéaire
Égalisation de l’histogramme
a) Transformation linéaire
20
Implémentation
255
I′ (i, j) = (I(i, j) − Smin
Smax − Smin
I′ (i, j) ≤ 0 ⟹ I′ (i, j) = 0
21
c) Transformation linéaire par morceaux
22
d) Transformation non-linéaire
e) Egalisation de l'histogramme
23
Pour améliorer le contraste, on cherche à aplanir l’histogramme
24
L'égalisation d'histogramme peut améliorer une image là où la correction de dynamique de
l'histogramme est inefficace.
Si on prend la même image avec des contrastes différents l’égalisation d’histogramme donne le
même résultat pour toutes les images.
Avec Matlab
Manipulation 26
Ouvrir l’image « watch.jpg », y appliquez « histeq » pour l’égaliser, puis afficher l’image originale
et l’image obtenu chacune dans une même figure avec son histogramme
25
2.4- OPERATION SUR LES IMAGES
On peut aussi effectuer les opérations logiques telles que le « et » et le « ou » sur les images
Nous avons ici le récapitulatif des opérations logiques sur les images.
26
Avec Matlab il ya plusieurs façon de procéder pour effectuer les opérations arithmétiques et
logiques sur les images. En effet d’une part lorsque Matlab lit une image elle là place dans une
matrice. On peut donc manipuler cette matrice à sa guise. D’autre part Matlab à qu’en même prévu
des fonctions permettant de produire le même résultat.
Manipulation 27
Effectuer l’operateur and sur les images « text.tif » et « text.bmp ». Affichez et commenter le
résultat
NB : Pensez à redimensionner les images pour être sûr qu’elles ont les mêmes dimensions à l’aide
de la fonction « imresize »
a) addition d’images
L’addition de deux images consiste juste à additionner de ses deux matrices. Plusieurs conventions
peuvent être adoptées.
- Si le résultat de l’addition est supérieur à 255, on prend juste 255. Ainsi si f et g sont deux
images, on peut définir l’addition R pixel à pixel de ces deux images par : R(x,y) = Min(
f(x,y)+g(x,y) ; 255 ).
27
- On peut aussi choisir de prendre la moyenne de chaque image dans cas ou le résultat est
supérieur à 255.
Sous Matlab
Pour additionner deux images A et B, on utilise la fonction imadd(A,B) ou juste le signe + ; (on a
alors C=imadd(A,B) ou C=A+B)
Il faut noter qu’ici les deux images doivent avoir les mêmes tailles c’est-à-dire que le même nombre
de pixel (matrice de même dimension). Dans le cas contraire il faut d’abord redimensionner une à la
taille de l’autre par les instructions suivantes :
[m,n]=size(A) ;
B=imresize(B,[m n]) ;
Ainsi B a désormais les mêmes dimensions que A.
NB : L’addition d’une image peut également se faire avec un scalaire. Ainsi valeur de chaque pixel
doit donc augmenter de ce scalaire. On pourra prendre également 255 si le résultat est supérieure à
255.
Manipulation 28
a) Faite l’addition de l’image ’clock.tiff’ avec un scalaire de votre choix.
b) Faite l’addition des images ‘rice.tif’ et ‘cameraman.tif’ et afficher le résultat.
(Attention ces images pourront ne pas avoir la même taille)
b) Soustraction d’images
Sous Matlab
Pour soustraire deux images A et B, on utilise la fonction imsubtrac(A,B) ou juste le signe + ; (on a
alors C=imsubtrac(A,B) ou C=A-B)
Il faut noter qu’ici les deux images doivent avoir les mêmes tailles c’est-à-dire que le même nombre
de pixel (matrice de même dimension). Dans le cas contraire il faut d’abord redimensionner une à la
taille de l’autre par les instructions suivantes :
[m,n]=size(A) ;
28
B=imresize(B,[m n]) ;
Ainsi B a désormais les mêmes dimensions que A.
Manipulation 29
Faite la soustraction des images ‘rice.tif’ et ‘cameraman.tif’ et afficher et commenter le
résultat.
(Attention ces images pourront ne pas avoir la même taille)
c) Multiplication d’images
2.5.1- Définition
L’interpolation est le processus par lequel on estime la valeur d’un pixel de l’image se basant sur la
valeur des autres pixels. Par exemple lorsqu’on redimensionne une image de façon à ce qu’elle
contienne plus de pixels que l’image originale, les valeurs des pixels additionnels sont calculées par
29
interpolation. La rotation et le redimensionnement d’image utilisent l’interpolation à deux
dimensions pour effectuer certaines de leurs opérations géométriques. Il existe trois méthodes
d’interpolation, qui diffèrent suivant l’ensemble de pixels considérés, à savoir :
Toutes les méthodes d'interpolation fonctionnent d'une manière fondamentalement semblable. Dans
chaque cas, pour déterminer la valeur pour un Pixel interpolé, on trouve le point dans l'image
d'entrée que correspond le Pixel de sortie. On assigne alors une valeur au Pixel de de sortie en
calculant une moyenne pondérée d'un certain ensemble de Pixel à proximité du point. Les
pondérations sont basées sur la distance que chaque Pixel fait avec le point.
Il s’obtient par simple recopie des pixels. On assigne à la valeur du pixel de sortie la valeur du pixel
ou le point correspond.
Ici le pixel de sortie est la moyenne pondérée des 4 voisins du point considéré.
Principe 1D
yi = xi
(xi + xi+1)
yi+1 =
2 2
30
2.5.3- Interpolation bicubique
Principe 1D
( xi 1 9 xi 9 xi 1 xi 2)
y
i 1
2
16
Il se pose tout de même un problème pour les deux derniers points. On fait donc :
Le facteur zoom peut être plus élevé, par exemple 3, ce qui donne pour une interpolation cubique :
Avec Matlab
L’interpolation sous matlab se fait en utilisant la fonction « imresize » avec la syntaxe suivante : B
= imresize(A,[mrows ncols],method)
Method etant la méthode d’interpolation utilisée (‘nearest’ pour plus proche voisin , ‘bilinear’ pour
bilinéaire et ‘bicubic’ pour bicubique.
Manipulation 31
Appliquez chacune des trois interpolations ci-dessus sur l’image « pills.jpg » les quatre images
(image originale + les trois images obtenues) dans une même figure.
EXERCICES
1. Ouvrez avec Matlab les images ’Beach_nb.tif’ et ’Manhattan_nb.tif’. Additionnez-les avec des
coeffcients de pondération variables et visualisez le résultat.
2. Vous pouvez maintenant regarder l’image différence entre la somme et une des 2 images. Il est
bien sûr possible de retrouver l’une puis l’autre image avec les coeffcients adéquats dans
l’opération différence.
3. Ouvrez à présent l’image ’coupe_histo.jpg’. Identifier le seuil à appliquer pour
extraire les noyaux du fond. Réaliser le seuillage à l’aide de im2bw et vérifier en
visualisant l’image obtenue que le résultat est viable.
4. A l’aide de la fonction « hist » de Matlab, visualiser l’histogramme de l’image « peppers.jpeg »
Modifier sa dynamique pour obtenir une image plus contrastée.
31
CHAPITRE 3
CONVOLUTION ET FILTRAGE
Pour l’instant, nous avons vu surtout des transformations ponctuelles des pixels d’une image, c'est-
à-dire lire la valeur d’un pixel et la remplacer par une autre. Mais il existe aussi des
transformations locales (Lire la valeur de quelques pixels voisins → calculer une nouvellevaleur
pour un pixel) et des transformations globales (Lire la valeur de tous les pixels de l’image →
calculer une nouvelle valeur pour un seul pixel)
3.2.1- Définition
La convolution numérique est l'opérateur de base du traitement linéaire des images. Apparue
très tôt dans les premiers systèmes d'analyse d'images sous forme empirique et justifiée par
des considérations d'implantation, ce n'est que plus tard qu'on a fourni des justifications
physiques et fait le lien théorique avec les filtres et le traitement du signal.
32
La convolution discrète est un outil permettant l’utilisation de filtres linéaires ou de filtres de
déplacements invariants
Associativité : (ℎ ∗ 𝑔) ∗ 𝑘 = ℎ ∗ (𝑔 ∗ 𝑘) = ℎ ∗ 𝑔 ∗ 𝑘
NB : par convention pratique, la taille de l’image résultat est la même que celle de l’image d’origine
En pratique, la convolution numérique d'une image se fera par une sommation de multiplications
Un filtre de convolution est une matrice (image) généralement (mais pas toujours) de taille impaire
et symétrique (3x3, 5x5, 7x7, …)
33
3.2.4- Convolution d’une image par filtrage 2D :
𝐼 ′ (𝑖, 𝑗) = 𝐼(𝑖, 𝑗) ∗ 𝑓𝑖𝑙𝑡𝑟𝑒(𝑖, 𝑗)
𝐼(𝑖 − 𝑢, 𝑗 − 𝑣) ∙ 𝑓𝑖𝑙𝑡𝑟𝑒(𝑢, 𝑣)
𝐼 ′ (𝑖, 𝑗) = ∑ ∑
𝑢 𝑣
34
R(2,1) = I(1,0) K(0,0) + I(2,0) K(1,0) + I(3,0) K(2,0) + I(1,1) K(0,1) + I(2,1) K(1,1) + I(3,1)
K(2,1) + I(1,2) K(0,2) + I(2,2) K(1,2) + I(3,2) K(2,2)
- Mettre à zéro
- Convolution partielle (sur une portion du noyau)
- Miroir de l’image f(-x, y) = f(x,y)
35
Manipulation 32
0 −1 0
On considère le filtre h donc le noyau d convolution est : [−1 5 −1]
0 −1 0
(Ce filtre est en fait la somme d’un filtre Laplacien (détection de contours) et d’un
filtre Identité, l’ensemble forme donc un filtre rehausseur de contours ).
4 125 255
On considère une image Ie de taille 3 × 3 [7 0 45 ]
9 56 13
L’image Ie filtrée par h donne une image Is.
Calculer la valeur du pixel central Is(1, 1) de l »image de sortie Is
Mise en garde : la numérotation des lignes et des colonnes n’est pas la même pour l’image d’entrée
et le filtre. Pour l’image, les indices vont de 0 à M-1 (lignes) et de 0 à N-1 (colonnes).
Pour le filtre, l’élément h0,0 est placé au centre du noyau de convolution, les indices vont donc de –
I à +I (lignes) et de –J à J (colonnes).
Les filtres linéaires sont des opérateurs qui éliminent les éléments perturbateurs (bruits) pour
améliorer la visualisation des images numériques, ou bien qui suppriment les structures non
significatives pour simplifier leur contenu.
(𝑢𝑀 ,𝑣𝑀 )
𝐹𝑙𝑝 [𝑢, 𝑣] = {𝐹[𝑢, 𝑣]𝑠𝑖𝑢 ≤ 𝑢𝑀 𝑒𝑡𝑣 ≤ 𝑣𝑀
0𝑠𝑖𝑛𝑜𝑛
De même le filtre coupe-bande idéal est défini comme suit :
La figure ci-dessous illustre l’application de ces deux filtres sur une image. Notons que dans le cas
du filtre passe-bas comme du coupe-bande, la composante de fréquence nulle
36
La somme des niveaux de gris sur toute l’image est donc conservée par ces 2 filtres.
37
3.3.2- Filtrage par convolution
Le filtrage linéaire peut également se calculer dans le domaine spatial par une convolution. Un
operateur de convolution q appartenant à la famille des filtres lisseurs aura donc une composante de
fréquence nulle Q(0,0), égale à 1, ce qui signifie que le noyau de convolution q doit être la somme
unité pour que l’image lissée conserve la somme des niveaux de gris de l’image originale.
Le filtrage spatial est essentiellement une operation de convolution (2D). Si f est l’image à filtrer
(ou à rehausser) et g le filtre spatial (ou PSF ou masque ) on a :
Filtre Passe-haut : accentue les contours et les détails de l’image mais amplifie le bruit
38
Filtrage Passe-bande : élimine certaines fréquences indésirables présentes dans l’image
a) Filtre moyenneur
Une première classe d'approche est basée la redondance d'informations. La nouvelle valeur d'un
pixel est calculée par moyennage des valeurs sur un voisinage. Cette opération linéaire peut être vue
comme la convolution discrète de l'image par un masque.
où I est l'intensité de l'image d'origine, I’ est l'intensité de l'image filtrée, 𝜗est le voisinage utilisé et
h est le masque de convolution.
Le filtre moyenneur :
39
Plus le filtre grossit , plus le lissage devient important et plus le flou s’accentue!
Sous Matlab
Manipulation 33
Exécuter et tester la démo « nrfiltdemo » qui utilise principalement ces fonctions et suivre les
instructions.
La fonction de filtrage linéaire propre aux images proposé par Matlab est la fonction « imfilter ».
Cette opérateur correspond à une convolution réalisable également avec les fonctions « conv2 » ou
« filter2 » mais qui est spécifique aux images numériques et traite en particulier les bords de
l’image. Le noyau du filtre est une matrice de taille quelconque définie par l’utilisateur ou
accessibles par la fonction « fspecial ».
On peut procéder de plusieurs façons. La différence entre les différentes méthodes se situe au
niveau de la fabrication du . La procédure est la suivante :
40
On construit soi-même le filtre
A=imread(‘noise.gif’) ;
H=(1/20)*ones(5,5) ;
Af=Imfilter(A,H,’conv’) ;
Puis imshow(A),title(‘Image originale’);
Et figure, imshow(Af),title(‘Image filtré’);
Filtre construit par Matlab
A=imread(‘hang.gif’);
H=fspecial (‘average’)*(1/5);%fonction qui permet de construire un masque
de filtrage pour le filtre moyenneur
Af=imfilter(A,H,’conv’);
Puis imshow(A),title(‘Image originale’);
Et figure,imshow(Af),title(‘Image filtré’);
Manipulation 34
Charger l’image ‘lena.jpg’. Ajouter du bruit sur cette image. Utiliser la fonction « imnoise.m ».
Voir les résultats pour différents types du bruit.
Manipulation 35
On souhaite réduire le bruit dans l’image bruité « bruit.jpg ». Dans un premier temps, on
considère un filtre
moyenneur (3 × 3) pour réduire le bruit dans l’image. Son noyau de convolution est :
1 1 1 1
ℎ= ∙ [1 1 1]
9
1 1 1
Appliquez ce filtre (utilisez la fonction imfilter), et observez l’image bruitée. Interpréter le
résultat obtenu.
b) Filtre Gaussien
Le filtre gaussien donnera un meilleur lissage et une meilleure réduction du bruit que le filtre
(𝑥2 +𝑦2 )
1
moyenne. La fonction gaussienne est définie par : 𝐺(𝑥, 𝑦) = 2𝜋𝜎2 𝑒 2𝜎2
1 2 3 2 1
2 6 8 6 2
1
Avec le filtre ci-suivant : 98 × 3 8 10 8 3
2 6 8 6 2
[1 2 3 2 1]
41
Exemple de filtre gaussien
Manipulation 36
Fabriquer un noyau de convolution de taille 5 x 5 pour le filtre Gaussien (utiliser « fspecial » et
l’appliquez à une image de votre choix. Commenter le résultat
1𝑠𝑖𝐷(𝑢, 𝑣) ≤ 𝐷0 𝑀 𝑁
𝐻(𝑢, 𝑣) = { avec 𝐷(𝑢, 𝑣) = √(𝑢 − 2 )2 + (𝑣 − 2 )2
0𝑠𝑖𝑛𝑜𝑛
42
d) Filtre Butterworth passe-bas
1 𝑀 𝑁
𝐻(𝑢, 𝑣) = 𝐷(𝑢,𝑣) 2𝑛
avec 𝐷(𝑢, 𝑣) = √(𝑢 − 2 )2 + (𝑣 − 2 )2
1+[ ]
𝐷0
Phénomène de réverbération :
43
3.4- FILTRAGE NON LINEAIRE
- Les bruits impulsionnel : Lorsque l’image fait apparaitre des valeurs parasites aberrantes qui
ne depandent pas des valeurs initiale de l’image, le filtrage linéaire diffuse ces valeurs
aberantes sur les pixels voisins
- Le respect des frontières : Le filtrage linéaire lisse les transition abruptes, rendant ainsi les
images flous.
On désigne par Filtrage non linéaire un opérateur qui remplace la valeur de chaque pixel par une
combinaison non linéaire des valeurs de ses paixels voisins. L’objectifs des filtres lisseurs non
linéaires est d’adopter une solution aux limites exprimées ci-dessus, par l’utilisation d’une (ou de
plusieurs) des techniques suivantes :
- Statistiques d’ordre : Opérateurs basés sur un classement des valeurs des pixels voisins
(minimum, maximum, médiane, …)
- Moyennes robustes : Calculs des moyennes locales – éventuellement pondérés – en excluant
du calcul les valeurs marginales
- Anisotropie : Opérateur où le support de calcul du filtre effectivement calculé varie
localement en fonction du contenu de l’image.
Il existe un grand nombre de filtre non linéaires exploitant une ou plusieurs de ses propriétés. Nous
présentons dans la suite le filtre median, puis le filtre de Nagao
Les filtres de moyennage ont tendance à rendre l'image floue et donc à perdre de l'informations sur
les contours caractérisés par des fortes variations d'intensité. Pour diminuer cet effet, on ne
moyenne plus sur le voisinage mais on prend lavaleur médiane sur ce voisinage. C'est le filtre
médian.
2 12 12
Exemple pour un voisinage 3 x 3 𝐼 = [2 12 60] La valeur mediane ici est 12
2 2 12
Un autre exemple :
44
On remplace la valeur du pixel par la valeur médiane ou la valeur moyenne. Ce filtre est utile pour
contrer l’effet « Poivre et Sel » (P& S) c’est- à-dire des faux « 0 » et «255 » dans l’image.
Le filtre médian:
Avec Matlab
La fonction « medfilt2 » (ou plus généralement « ordfilt2 ») permet de réaliser le filtrage par un
filtre médian.
Manipulation 37
Appliquer un bruit de type ”poivre et sel” sur une image acquise en niveau de gris et appliquer un
filtre moyenneur de taille 3 × 3 puis un filtre median de même taille pour comparer à nouveau les
résultats obtenus.
Le filtre de Nagao combine statistique linéaire et anisotropie, de la façon suivante : Pour chaque
pixel (x,y), on examine l’ensemble des voisins contenus dans un carré 5 x 5 centré sur (x,y) : N(x,y)
= {(x,y) + b ; 𝑏 ∈ {−2, +2}2 }. On considère ensuite 9 ensembles 𝑁𝑖 (𝑥, 𝑦) ⊂ 𝑁(𝑥, 𝑦), 𝑖 ∈ {1,9}
comme representé sur la figure ci-dessous :
45
Principe
Le principe de ce filtrage est de remplacer chaque pixel de l'image par la valeur moyenne des pixels
contenus dans une fenêtre particulière. Il s'agit de choisir la fenêtre la mieux adaptée parmi un
certain nombre de fenêtres prédéfinies.
9 fenêtres sont ici définies, chacune contenant 9 pixels, dont le pixel à remplacer. Elles s'inscrivent
dans une fenêtre de taille 5x5 centrée sur le pixel à modifier.
Sur ce dessin sont repésentées 3 fenêtres, contenant les pixels gris et le pixel noir (pixel central à
remplacer). Les fenêtres de filtrages en sont déduites de la façon suivante :
4 fenêtres sont issues de celle de gauche (par rotations d'angles 0, 90, 180 et 270 degrés) ;
4 sont issues de celle du milieu de la même façon ;
1 est celle de droite.
La fenêtre qui sera sélectionnée est celle dont la variance est la plus faible. La valeur moyenne de
cette fenêtre remplacera celle du pixel central.
Utilisation
Ce filtrage permet de lisser l'image (moyennage). Toutefois, le fait de choisir la fenêtre de plus
petite variance implique que cette moyenne est faite sur une zone relativement homogène. Ainsi, les
contours sont conservés : un pixel proche d'un contour sera remplacé par une valeur homogène à la
zone à laquelle il appartient, et non pas par une valeur moyenne entre la zone à laquelle il appartient
et celle de l'autre côté du contour. Par exemple :
46
Sur cette image (résultat approximatif), les pixels de la zone claire ont été remplacés par des pixels
clairs eux aussi, car la fenêtre de plus faible variance autour de chacun de ces pixels appartient à
cette zone. Il en va de même pour la zone foncée.
47
Figure : Comportement du filtre median : (1) Image originalm bruit impulsionel (15% des
valeurs modifiées arbitrairement). (2) Après filtrage Gaussien (𝝈 = 𝟐, 𝟓). (3) Après filtrage
median (Card(B) = 21). (4) Même filtre median appliqué sur l’image avec bruit additif
Pour chaque 𝑁𝑖 (𝑥, 𝑦), on calcule la moyenne mi(x,y) et la variance vi(x,y). Le résultat de filtre de
Nagao consiste à remplacer la valeur de chaque pixel par la moyenne mi(x,y) du domaine 𝑁𝑖 (𝑥, 𝑦)
𝑞𝑢𝑖𝑟𝑒𝑝𝑟𝑒𝑠𝑒𝑛𝑡𝑒𝑙𝑎𝑣𝑎𝑟𝑖𝑎𝑛𝑐𝑒 vi(x,y) minimum. Le comportement du filtre de Nagao, comparé à un
filtre linéaire (exponentiel), et à un filtre médian, est illustré par la figure suivante :
Figure : Les différents sous-ensembles du voisinage 5 x 5 utilisé pour le calcul du filtre de Nagao
Exercices
1- Soient les 3 masques de convolution suivants :
1 1 1 1 0 −1 0 −1 0
1
𝐻1 = 9 [1 1 1] 𝐻2 = [1 0 −1] 𝐻3 = [−1 4 −1]
1 1 1 1 0 −1 0 −1 0
a) Sur papier, calculez la convolution de la matrice E avec chacun de ces filtres :
0 2 3 4 1
1 8 9 7 2
𝐸 = 2 10 7 8 0
2 9 7 9 3
[1 2 0 2 3]
b) Quelles conditions aux limites peut-on utiliser ? A votre avis, quels sont les impacts de ces
filtres ?
c) Ouvrez les images ’dominos_nb.tif’ et ’map_monde_nb.tif puis réalisez les différents
traitements avec la fonction conv2 de Matlab.
48
2- Utiliser la fonction « fspecial.m » pour créer un filtre spatiale. Essayer de faire du filtrage
(utiliser imfilter.m) après avoir ajouter du bruit gaussien sur l’image ‘eight,tif’ et ‘saturn.tif’
et cela pour les types suivants :
– 'average' averaging filter
– 'disk' circular averaging filter
– 'gaussian' Gaussian lowpass filter
– 'laplacian' filter approximating the 2-D Laplacian operator
– 'log' Laplacian of Gaussian filter
– 'motion' motion filter
– 'prewitt' Prewitt horizontal edge-emphasizing filter
– 'sobel' Sobel horizontal edge-emphasizing filter
– 'unsharp' unsharp contrast enhancement filter
3- Acquérir une image en niveau de gris de taille 1280 × 960. A partir d’un filtre moyenneur,
effectuer le lissage de cette image en utilisant des filtres de tailles 3 × 3, 5 × 5 puis 7 × 7 afin
d’étudier l’influence de la taille du noyau du filtre. Comparer les résultats obtenus entre eux
et avec ceux obtenus en utilisant un filtre gaussien.
4- Appliquer un bruit uniforme sur une image acquise en niveau de gris et appliquer un filtre
moyenneur de taille 3 × 3 puis un filtre median de même taille pour comparer `a nouveau les
résultats obtenus.
5- Chargez l’image « cailloux.bmp ».
- À l’aide de la fonction « imnoise », créez l’image bruitée de cailloux.bmp avec un bruit
de type « poivre-et-sel » (« salt-and-pepper »). Affichez l’image bruitée et expliquez
comment peut-on créer ce bruit ?
- On souhaite réduire le bruit dans l’image. Dans un premier temps, on considère un
filtre moyenneur (3 × 3) pour réduire le bruit dans l’image. Son noyau de convolution est :
1 1 1 1
[1 1 1]
9
1 1 1
Appliquez ce filtre (utilisez la fonction imfilter), et observez l’image bruitée. Interprétez le
résultat obtenu.
- On souhaite à présent réduire le bruit avec un filtre médian (3 × 3). Sous Matlab, le filtrage
médian peut être réalisé à l’aide de la fonction « medfilt2 ». Expliquez ce qu’effectue
cette fonction. Appliquez ce filtre à l’image bruitée et observez les résultats.
Expliquez les différences avec le filtre moyenneur précédemment utilisé.
6- Faites la recherche sur le filtre de wiener l’appliquer sur une image et le comparer avec le
filtre médian
49
CHAPITRE 4
Traitements FREQUENTIELS DES IMAGES
Dans cette partie, on notera les arguments entre crochets pour souligner leur nature discrète. On
notera [x , y] les cordonnées du domaine spatial, [u , v] les coordonnées dans le domaine
fréquentiel.
Dans le cadre d’une image, une fréquence correspond à un changement d’intensité. On distingue les
50
Basse fréquence
Haute fréquence
4.2.1- Définition
La transformée de Fourrier discrète 2d d’une image numérique f[x,y], de largeur w et de hauteur h
est donnée par
𝑤−1 ℎ−1
F[u,v] et f[x,y] sont des nombres complexes en général, mais dans notre cas f[x,y] qui représente
l’image numérique dans le domaine spatial sera toujours réel, et donc F[u,v] sera toujours une
fonction complexe paire :
Avec ‖𝐹[𝑢, 𝑣]‖le module et 𝜌[𝑢, 𝑣] l’argument de F[u,v]. Le module correspondant ) l’amplitude
des sinusoïdes à leur phase. Comme F est paire dans notre cas, on aura donc : ‖𝐹[𝑢, 𝑣]‖ =
‖𝐹[−𝑢, −𝑣]‖ et 𝜌[𝑢, 𝑣] = 𝜌[−𝑢, −𝑣]
𝐹[𝑢, 𝑣] = 𝐹[𝑢 + 𝑤, 𝑣 + ℎ]
𝑓[𝑥, 𝑦] = 𝑓[𝑥 + 𝑤, 𝑦 + ℎ]
Ceci est un point important dans la modélisation fréquentielle : les images numériques sont
supposées infinies périodiques. On doit donc avoir une hypothèse de prolongement des images à
l’extérieur de leur support. Généralement, on admet que l’image numérique observée correspond à
une plus grande période d’une image infinie périodique : Voir figure
(1)
52
(2)
FIG : Périodicité de l’image (1) et de son spectre d’amplitude (2) dans la modélisation fréquentielle.
Le rectangle montre les périodes habituellement représenté
a) Linéarité
𝑎 ⋅ 𝑓1 [𝑥, 𝑦] + 𝑏 ⋅ 𝑓2 [𝑥, 𝑦] → 𝑎 ⋅ 𝐹1 [𝑢, 𝑣] + 𝑏 ⋅ 𝐹2 [𝑢, 𝑣]
b) Correspondance convolution/ produit
𝑓1 [𝑥, 𝑦] ∗ 𝑓2 [𝑥, 𝑦] → 𝐹1 [𝑢, 𝑣] ⋅ 𝐹2 [𝑢, 𝑣]
𝑓1 [𝑥, 𝑦]. 𝑓2 [𝑥, 𝑦] → 𝐹1 [𝑢, 𝑣] ∗ 𝐹2 [𝑢, 𝑣]
d) dérivation
𝜕𝑓[𝑥, 𝑦] 𝜕𝑓[𝑥, 𝑦]
→ 𝑖𝑢𝐹[𝑢, 𝑣]𝑒𝑡 → 𝑖𝑣𝐹[𝑢, 𝑣]
𝜕𝑥 𝜕𝑦
e) théorème de Parseval
𝑤−1 ℎ−1 𝑤−1 ℎ−1
1 2
∑ ∑‖𝑓[𝑥, 𝑦]‖ = ∑ ∑‖𝐹[𝑢, 𝑣]‖2
𝑤ℎ
𝑥=0 𝑦=0 𝑥=0 𝑦=0
53
4.2.3- Definition Discrete Fourier Transform (2D-DFT))
La transformée de Fourrier discrete 2D, or 2D-DFT (2D discrete Fourier transform), d’une
suite finie x k , l , avec k {0,..., M 1} et l {0,..., N 1}, est la suite définie, pour
m {0,..., M 1} et n {0,..., N 1}, par:
𝑀−1 𝑁−1
𝑘𝑚 𝑙𝑛
𝑋(𝑚, 𝑛) = ∑ ∑ 𝑥(𝑘, 𝑙)𝑒𝑥𝑝 {−2𝜋𝑗 + }
𝑀 𝑁
𝑘=0 𝑙=0
Pour toute valeur de e, le 1D-DFT de la suite x(k, l) pour la variable k apparait dans la parenthèse.
Manipulation 38
Exécuter et tester la démo « firdemo » qui utilise le principe du filtrage fr´equentiel
Avec MATLAB,
Manipulation 39
Utiliser la fonction CHECKERBOARD pour créer une image. Tester la transformée de Fourier de
cette image.
L’outil de base pour cela est la Transformée de Fourier, On parle de domaine fréquentiel, par
opposition au domaine spatial (de l’image)
54
4.2.5- Transformée en nombres complexes
La Transformée de Fourier d’une fonction réelle donne une fonction complexe
55
b) Inversion des quadrants de la TF(selon les librairies)
Manipulation 40
Calculer la transformée de Fourier centrée de l’image en niveau de gris « plage.jpg ». Afficher le
module ou la partie réelle de cette transformée soit dans une image, soit dans un graphique
(fonction surf, image,imagesc, imshow, ...).
TF inverse
56
Manipulation 41
Prendre une image de votre choix et afficher son spectre de fourrier. Appliquer la transformée
inverse de Fourrier à l’image obtenue (fonction « ifft2 »). Comparer l’image finale de l’image
de départ
Exemples de Transformée de Fourier
57
4.2.7 : Autres exemples de transformée de fourrier
Regardez les lignes dans ces deux images l'image de gauche possède des lignes
horizontales/verticales qu'on retrouve dans sa transformée l'image de droite possède des lignes dans
toutes les directions qu'on retrouve aussi dans sa transformée
Dans le domaine spatial, le filtrage se fait par convolution. Dans le domaine spectral (ou
fréquentiel), il se fait par multiplication (ou masquage de l'image). Dans le cas des filtres dans le
domaine fréquentiel non-multiplicatif, on ne peut pas obtenir le même résultat par convolution dans
le domaine spatial.
58
b) Bandes de fréquences
59
c) Filtrage passe-bas
On efface les hautes fréquences de la TF en mettant les pixels loin du centre à zéro
60
e) Filtrage passe-haut par TF
61
Avec MATLAB,
Afin de réaliser un filtrage en utilisant les transformées de Fourier, on remplacera les valeurs
correspondant aux fréquences à filtrer par des zéros (filtre idéal). On réalisera ensuite la transformée
inverse en faisant attention d’en prendre son module ou sa partie réelle.
Manipulation 42
Réaliser le filtrage passe-bas, passe-haut puis passe-bande d’une image acquise en niveau de gris en
utilisant la transformée de Fourier. Proposer des fréquences de coupures adéquates. Comparer les
résultats à ceux obtenus avec des noyaux de convolution.
Exercices
1- Charger les figures: spine.tif et trees.tif. Faites les transformées de Fourier de chaque image.
Les reconstruire utilisant la TF inverse
2- Tracer une image contenant un rectangle. Faire la TF de cette image. Faire tourner cette
image (fonction « imrotate »). Refaire sa TF et conclure.
3- Faire la TF d’une image couleur ‘peppers.tif’. Pour cela, on fera la TF de chaque image
correspondante a chaque couleur.
4- Réaliser le filtrage passe-bas, passe-haut puis passe-bande d’une image acquise en niveau de
gris en utilisant la transformée de Fourier. Proposer des fréquences de coupures adéquates.
Comparer les résultats à ceux obtenus avec des noyaux de convolution
62
CHAPITRE 5
DETECTION DES CONTOURS
5.1.1- Définiton
Un contour est une variation brusque d'intensité. C’est la frontière qui sépare deux objets dans une
image. Dans notre cas, nous détecterons toutes les lignes marquant des changements d’intensité
63
Contour avec un peu de bruit…
64
5.1.4- dérivée et contours
La première dérivée de l'image est l'opérateur de base pour mesurer les contours dans l'image
65
5.2. FILTRES POUR LA DETECTION 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.
Application Matlab
La fonction utilisée sous Matlab pour la détection des contours est « edge » qui prend en paramètre
l’image dont on veut filtrer et la méthode de filtrage utilisé.
Exemple : edge(’lena.tiff’, ‘sobel’) permet d’appliquer le filtre de sobel sur l’image ‘lena.tiff ‘
Manipulation 43
Exécuter et tester la démo « edgedemo » qui utilise principalement la fonction edge.
Manipulation 44
Appliquer le filtre de robert sur l’image « church.tiff » et afficher le résultat
−1 0 1 1 −1 −1 −1 −1
(−1 0 1) = (1) ∗ (−1 0 1) (0 0 0 ) = ( 0 ) ∗ (1 1 1)
−1 0 1 1 1 1 1 1
66
Manipulation 45
Appliquer le filtre de Prewitt sur l’image « church.tiff »et afficher le résultat
−1 0 1 1 −1 −2 −1 −1
(−2 0 2) = (2) ∗ (−1 0 1) (0 0 0 ) = ( 0 ) ∗ (1 2 1)
−1 0 1 1 1 2 1 1
Filtre de Sobel : Gaussienne + Dérivée
Manipulation 46
Appliquer le filtre de Sobel sur l’image « church.tiff » et afficher le résultat
67
5.2.4- Gradient de l’image
En 2 dimensions, nous parlons de gradient de l’image, la dérivée en X + dérivée en Y de cette
image. C’est un vecteur ayant une norme et une direction
Les lignes bleues représentent le gradient de couleur du plus clair vers le plus foncé
68
Seuillage du gradient
Manipulation 47
Appliquer le filtre de Sobel sur l’image « church.tiff » avec un seuil de 0,03 puis avec un seuil de
0,06. Afficher et commenter les résultats.
𝜕𝐼 𝜕𝐼
∇2 𝐼 = +
𝜕𝑥 2 𝜕𝑦 2
69
Exemple avec un contour « rampe »
70
Laplacien par convolution
0 1 0 1 1 1
[1 −4 1] ou [1 −8 1]
0 1 0 1 1 1
71
Manipulation 48
Appliquer le filtre de Laplace sur l’image « church.tiff »et afficher le résultat
Mise en œuvre
La mise en œuvre du filtrage de Canny se fait en trois étapes :
1) Réduction du bruit
La première étape est de réduire le bruit de l'image originale avant d'en détecter les contours.
Ceci permet d'éliminer les pixels isolés qui pourraient induire de fortes réponses lors du
calcul du gradient, conduisant ainsi à de faux positifs.
Un filtrage gaussien 2D est utilisé (voir Lissage de l'image), dont voici l'opérateur de
𝑥2 +𝑦2
1 −
convolution : 𝐺(𝑥, 𝑦) = 2𝜋𝜎2 𝑒 2𝜎2
2 4 5 4 2
4 9 12 9 4
1
et un exemple de masque 5×5 discret avec σ=1,4 est ℎ = 159 5 12 15 12 5
4 9 12 9 4
[2 4 5 4 2]
2) Gradient d'intensité
Après le filtrage, l'étape suivante est d'appliquer un gradient qui retourne l'intensité des contours.
L'opérateur utilisé permet de calculer le gradient suivant les directions X et Y, il est composé d'une
paire de deux masques de convolution, un de dimension 3×1 et l'autre 1×3: 𝐺𝑥 = [−1 0 1] et
1
𝐺𝑦 = [ 0 ]
−1
La valeur du gradient en un point est approximée par la formule : |𝐺| = |𝐺𝑥 | + |𝐺𝑥 |
𝐺𝑦
Les orientations des contours sont déterminées par la formule : 𝜃 = 𝑎𝑟𝑐𝑡𝑎𝑛 (𝐺 )
𝑥
Nous obtenons finalement une carte des gradients d'intensité en chaque point de l'image
accompagnée des directions des contours.
72
Manipulation 49
Appliquer le filtre de Canny sur l’image « church.tiff »et afficher le résultat
Aucun opérateur n'est parfait pour détecter les contours. En pratique, on obtient des contours
incomplets
Un opérateur de détection de contour n'est qu'une première étape dans la chaîne de segmentation
Transformée de Hough
Approche globale pour détecter des contours continus : Du plan x-y au plan paramétrique a-b
Plan x-y
– yi = a xi + b
– Une infinité de lignes passent par (xi, yi)
– Une seule ligne pour la paire (a,b)
Plan paramétrique a-b
– b = - xi a + yi
– Une seule ligne pour la paire (xi, yi)
– Une infinité de lignes passent par (a,b)
73
Droites vs Points
Tous les points (x,y) sur une ligne du plan x-y passent par un seul point (a’, b’) dans le plan
paramétrique a-b
74
Calcul de la transformée de Hough
Avec Matlab
Manipulation 50
Donner et expliquez la syntaxe de la fonction « hough » avec ses paramètres
Manipulation 51
Calculer et afficher la transformée de Hough de l’image « apple.gif » et afficher le résultat
75
Exemple avec 5 points
Autres exemples
76
La transformée de points alignés permet de retrouver la droite
Exemples
77
Exercices
1- Pour détecter un contour, on utilise la fonction «edge.m ». Cette fonction utilise plusieurs
méthodes (masques) : Sobel, prewitt, roberts, laplacien, zero crossing et canny. Appliquer
cette méthode pour détecter le contour de l’image binaire « circles.tif » et de l’image gris
« rice.tif ».
2- Acquérir une image en niveau de gris de taille 1280 × 960 et filtrer cette image en utilisant
un filtre de Prewitt horizontal. Comparer les résultats obtenus avec les fonctions « imfilter »,
« filter2 » et « conv2 »
3- Filtrer l’image précédente en utilisant le filtre de Prewitt horizontal opposé. Comparer les
résultats obtenus avec les précédents en utilisant les fonctions imfiilter, filter2 et conv2..
78
CHAPITRE 6
Segmentation
6.1.1- Définition
La segmentation vise à diviser l’image en morceaux. Ces morceaux correspondent aux objets dans
l’image. La segmentation est liée à la reconnaissance (Quels objets voit-on dans l’image ?)
79
6.1.3- Utilité d’un masque de segmentation
Les masques (des objets) permettront d’interpréter le contenu de l’image : On traite chaque zone de
l’image (masques) séparément
La segmentation est le découpage d'une image en différentes régions et/ou contours. Un contour
fermé est équivalent à une région
Approches régions : Rechercher les zones dans l’image sur un critère d’homogénéité
Approches contours : Rechercher les discontinuités entre régions
Approches duales (régions et contours)
6.2- SEUILLAGE
6.2.1- Définition
80
Le seuillage est une méthode simple et très populaire pour le traitement des images numériques. Ce
n’est pas une méthode de segmentation en régions. C’est une Approche pixel (pas région ni
contour), mais on l’utilise souvent en segmentation (avec post-traitements)
Le résultat du seuillage est une image binaire : 0 ou 1 (qu’on transforme parfois en 0:255 pour
l’affichage)
Manipulation 52
Ouvrir l’image « saturn.tif » y appliquer un seuil de 0,5 et afficher le résultat
1𝑠𝑖𝑓(𝑥, 𝑦) ≥ 𝑇
𝑔(𝑥, 𝑦) = {
𝑂𝑠𝑖𝑓(𝑥, 𝑦) < 𝑇
81
Avantages
Inconvénients
b) Multi-seuils
82
c) Comment définir le seuil ?
L’histogramme d’une image est une fonction donnant, par exemple, le nombre de pixels à un
niveau de gris particulier en fonction du niveau de gris.
Un histogramme peut-être vu comme une fonction de densité de probabilité discrète pour une
image individuelle dans le sens suivant : Chaque essai pour l’expérience de probabilité est la
sélection d’un pixel au hasard à partir de l’image, et l’événement mesuré est le niveau de gris du
pixel choisi.
Quand la fonction de densité de probabilité mesurée pour chaque niveau de gris est multipliée par
le nombre de pixels dans l’image, les valeurs obtenues sont celles de l’histogramme.
Une fois que l’histogramme d’une image est connu, les niveaux de gris de l’image peuvent être
manipulés pour changer l’histogramme de la manière souhaité. On peut par exemple souhaiter
améliorer le contraste, changer le niveau de brillance ou faire correspondre l’histogramme à celui
d’une autre image. On rappelle que toute technique de modification de niveaux de gris, dont la
modification d’histogramme est un exemple, est basée sur la création d’une correspondance («
mapping » en anglais) entre les niveaux de gris de l’image originale et les niveaux de gris
correspondant dans l’image modifiée.
Dans des applications limitées, l’analyse d’histogramme pour déterminer des seuils a aussi été
utilisée. L’histogramme est calculé pour les valeurs d’intensité de l’image et analysé pour
déterminer l’établissement d’un seuil permettant de séparer un objet du fond. Souvent les objets,
cellules, chromosomes, …, sont tels qu’ils ont des valeurs caractéristiques très différentes de celles
du fond. Ce type d’analyse est applicable dans ces cas plus généraux qu’un initialement envisagée.
83
On doit décrire en fait une équation de type ng = f(x, y) pour obtenir en fait le niveau de gris d’un
pixel par rapport à ses coordonnées dans l’image.
En traitement d’image on va donc utiliser un élément structurant sous forme de matrice (voir
chapitre sur la binairisation).
En effet dans la suite de notre travail il nous est demandée d'appliquer une nouvelle méthode de
seuillage beaucoup plus efficace puisque adaptative. Cette méthode est censée pouvoir s'adapter aux
différentes caractéristiques d'une image ( sa luminance, son intensité, les classes d'objets qu'elle
contient, etc....).
a) Algorithme de Otsu
Nous allons voir maintenant l'algorithme de séparation de l'image en deux classes distinctes. On va
voir donc comment est déterminé le seuil. La séparation se fait à partir des moments de premier
ordre, c'est-à-dire la moyenne et l'écart-type.
La méthode nécessite une normalisation de l'histogramme pour que la méthode soit indépendante du
nombre de pixel dans l'image.
Moyennes : μ1 et μ2
84
Algorithme de la méthode
for j = 1:256
w(j) = 0;
mu(j) = 0;
pi1(j) = Y1(j)/(largeur*hauteur); %Normalisation des valeurs de l'histogramme
end
w(1) = pi1(1);
mu(1) = pi1(1);
for k = 2:256
w(k) = w(k-1) + pi1(k);
mu(k) = mu(k-1) + k * pi1(k);
end
for l = 1:256
s2(l)=w(l) * (1-w(l)) * (mu(256) * w(l) - mu(l))^2;
end
max = 0
%Boucle de détermination du seuil
for m = 1:256
if s2(m)>max
max = s2(m);
% Détermination du seuil
85
seuil = m;
end
end
Exemple
Manipulation 53
Utiliser la fonction « graythresh » correspondant à l’algorithme de Otsu sous Matlab pour
déterminer le seuil de l’image « clock.tif » puis la segmenter.
86
Problème : Le seuillage global ne peut traiter ce cas
– Nous avons besoin de séparer l'image en sous images, et de traiter chacune avec son propre
seuil
– Le choix de la dimension des sous-images est important
– Avant de traiter chaque sous-image, nous vérifions la variance des tons de gris pour décider
s'il existe un besoin de segmentation : Exemple : pas besoin si variance<100
– On divise l’image en sous-images
– On seuille chaque sous-image indépendamment
– Les 4 sous images de coins ne sont pas traitées car variance<100
87
b) Algorithme des k-moyennes (K-means)
On veut diviser les points en k groupes (clusters). k est donné à l’avance (un paramètre de
l’algorithme). On définit le centre d’un groupe comme la moyenne des éléments (pixels) du groupe
89
6.3- SEGMENTATION EN PIXELS / REGIONS
Le seuillage est une opération sur les pixels : ne produit pas forcément des régions connexes !
On peut utiliser le seuillage pour les régions, mais il fau« nettoyer » les résultats obtenus : éliminer
les pixels seuls, conserver les régions
90
Phase 1 : Créer les zones homogènes = DIVISION (split)
Etape de division
–
L’algorithme poursuit tant qu’il reste des feuilles non homogènes à diviser
Etape de fusion
Exemples de division-fusion
91
6.3.2- Croissance de régions (Region growing)
On débute avec un pixel, et on « ajouter » les pixels voisins qui répondent à un critère
d'appartenance :
– Variance faible
– Niveau de gris répondant un seuil
– …
Les pixels initiaux sont appelés « germes », « amorces » ou « semences ». Le choix des pixels
initiaux automatiques ou semi-automatiques
La région « grandit » à partir de son germe, on a donc besoin d’une critère (ou prédicat) pour choisir
les pixels à ajouter
On part d’un germe (seed) et on l’étend en ajoutant les pixels voisins qui satisfont le critère
d’homogénéité
Le germe peut être choisi soit par un humain, soit de manière automatique en évitant les zones de
fort contraste (gradient important)
92
6.4- LIGNE DE PARTAGE DES EAUX (WATERSHED)
On considère la visualisation de l'image en 3D, en utilisant le ton de gris comme troisième
dimension
93
Enfin, on "infiltre" les cavités des zones inondables
94
6.5- APPROCHE GESTALT
Une autre approche de la segmentation/groupement s’inspire de la psychologie et de l’observation
de l'humain et de son environnement. Cette approche est basée sur les travaux de Gestalt sur la
vision humaine
95
Questions sur l’approche Gestalt :
CONCLUSION
Dans toutes les méthodes, il y a des paramètres !: Rien d’universel, il faut tester, au cas par cas
Seuil
Soit on donne une valeur constante
Soit on donne une valeur relative (%, moyenne, ou …)
Soit on donne un algorithme pour trouver le seuil
Critère/prédicat
Fonction : constante, relative ou autre
Dynamique : évolue au fur et à mesure
Par rapport à la région : Niveau de gris, couleurs, gradient, …, Moyenne, variance, max/min
Segmentation – conseils
96
La segmentation aide beaucoup pour la reconnaissance, mais elle n’est pas obligatoire dans tous
les cas
Evaluer le résultat d'une segmentation n'est pas facile
Il dépend de l’application
Il dépend de ce qu’on veut
Il est subjectif et varie d'une personne à l'autre
Un des principaux problèmes est de définir le but de la segmentation : Qu'est-ce qu'on
recherche exactement dans l'image ?
Eléments globaux de l'image ou détails fin de la composition ?
Présence d'un humain ou détails du visage ?
Il faut toujours se poser la question de ce que l'on veut faire avec la segmentation. Cela permet
de définir le degré de précision nécessaire
Limites de la segmentation…
EXERCICES
97
2- L'image ci-contre montre des traces grises.
On peut les supprimer à l'aide de la
procédure suivante : les nuances de gris pâle
sont remplacées par du blanc. Faire cet
exercice en utilisant Matlab
3- L’on désire représenter une image sur 4 niveau de gris (N = 4), ce qui signifie un affichage 4
niveaux (notés 0, 1, 2, 3).La correspondance entre les 256 niveaux et les 4 niveaux d'affichage
peut être établie simplement : on partage la plage 0-255 en 4 intervalles de même longueur : 0-
63, 64-127, 128-191, 192-255. Aux niveaux de couleur allant de 0 à 63 inclus, on fera
correspondre le niveau 0 d'affichage; aux niveaux 64 à 127 inclus, on fera correspondre le
niveau 1 d'affichage ; etc.... On désignera dans ce qui suit par I(x,y) le niveau du pixel (x,y).
Ecrire un programme Matlab permettant de correspondre 256 vers les 4 couleurs.
98
CHAPITRE 7
LES IMAGES BINAIRES
7.1- DEFINITION
Une image binaire est une image dont la valeur des pixels est codée soit en 0, soit en 1. Autrement
dit, I(x, y) 𝜖 (0,1). Visuellement, le résultat est une image composée de deux couleurs uniquement.
Les images binaires sont dans la pratique utilisées pour la segmentation d’images. A l’aide
d’opérateurs morphologiques, il est possible de nettoyer le résultat de la segmentation, remplir les
trous, éliminer le bruit, lisser le résultat de la segmentation. Les principaux opérateurs
morphologiques sont :
Erosion : si un pixel du masque est fond (valeur 0) alors le pixel central devient fond.
Dilatation : si un des pixels du masque fait partie de l’objet (valeur > 0) alors le pixel central
devient objet.
Ouverture : érosion puis dilatation.
Dilatation puis érosion.
Manipulation 54
Ouvrez l’image « boat.jpg ». Binariser-là avec « im2bw » en choisissant un seuil manuel d’après
l’histogramme ou grâce à la fonction graythresh
La forme peut représenter plusieurs objets (notion de composante connexe); certaines composantes
du fond peuvent représenter des trous dans les objets.
7.2.2- Segment
On appelle segment de l'image I, le quadruplet :
g : gauche de s
d : droite de s
l : ligne de s
v : valeur de s
Bien sûr, cette décomposition de l'image en segments n'est pas unique car elle privilégie une
analyse ligne à ligne. Une analyse colonne à colonne est tout aussi envisageable. Les éléments du
quadruplet porteraient alors les noms haut, bas, colonne et valeur.
7.2.3- Connexité
On appelle relation de connexité et l'on note C0(s,s'), la relation définie sur S de la manière
suivante:
C0(s,s') ⇔ s dans S(i,x) et s' dans S(i-1,x) et g(s') < d(s)+1 ou g(s) < d(s')+1.
On dit alors que s est connecté avec s' ou que s et s' sont connexes.
C0(s,s') ⇔ C0(s',s)
La décomposition ligne à ligne est donc indépendante du choix de la ligne de départ. On note C0* la
fermeture transitive de C0. La figure ci-dessous illustre cette relation de connexité entre les
segments.
100
7.2.4- Distance
Tout pixel d'une image est caractérisé par un couple de coordonnées (x,y). On peut donc calculer
des distances entre pixels. Les distances les plus courantes sont (pour deux pixels P(xp,yp) et
Q(xq,yq)):
2 2
Distance Euclidienne : 𝑑2 (𝑃, 𝑄) = √(𝑥𝑝 − 𝑥𝑞 ) + (𝑦𝑝 − 𝑦𝑞 )
Distance de l'Echiquier : dinf(P,Q)=Max(|xp - xq| , |yp - yq|)
Ex: dinf ≤ 2 2 1 1 1 2
2 1 0 1 2
2 1 1 1 2
2 2 2 2 2
Ces distances sont reliées par la propriété : dinf(P,Q) ≤ d2(P,Q) ≤ d1(P,Q)
Il existe des distances pour tous les éléments d'une image. Pour les distances entre pixels, nous
reporterons donc aux définitions précédentes. On notera par la suite d(p,q) la distance entre deux
pixels.
Par extension, on définit le voisinage de tout composant A de I par l'union de tous les voisinages
des pixels de A.
101
La notion de connexité dérive de la notion de voisinage. Il existe principalement deux ordres de
connexité : 4 et 8. Ce nombre correspond à la taille du plus petit voisinage non vide d'un pixel. Un
pixel a 4 voisins directs si l'on choisit la distance d1, il en a 8 avec la distance dinf
Conseils : Connexités différentes pour les contours et régions : Connexité-4 pour les régions et
Connexité-8 pour les contours
1
des essais ont été faits pour coder également les chaînes de Freeman sur 4 bits en ajoutant les directions reliant le
point central à la seconde couronne des voisins qui ne sont pas dans la direction des voisins de la première couronne.
Mais cette approche n’a pas eu un très grand succès.
102
2. transmission de la liste des codes de déplacement d’un point du contour au suivant sur le
maillage.
On peut ainsi coder les contours en partant d’un pixel (en haut à gauche) et en tournant dans le sens
des aiguilles d’une montre
103
7.3- ETIQUETAGE DES COMPOSANTES CONNEXES
Composante connexe = ensemble de pixels connexes (voisins) appartenant à une même entité.
L’étiquetage des composantes connexes est une étape essentielle dans un processus de
reconnaissance. L'image résultat étiquette les pixels des différentes composantes et définit une carte
des régions. Cette opération peut être assimilée à un remplissage ou un coloriage : On utilise
généralement la 4-connexité mais parfois la 8-connexité sur des formes "curviligne" (écriture, ...) .
On désire donner une valeur commune pour les pixels d'une région ou d'un contour
104
Deuxième parcours de l’image
105
Il est possible de ne faire qu’un seul parcours
Il existe d’autres algorithmes plus performants pour les contours qui sortent du cadre de ce cours.
106
7.5.2- Calcul et suivi du meilleur chemin dans le gradient
Au bout des contours, on cherche le chemin permettant de rejoindre une autre extrémité de contour :
Suivi du chemin de gradient le plus fort
107
- Un élément structurant
- Des transformations (érosion, dilatation, ouverture, fermeture)
Voici, à titre d'exemple, quatre éléments structurants, le point d'ancrage étant marqué par un point :
Soit (x,y) les coordonnées d'un pixel d'une image binaire X et M un élément structurant. Alors
M(x,y) représente l'ensemble des pixels noirs de X qui coïncident avec les pixels noirs de M lorsque
le point d'ancrage est superposé au pixel de coordonnées (x,y).
Avec Matlab
A création des éléments structurants sous Matlab se fait avec la fonction « strel »
Manipulation 55
- Faite « help strel » pour étudier les options de la fonction « strel »
- Créer des éléments structurants de plusieurs formes (carré, disk, …) et les afficher
a) Erosion
Définition : érosion
Soit une image binaire X et un élément structurant M. L'érosion de X par M est une image binaire
définie par EroM(X) = {(x,y) |M(x,y) ⊂X}
Illustration de l'érosion
L'image de droite est obtenue par érosion de l'image de gauche par le masque structurant en forme
108
Propriétés de l'érosion :
Exemples
Illustration de l'érosion d'une image binaire (à gauche) selon quatre éléments structurants différents
Avec Matlab
La fonction « imerode » permet réaliser l’opération d’érosion sur des images à niveaux de gris à
partir d’un élément structurant.
Manipulation 56
Appliquer une érosion sur l’image binaire « cailloux.bmp » en utilisant comme élément
structurant :
- Un carré de taille 3 x 3
- Un carré de taille de taille 5 x 5
- Un disque de taille 5 x 5
Commenter et comparer les résultats
Manipulation 57
Appliquer deux érosions consécutivement sur l’image binaire « nubleu.tif » en utilisant comme
élément structurant un carré de taille 3 × 3 pixels. Commenter et comparer les résultats.
b) Dilatation
Définition : dilatation
Soit une image binaire X et un élément structurant M. La dilatation de X par M est une image
binaire définie par DilM(X) = {(x,y) |M(x,y) ∩ X ≠∅}
Illustration de la dilatation
L'image de droite est obtenue par dilatation de l'image de gauche par le masque structurant en forme
de croix (au centre)
109
Propriétés de la dilatation :
Exemples
Illustration de la dilatation d'une image binaire (à gauche) selon quatre éléments structurants
différents
Avec Matlab
La fonction « imdilate » permet réaliser l’opération de dilatation sur des images à niveaux de gris à
partir d’un élément structurant.
Manipulation 58
Appliquer une dilatation sur l’image binaire « suzan.gif » en utilisant comme élément structurant :
- Un carré de taille 3 x 3
- N carré de taille de taille 5 x 5
- Un disque de taille 5 x 5
Commenter et comparer les résultats
Manipulation 59
Appliquer deux dilatations consécutivement sur l’image binaire « suzan.gif » en utilisant comme
élément structurant un carré de taille 3 × 3 pixels. Commenter et comparer les résultats.
L'érosion et la dilatation sont deux opérations duales par rapport aux complémentaires des
ensembles caractéristiques :
EroM(XC) = (DilM(X))C
110
DilM(XC) = (EroM(X))C
où XC représente le complémentaire de X.
X ⊂Y ⇒ EroM(X) ⊂EroM(Y)
X ⊂Y ⇒ DilM(X) ⊂DilM(Y)
si le point d'ancrage de l'élément structurant vaut 1, la dilatation est extensive et l'érosion est
anti-extensive :
si M[0,0]=1 alors X ⊂DilM(X)
si M[0,0]=1 alors EroM(X) ⊂X
les propriétés ensemblistes suivantes sont valables :
111
7.7.3- Ouverture et fermeture
a) Ouverture
Définition de l'ouverture
Soit une image binaire X et un élément structurant M. L'ouverture de X par M est une image binaire
définie par OuvM(X) = DilM-(EroM(X))
Illustration de l'ouverture
L'image de droite représente l'ouverture de l'image de gauche par un élément structurant en "L"; elle
est obtenue par la composition d'une érosion et d'une dilatation.
Effets de l’ouverture :
Manipulation 61
- ouvrir l’image « blood1.tif » et la binariser
- En utilisant les fonctions « imerode » et « imdilate », réaliser une ouverture sur l’image
binarisée. Comparer et commenter les résultats.
- Réaliser la même opération avec la fonction « imopen ». Que se passe-t-il lorsque cette
opération est répétée ou lorsque la taille ou la forme de l’élément structurant change ?
b) Fermeture
Définition de la fermeture
Soit une image binaire X et un élément structurant M. La fermeture de X par Mest une image
binaire définie par FerM(X) = EroM-(DilM(X))
Illustration de la fermeture
112
L'image de droite représente la fermeture de l'image de gauche par un élément structurant en "L";
elle est obtenue par la composition d'une dilatation et d'une érosion.
Effets de la fermeture :
Manipulation 62
- ouvrir l’image «blood1.tif» et la binariser
- En utilisant les fonctions « imerode » et « imdilate », réaliser une fermeture sur l’image
binarisée. Comparer et commenter les résultats.
- Réaliser la même opération avec la fonction « imclose ». Que se passe-t-il lorsque cette
opération est répétée ou lorsque la taille ou la forme de l’élément structurant change ?
L'ouverture et la fermeture sont deux opérations duales par rapport aux complémentaires des
ensembles caractéristiques:
OuvM(XC)=(FerM(X))C
FerM(XC)=(OuvM(X))C
où XC représente le complémentaire de X.
L'ouverture d'une image X par un élément structurant M est caractérisée par les propriétés
suivantes:
OuvM(X) ⊂X
X ⊂FerM(X)
l'ouverture et la fermeture sont monotones croissantes
X ⊂Y ⇒ OuvM(X) ⊂OuvM(Y)
X ⊂Y ⇒ FerM(X) ⊂FerM(Y)
l'ouverture et la fermeture sont idempotentes
OuvM(OuvM(X)) = OuvM(X)
113
FerM(FerM(X)) = FerM(X)
l'ouverture possède la caractéristique suivante :
OuvM(X) = ∪{ M(x,y) |M(x,y) ⊂X }
Manipulation 63
- Chargez l’image en niveaux de gris « clock.tiff ». Binarisez et inversez l’image.
- Faites la fermeture (imclose) de cette image binaire inverse. Définissez cette opération (cf. aide
Matlab). Pour générer l’ES vous pouvez utiliser la fonction strel.
- Effectuez l’ouverture (imopen) de l’image binaire précédente. Définissez cette opération.
7.8. APPLICATIONS
Les opérateurs morphologiques peuvent être utilisés dans plusieurs applications du traitement
d'image:
– l'élimination du bruit
– l'extraction de contours
– le remplissage de régions
– amincissement et épaississement
114
Filtre(X) = FerB4(OuvB4(X))
Exemple
Contour4(X) = X −EroB9(X)
Exemple
Contour8(X) = X −EroC5(X)
Exemple
115
7.8.5- Gradient
Gradient morphologique
116
7.9- AUTRES OPERATEURS MORPHOLOGIQUES
a) Définition
Soit une image X et un couple d'éléments structurants M=(M1,M0) avec la propriété M1 ∩M0 = ∅.
L'opérateur "tout ou rien" est défini de la manière suivante : ToRM (X) = EroM1 (X) ∩EroM0 (XC)
L’élément structurant étendu est centré sur chaque pixel de l'image comme pour les opérations
ensemblistes. La question posée est: est-ce que le contenu de l'image est identique au
contenu de l'élément structurant, sauf pour les positions marqué es comme indifférentes? Si la
réponse est oui, le pixel résultant vaut 1, sinon il vaut 0.
b) Utilisation
Il permet de détecter des configurations locales particulières dans une image. Plusieurs masques
peuvent être utilisés indépendamment, les images résultat étant ensuite combinées par une
opération OU.
c) Commentaire
L'opérateur "tout ou rien" permet de rechercher les points dont le voisinage est conforme à un
masque dans le sens que
d) Représentation
Nous représentons un couple d'éléments structurants M=(M1,M0) au moyen d'un masque ternaire:
– les pixels obligatoirement blancs (resp. noirs) sont blancs (resp. noirs);
– les pixels quelconques sont gris;
– le point d'ancrage est marqué par un point.
4 masques utilisés :
117
Exemples
7.9.2- Amincissement
Définition
Il consiste à soustraire l'image résultat d'un hit or miss de l'image initiale. L’amincissement est une
transformation anti extensive.
Soit une composante connexe X et un masque M dont le point d'ancrage vaut 1. L'amincissement
de X par M est défini par
Exemple
118
Image originale
7.9.3- Épaississement
Définition
Il consiste à calculer l'union de l'image résultat d'un hit or miss et de l'image initiale.
L’épaississement est une transformation extensive.
Soit une composante connexe X et un masque M dont le point d'ancrage vaut 0. L'épaississement
de X par M est défini par
EpM(X) = X ∪ToRM(X)
Exemple
119
7.9.4- Enveloppe convexe
Définition (cas continu)
Un ensemble X du plan est dit convexe si pour tout couple de points A,B ∈X , le segment AB
appartient aussi à X, c'est-à-dire:
∀α ∈[0,1] αA + (1-α)B ∈X
L'enveloppe convexe d'un ensemble X, notée Env(X) est définie comme l'intersection de tous les
ensembles convexes contenant X.
Commentaire
Une définition rigoureuse de l'enveloppe convexe discrète suppose une définition rigoureuse de
droite discrète. Nous nous contentons ici d'une définition intuitive fondée sur les caractéristiques
locales.
Construction
L'enveloppe convexe d'une composante connexe X peut être construite par un procédé itératif au
moyen des masques Mk (k=1 ,2 ,..., 12) suivants:
Algorithme
Soit X0 := X.
répéter pour i = 0, 1, 2, ...
Xi+1 := ToRM1(Xi) ∪ToRM2(Xi) ∪... ∪ToRM12(Xi) ∪Xi
jusqu'à ce que Xi+1 =Xi
Env(X) := Xi
Exemple
Voici une illustration de la construction de l'enveloppe convexe comprenant la composante initiale
X, les trois premières itération X1, X2, X3 et l'enveloppe convexe obtenue Env(X)
120
7.9.5- Squelette
Définition (cas continu)
Le squelette est l'ensemble des centres de toutes les boules incluses dans un objet touchant simulta-
nément deux bords de cet objet.
Soit X une forme connexe du plan. Le squelette de X noté Sq(X) est formé de l'ensemble des
centres des cercles inscrits maximaux, c'est-à-dire
Exemples
Problème
Il n'existe pas de définition satisfaisante dans le cas discret ! Néanmoins le squelette peut être
construit par un procédé itératif qui transforme une composante connexe X en une composante
filiforme ayant les mêmes caractéristiques topologiques.
Construction
Le squelette d'une composante connexe X peut être construit par un amincissement homotope
itératif au moyen des masques Mk (k=1 ,2 ,..., 8) suivants :
Algorithme
X0 := X.
répéter pour i = 0, 1, 2, ...
Xi+1 := AmM8(AmM7( ... (AmM2(AmM1(Xi)) ... ))
jusqu'à ce que Xi+1 =Xi
Sq(X) := X
Propriétés
- la squelettisation est une transformation idempotente.
121
- la squelettisation n'est pas une transformation continue.
par exemple: polygone régulier, à la limite devient un cercle.
Exemple
Voici une illustration de la construction du squelette d'une composante connexe comprenant la
composante initiale X, l'amincissement obtenu avec les masques M1 à M4, puis le résultat des deux
premières itérations X1 et enfin le squelette obtenu Sq(X)
La transformation en axe médian (TAM) est l'image de la fonction distance, ramené e à zéro pour
les points n'appartenant pas au squelette.
L'axe médian d'une composante connexe X, noté Méd(X) est l'ensemble des centres des carrées de
taille impaire maximale inscrits dans X
Exemple
Construction
L'axe médian d'une composante connexe X peut être construit par une itération d'érosions et de
dilatations au moyen de l'élément structurant M=B9 :
Algorithme
X0 := X.
122
répéter pour i = 1, 2, ...
Xi := EroM(Xi-1) ; Yi := Xi-1 −DilM−(Xi);
jusqu'à ce que Xi = ∅
Méd(X) := Y1 ∪Y2 ∪... ∪Yi
Exemple
Voici une illustration de la construction de l'axe médian contenant la composante connexe X, puis
les ensembles Y1, Y2, Y3, Y4 obtenus selon l'algorithme et enfin l'axe médian Méd(X) = Y1 ∪Y2
∪Y3 ∪Y4
Commentaire
La construction de l'axe médian est réversible : X peut être reconstruit à partir de Méd(X) = Y1 ∪Y2
∪... ∪Yi par un procédé itératif fondé sur la propriété
Algorithme
Exemple
Voici une illustration de la reconstruction de X à partir de son axe médian contenant les dilatations
successives des ensembles Yi et leur réunion.
123
EXERCICES
1- Charger l'image text.tif de la toolbox Matlab
a) Faire une érosion par une ligne de 4 pixels
b) Faire une dilatation par une ligne de 4 pixels
c) Faire une ouverture par un carré 3x3 (imerode +imdilate ou imopen)
d) Faire une fermeture par le même carrée (imdilate+imerode ou imclose)
2-
a) Chargez l’image CIRCUIT.TIF et ajoutez lui du bruit avec la fonction
« randn ». Cette fonction permet de générer une matrice d’un bruit gaussien N(0, 1)
que vous pouvez amplifier et à ajouter à votre image originale
Remarques :
- les dimensions de la matrice du bruit et de l’image originale doivent être les mêmes ;
- pensez à convertir vos données pour les opérations effectuées (fonctions double et
uint8).
b) Binarisez l’image originale et l’image bruitée, puis comparez-les.
c) Choisissez un élément structurant symétrique. Faites l’érosion puis la dilatation
de l’image binaire bruitée. La composée de ces deux fonctions s’appelle
l’ouverture de l’image. Quel est l’intérêt ?
d) Que ce passe t-il si, cette fois, l’élément structurant n’est pas symétrique ? Proposez
et testez une méthode qui garantisse alors, la reconstruction des objets à l’identique.
Une piste : il faut penser à faire l’érosion et la dilatation avec un élément structurant
différent.
3-
a) Ouvrez l’image « elaine.tiff ». Binariser-là avec « im2bw » en choisissant un seuil
manuel d’après l’histogramme ou grâce à la fonction graythresh. Pour les fonctions
124
de Matlab, le fond doit être noir. On peut inverser une image grâce à l’opérateur.
Ensuite, utilisez la fonction « imerode » avec l’élément structurant de base SE1.
Vous pouvez ensuite tester les autres éléments structurants et observer l’impact de la
taille et de la forme de ce-dernier sur le résultat.
b) Réalisez les mêmes opérations avec la fonction « imdilate ».
c) Comparez l’érosion du fond de cette image avec la dilatation des formes de cette
même image. Concluez.
4- Ouvrez l’image « pearlite_nb.bmp ». Binarisez-là comme dans l’exercice précédent.
Réalisez une ouverture puis une fermeture sur cette image. Vous utiliserez la fonction
« strel » pour générer un élément structurant de type circulaire de rayon 6.
7- La fonction « imclearborder » est une fonction morphologique qui permet de supprimer des
régions qui sont au contact des bords de l’image binaire. La fonction « bwareaopen » permet
de supprimer des régions de trop petites tailles dans une image binaire. La fonction
« imfill » est une fonction morphologique qui permet de combler les ”trous” dans les régions
d’une image binaire.
En utilisant ces trois fonctions, traiter l’image acquise et binarisée afin d’obtenir une image
dans laquelle les formes correspondent au mieux aux objets de la scène réelle. Utiliser
d’autres fonctions morphologiques si nécessaire.
125