0% ont trouvé ce document utile (0 vote)
62 vues126 pages

Introduction à l'Image Numérique et Traitement avec Matlab

Le document présente une introduction au traitement d'image, définissant les images numériques, leurs types (binaires, niveaux de gris, couleurs) et les méthodes d'acquisition et de stockage. Il aborde également le traitement d'image, l'échantillonnage, la quantification et leur impact sur la qualité de l'image. Enfin, il décrit les formats d'image et les manipulations possibles avec Matlab pour illustrer ces concepts.

Transféré par

sergedjiomo01
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
62 vues126 pages

Introduction à l'Image Numérique et Traitement avec Matlab

Le document présente une introduction au traitement d'image, définissant les images numériques, leurs types (binaires, niveaux de gris, couleurs) et les méthodes d'acquisition et de stockage. Il aborde également le traitement d'image, l'échantillonnage, la quantification et leur impact sur la qualité de l'image. Enfin, il décrit les formats d'image et les manipulations possibles avec Matlab pour illustrer ces concepts.

Transféré par

sergedjiomo01
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

CHAPITRE 1

INTRODUCTION AU TRAITEMENT D’IMAGE

1.1- QU’EST-CE QU’UNE IMAGE NUMERIQUE ?

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.

Figure 1.1 : Représentation matricielle d’une image


0
Application avec Matlab

NB : La version de Matlab utilisée dans ce cours est la version 6.5.1 et plus.


Les principales fonctions de traitement d’images sous Matlab se trouvent dans la boîte à
outils (toolbox) image processing (traitement d’images). L’aide sur cette boîte à outils est
obtenue en tapant help images en ligne de commande de Matlab. Ensuite, l'aide sur une
commande particulière est obtenue en tapant help suivi du nom de la commande, par exemple
help edge.
La lecture se fait à l’aide de la fonction « imread ». L’affichage d’une image se fait à l’aide des
fonctions « image » et « imshow »

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

L’onglet « Workspace » de la fenêtre principale Matlab permet de visualiser les caractéristiques


des images en cours de manipulation

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

Il existe trois principaux types d’image :

a) Les images binaires (noir ou blanc)


Une image binaire est une image MxN où chaque point peut prendre uniquement la valeur 0
ou 1. Les pixels sont noirs (0) ou blancs (1). Le niveau de gris est codé sur un bit (Binary digIT). La
relation sur les niveaux de gris devient: I(i, j) = 0 ou I(i,i) = 1.

b) Les images en niveau de gris


En général, les images en niveaux de gris renferment 256 teintes de gris. Image à 256 couleurs,
simplement chacune de ces 256 couleurs est définie dans la gamme des gris. Par convention la
valeur zéro représente le noir (intensité lumineuse nulle) et la valeur255 le blanc (intensité
lumineuse maximale).

c) Les images couleurs


S’il existe plusieurs modes de représentation de la couleur, le plus utilisé pour le maniement des
images numériques est l’espace couleur Rouge, Vert, Bleu (R,V,B). Cet espace couleur est base sur
la synthèse additive des couleurs, c’est à dire que le mélange des trois composantes (R, V, B) donne
une couleur.

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.

d) Autres espaces de couleur

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

1.1.3- Acquisition d’image


L’acquisition d’une image dans le monde réels peut se faire à l’aide à l’aide des cameras qui
contiennent des capteurs permettant de convertir l’image réels obtenu en image numérique.

 Principe général des capteurs (ex: photodiode)


 L'énergie incidente est convertie en signal électrique
 Sortie est proportionnelle à la lumière
 Filtre pour augmenter la sélectivité

 Caméras numériques CCD


 Matrice CCD (Charged Coupled Devices)
 Système d'acquisition numérique 2D le plus utilisé
 La réponse est proportionnelle à l'intégrale de l'énergie lumineuse qui atteint chaque
élément
 Pour la couleur, on utilise trois capteurs par pixel réagissant à des longueurs d'ondes
différentes (rouge, vert et bleu)

Le schéma ci-dessous présente le principe général de traitement d’une image

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

a) Formats sans compression


 Les formats les plus simples sont les images sans compression. Les pixels sont codés
directement, les uns à la suite des autres
 Nous utiliserons ici principalement :
 PGM : images en niveaux de gris 8 bits
 PPM : images en couleurs Rouge-Vert-Bleu 24 bits
Ils sont utiles comme formats d'entrée et sortie des traitements que nous ferons sur les images

b) Formats avec compression


 Les pixels sont compressés pour que le fichier soit plus petit sur le disque
 Compression sans perte : Fichier compressé sans modification de la valeur des pixels.
Exemple : PNG
 Compression avec perte : Valeurs des pixels modifiées pour prendre encore moins de
place après la compression. Exemple : JPEG
6
 JPEG est très bien pour visualiser les images (vision humaine) mais très mauvais pour le
traitement d'images, car on perd beaucoup d'informations
 Les images d'entrée peuvent être en JPEG
 Eviter autant que possible de sauvegarder les résultats en JPEG
 TIFF : format multi-usage avec/sans compression
 Autres :
 BMP : format couleurs 24 bits sans compression
 GIF : format couleurs 8 bits avec compression
 Encore beaucoup d'autres formats...

Application avec Matlab


Matlab autorise l'exportation d'images sous divers formats: BMP, TIFF, EPS, PS... La
commande qui permet da sauvegarder une figure est « print -dFORMAT fichier ». Un
exemple est donné ci-dessous. On peut aussi utiliser la fonction « imwrite » pour sauvegarder
l’image sous un autre format.

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- QU’EST CE QUE LE TRAITEMENT D’IMAGE ?

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 ).

1.3.2- Echantillonnage et information


L'échantillonnage est une étape fondamentale qui doit tenir compte du contenu
informationnel pertinent de l'image à analyser. Sur l'exemple ci-dessous, en 1d, le signal
échantillonné « ressemble » à une sinusoïde de fréquence 8 fois plus faible :

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

La quantification peut également faire apparaître des distorsions


dans les images :

Comme pour l'échantillonnage, il existe des règles pour déterminer la


bonne quantification (le bon nombre de bits) pour coder les images
numériques. L'une dépend du capteur, et de sa capacité effective à
observer des signaux de valeurs différentes : le rapport signal sur
bruit. Le rapport signal sur bruit est défini à partir du rapport entre l'amplitude des niveaux de gris
mesurables par le capteur (nmax - nmin) et le niveau du bruit, en gros l'écart-type sn de la

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.

1.3.4- Entropie et information

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).

𝐸 = ∑ −𝑝𝑖 𝑙𝑜𝑔2 (𝑝𝑖 )


𝑖≤𝑁

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.

Exercices sur le chapitre 1

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- HISTOGRAMME D’UNE IMAGE

2.1.1- Définition

Un histogramme est un graphique statistique permettant de représenter le nombre de pixels pour


chaque intensité lumineuse. Par convention un histogramme représente le niveau d'intensité en
abscisse en allant du plus foncé (à gauche) au plus clair (à droite). L'histogramme d'une image
donne la répartition de ses niveaux de gris. Ainsi pour une image qui possède 256 niveaux de
gris, l'histogramme représente le niveau de gris en fonction du nombre de pixels à ce niveau de gris
dans l'image.

Fig ; Visualisation de l’histogramme d’une image

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

La fonction « imhist » permet le calcul et l’affichage de l’histogramme d’une image. En exploitant


cet histogramme plusieurs opérations sont possibles en utilisant les fonctions suivantes :

• imadjust : recadrage de la dynamique selon une correction gamma,


• histeq : égalisation et spécification d’histogrammes,

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- CONTRASTE D'UNE IMAGE

2.3.1- Définition

Le contraste peut être défini de plusieurs façons :

 Ecart-type des variations des niveaux de gris

𝑁−1 𝑀−1
1
𝐶=√ ∑ ∑ (𝑓(𝑥, 𝑦) − 𝑀𝑜𝑦)2
𝑀×𝑁
𝑥=0 𝑦=0

 Variation entre niveaux de gris min et max

18
max[𝑓(𝑥, 𝑦)] − min⁡[𝑓(𝑥, 𝑦)]
𝐶=
max[𝑓(𝑥, 𝑦)] + min⁡[𝑓(𝑥, 𝑦)]

Les deux images suivantes possèdent un contraste différent :

Exemples de contrastes d’une image

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

Plusieurs méthodes possibles pour améliorer le contraste d’une image:

 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

b) Transformation linéaire avec saturation

255
I′ (i, j) = (I(i, j) − Smin
Smax − Smin

I′ (i, j) ≤ 0 ⟹ I′ (i, j) = 0

I′ (i, j) ≥ 255 ⟹ I′ (i, j) = 255

min⁡(I(i, j)) ≤ Smin < Smax ≤ max⁡(I(i, j))

21
c) Transformation linéaire par morceaux

Exemple d’une fonction ad-hoc de modification du contraste de l’image.

22
d) Transformation non-linéaire

Exemple : correlation gamma (g)


1
1 1
Iémise = k. nγ ⇒ n′ = n γ ⁡⁡⁡⁡⁡⁡⁡⁡ ⁡𝛾é𝑐𝑟𝑎𝑛 ∈ [1.3, 3.0] 𝛾𝑜𝑒𝑖𝑙 ≈ 2 à 3

e) Egalisation de l'histogramme

23
Pour améliorer le contraste, on cherche à aplanir l’histogramme

 Etape 1 : Calcul de l'histogramme ℎ⁡(𝑖)⁡ ⁡⁡⁡⁡⁡⁡𝑖 ∈ [⁡0, 255]


 Etape 2 : Normalisation de l'histogramme (Nbp : nombre de pixels de l‘image) ℎ𝑛 ⁡(𝑖) ⁡ =
⁡ℎ(𝑖)
⁡⁡⁡⁡⁡⁡⁡𝑖 ∈ [⁡0, 255]
𝑁𝑏𝑝
 Etape 3 : Densité de probabilité normalisée 𝐶⁡(𝑖) = ⁡ ∑𝑖𝑗=0 ℎ𝑛 (𝑗) ⁡⁡⁡𝑖 ∈ [⁡0, 255]
 Etape 4 : Transformation des niveaux de gris de l'image 𝑓⁡′⁡ (𝑥⁡, 𝑦⁡) =
𝐶⁡(⁡𝑓⁡ (⁡𝑥⁡, 𝑦))⁡ ⁡ × ⁡255

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.

En prenant une fenetre 7 x 7 autour de chaque pixel, on obtient l’égalisation locale de


l’histogramme.

Avec Matlab

L’égalisation de l’histogramme se fait à l’aide de la fonction « histeq(image) »

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

2.4.1- Opérations logiques

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 »

2.4.2- Opérations arithmétiques

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.

L’addition d’images peut permettre

 De diminuer le bruit d’une vue dans une série d’images


 D’augmenter la luminance en additionnant une image avec elle-même

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

On peut définir la soustraction Spixel à pixel de deux images f et g par :


S(x,y) = Max( f(x,y)-g(x,y) ; 0 )
La soustraction d’images peut permettre
 Détection de défauts
 Détection de mouvements

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

La multiplication S d’une image f par un ratio (facteur) peut se définir par :


S(x,y) = Max( f(x,y)*ratio ; 255)
La multiplication d’images peut permettre d’améliorer le contraste ou la luminosité
Sous Matlab
La multiplication de deux image (ou d’une image et d’un scalaire) se fait grace à la fonction
« immultiply »
Manipulation 30
Multiplier les images ‘rice.tif’ et ‘cameraman.tif’ et afficher et commenter le résultat.
(Attention ces images pourront ne pas avoir la même taille)

Récapitulatif des opérations arithmétiques

2.5- INTERPOLATION 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 :

- Interpolation du plus proche voisin


- Interpolation bilinéaire
- Interpolation bicubique

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.

2.5.2- Interpolation du plus proche voisin

Il s’obtient par simple recopie des pixels. On assigne à la valeur du pixel de sortie la valeur du pixel
ou le point correspond.

2.5.3- Interpolation bilinéaire

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

Pour le dernier point, on fait l’extrapolation linéaire de


2 × xN – xN − 1

30
2.5.3- Interpolation bicubique

Principe 1D

Le raisonnement est le même que dans l’interpolation bilinéaire, sauf que

( 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 :

 Deux extrapolations : x-1 = 3x0 – 3x1 + x2


o Une parabilique à distance 1 : xN = 3xN-1 – 3xN-2 + xN-3
o Une linéaire à distance 2 : xN+1 = 2xN – xN-1

Le facteur zoom peut être plus élevé, par exemple 3, ce qui donne pour une interpolation cubique :

yi+ 1/3= (− 5∗xi− 1+ 60∗xi+ 30∗xi+ 1− 4∗xi+ 2)/ 81

yi+2/3=(− 4∗xi− 1+ 30∗xi+ 60∗xi+ 1− 5∗xi+ 2)/ 81

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

3.1- MODIFICATION DES VALEURS D’UNE IMAGE

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- CONVOLUTION NUMERIQUE

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

Soit I une image numérique.

Soit h une fonction de [x1,x2]×[y1,y2] à valeurs réelles.

La convolution de I par H est définie par (𝐼 ∗ ℎ)[𝑥, 𝑦] =


∑𝑥𝑖=𝑥
2
1
∑𝑦𝑗=𝑦
2
1
ℎ[𝑖, 𝑗] ∙ 𝐼[𝑥 − 𝑖, 𝑦 − 𝑗]

La fonction h est dite Noyau de convolution ou masque de


convolution, ou filtre, fenetre...

Les nouvelles valeurs du pixel


sont calculées par produit scalaire entre le noyau de convolution et le voisinage correspondant
du pixel.

3.2.2- Quelques propriétés de convolution


Commutativité : ℎ ∗ 𝑔 = 𝑔 ∗ ℎ

Associativité : (ℎ ∗ 𝑔) ∗ 𝑘 = ℎ ∗ (𝑔 ∗ 𝑘) = ℎ ∗ 𝑔 ∗ 𝑘

Distributivité par rapport à l’addition : ℎ ∗ (𝑔 + 𝑘) = (ℎ ∗ 𝑔) + (ℎ ∗ 𝑘)

3.2.3- Exemple de convolution 2D

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 :
𝐼 ′ (𝑖, 𝑗) = 𝐼(𝑖, 𝑗) ∗ 𝑓𝑖𝑙𝑡𝑟𝑒(𝑖, 𝑗)

𝐼(𝑖 − 𝑢, 𝑗 − 𝑣) ∙ 𝑓𝑖𝑙𝑡𝑟𝑒(𝑢, 𝑣)
𝐼 ′ (𝑖, 𝑗) = ∑ ∑
𝑢 𝑣

R(1,1) = I(0,0) K(0,0) + I(1,0) K(1,0) + I(2,0) K(2,0)

+ I(0,1) K(0,1) + I(1,1) K(1,1) + I(2,1) K(2,1)

+ I(0,2) K(0,2) + I(1,2) K(1,2) + I(2,2) K(2,2)

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)

R(x,y) = I(x-1,y-1) K(0,0) + I(x, y-1) K(1,0) + I(x+1, y-1) K(2,0)

+ I(x-1,y) K(0,1) + I(x,y) K(1,1) + I(x+1,y) K(2,1)

+ I(x-1,y+1) K(0,2) + I(x,y+1) K(1,2) + I(x+1,y+1) K(2,2)

R(N-2,M-2) = I(N-3,M-3) K(0,0) + I(N-2,M-3) K(0,1) + I(N-1,M-3) K(0,3)

+ I(N-3,M-2) K(1,0) + I(N-2,M-2) K(1,1) + I(N-1,M-2) K(1,2)

+ I(N-3,M-1) K(2,0) + I(N-2,M-1 )K(2,1) + I(N-1,M-1) K(2,2)

Le problème se pose donc avec les bords. Plusieurs solutions


peuvent être adoptées :

- 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).

3.3- FILTRE LINEAIRE

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.

3.3.1- Filtrage dans le domaine fréquentiel


En identifiant les structures parasites ou inutiles à des composants fréquentielles des images
numériques, le filtrage peut se faire par sélection des dites composantes dans le domaine
fréquentiel : Ainsi le filtrage idéal consiste-t-il à multiplier la transformée de Fourrier F[u, v] par
une fonction qui vaut 1 si la composante fréquentielle est conservée, 0 si elle est supprimée. Par
exemple le filtre passe-bas idéal est défini comme suit :

(𝑢𝑀 ,𝑣𝑀 )
𝐹𝑙𝑝 [𝑢, 𝑣] = {𝐹[𝑢, 𝑣]⁡⁡𝑠𝑖⁡𝑢 ≤ 𝑢𝑀 ⁡𝑒𝑡⁡𝑣 ≤ ⁡ 𝑣𝑀
0⁡⁡⁡⁡⁡⁡⁡⁡⁡𝑠𝑖𝑛𝑜𝑛
De même le filtre coupe-bande idéal est défini comme suit :

(𝑢 ,𝑣𝑚 ,𝑢𝑀 ,𝑣𝑀 ) 0⁡⁡𝑠𝑖⁡𝑢𝑚 < 𝑢 < 𝑢𝑀 ⁡𝑒𝑡⁡𝑢𝑚 < ⁡𝑣 ≤ ⁡ 𝑣𝑀


𝐹𝑏𝑐 𝑚 [𝑢, 𝑣] = {
𝐹[𝑢, 𝑣]⁡⁡⁡⁡⁡⁡⁡⁡⁡𝑠𝑖𝑛𝑜𝑛

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

F(0,0) = ∑𝑤−1 ℎ−1


𝑥=0 ∑𝑦=0 𝑓[𝑥, 𝑦].

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.

Il existe plusieurs noyaux de convolution lisseurs, correspondant à des fonctions h symétriques, de


somme égale à 1. Chacune de ses fonctions est généralement associée à un paramètre, qui définit sa
portée spatiale, et par suite sa capacité de lissage.

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 :

𝑓(𝑥, 𝑦) ∗ 𝑔(𝑥, 𝑦) = 𝐹 −1 {𝐹(𝑓(𝑥, 𝑦)) ∙ 𝐹(𝑔(𝑥, 𝑦))}

Avec 𝐹(𝑔(𝑥, 𝑦)) = 𝐺(𝑢, 𝑣)

G est la fonction de transfert du filtre. On peut distinguer trois types de filtrage :

 Filtre Passe-bas : diminue le bruit mais atténue les détails de l’image

 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.

𝐼 ′ (𝑖, 𝑗) = ∑ ℎ(𝑚, 𝑛)𝐼(𝑖 − 𝑚, 𝑗 − 𝑛) ,⁡⁡⁡⁡⁡⁡⁡ ∑ ℎ(𝑚, 𝑛) = 1


(𝑚,𝑛)𝜖𝜗 (𝑚,𝑛)𝜖𝜗

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 :

- est un filtre passe-bas.


- Rend l'image floue, en particulier les contours.
- Permet de lisser l'image (smoothing)
- Remplace chaque pixel par la valeur moyenne de ses voisins
- Réduit le bruit
- Réduit les détails non-important
- Brouille ou rend floue l'image (blur edges)
- Élimine les dégradations locales de faibles dimensions. Valide lorsque les objets présents
dans l'image sont de dimensions supérieures aux dégradations.

Un exemple avec le moyennage sur un voisinage 3x3

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

c) Filtre passe-bas idéal

Coupe toutes les hautes fréquences après une distance D0 du centre

1⁡⁡⁡𝑠𝑖⁡𝐷(𝑢, 𝑣) ≤ 𝐷0 𝑀 𝑁
𝐻(𝑢, 𝑣) = { avec 𝐷(𝑢, 𝑣) = √(𝑢 − 2 )2 + (𝑣 − 2 )2
0⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡𝑠𝑖𝑛𝑜𝑛

42
d) Filtre Butterworth passe-bas

Coupe graduellement les hautes frequences selon D0 et n

1 𝑀 𝑁
𝐻(𝑢, 𝑣) = 𝐷(𝑢,𝑣) 2𝑛
avec 𝐷(𝑢, 𝑣) = √(𝑢 − 2 )2 + (𝑣 − 2 )2
1+[ ]
𝐷0

D0 est choisie pour H(u,v) = 0,

Phénomène de réverbération :

43
3.4- FILTRAGE NON LINEAIRE

3.4.1- Introduction au filtrage non-linéaire


Le filtrage linéaire montre des limites dans deux aspects particuliers de l’amélioration des images
numériques :

- 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

3.4.2- Le Filtre Median

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:

- Est un Filtre non-linéaire.


- Élimine le bruit impulsionnel.
- Préserve l'information de contour et peut être appliqué itérativement.
- Élimine les contours très fins. Un voisinage adapté permet de limiter cet effet.

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.

3.4.3- Le filtre de Nagao

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.

4.1- NOTION DE FREQUENCE DANS UN SIGNAL

Dans le cadre d’une image, une fréquence correspond à un changement d’intensité. On distingue les

zones de haute fréquence et de basse fréquence

- Basses fréquences : régions homogènes, flou


- Hautes fréquences : contours, changement brusque d’intensité, bruit

50
 Basse fréquence

Les basses fréquences correspondent à des changements d’intensité lents

 Haute fréquence

Les hautes fréquences correspondent à des changements d’intensité rapides

4.2- TRANSFORME DE FOURRIER (TF)

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

𝐹[𝑢, 𝑣] = ∑ ∑ 𝑓[𝑥, 𝑦]𝑒 −𝑖2𝜋(𝑢𝑥+𝑣𝑦)/𝑤ℎ


𝑥=0 𝑦=0

Cette transformée fournie les coefficients F[u,v] de la décomposition de l’image f en


combinaison linéaire de sinusoïdes complexes, correspondant à la transformée de Fourrier discrète
2d inverse :
51
𝑤−1 ℎ−1
1
𝑓[, 𝑦] = ∑ ∑ 𝐹[𝑢, 𝑣]𝑒 −𝑖2𝜋(𝑢𝑥+𝑣𝑦)/𝑤ℎ
𝑤ℎ
𝑢=0 𝑣=0

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 :

𝐹[𝑢, 𝑣] = 𝐹[−𝑢, −𝑣]

Où 𝑧 represente le conjugué de z. En termes d’interprétation, on préfère la représentation (module,


argument) des nombres complexes F[u, v] à la représentation (partie réelle, partie imaginaire). On
représentera donc les fréquences par :

𝐹[𝑢, 𝑣] = ‖𝐹[𝑢, 𝑣]‖𝑒 𝑖𝜌[𝑢,𝑣]

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 𝜌[𝑢, 𝑣] = 𝜌[−𝑢, −𝑣]

𝐹[𝑢, 𝑣] = 𝐹[𝑢 + 𝑤, 𝑣 + ℎ]

𝑓[𝑥, 𝑦] = 𝑓[𝑥 + 𝑤, 𝑦 + ℎ]

F et f sont des fonctions 2d-périodiques de période (w, h)

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é

4.2.2- Propriété de la transformée de Fourrier


𝑇𝐹
𝑓[𝑥, 𝑦] → 𝐹[𝑢, 𝑣]
𝑠𝑖⁡ {𝑓1 [𝑥, 𝑦] → 𝐹1 [𝑢, 𝑣]
𝑓2 [𝑥, 𝑦] → 𝐹2 [𝑢, 𝑣]

a) Linéarité
𝑎 ⋅ 𝑓1 ⁡[𝑥⁡, 𝑦⁡] ⁡ + ⁡𝑏 ⋅ 𝑓2 ⁡[𝑥⁡, 𝑦⁡] ⁡ → 𝑎 ⋅ 𝐹1 ⁡[𝑢⁡, 𝑣⁡] ⁡ + ⁡𝑏 ⋅ 𝐹2 ⁡[𝑢⁡, 𝑣]
b) Correspondance convolution/ produit
𝑓1 ⁡[𝑥⁡, 𝑦] ∗ 𝑓2 ⁡[𝑥⁡, 𝑦] ⁡ → ⁡ 𝐹1 ⁡[𝑢⁡, 𝑣⁡] ⋅ 𝐹2 ⁡[𝑢⁡, 𝑣]
𝑓1 ⁡[𝑥⁡, 𝑦]⁡. 𝑓2 ⁡[𝑥⁡, 𝑦] → ⁡ 𝐹1 ⁡[𝑢⁡, 𝑣⁡] ∗ 𝐹2 ⁡[𝑢⁡, 𝑣]

c) translations spatiales / fréquentielles


′ ′
𝑓⁡[𝑥 − 𝑥 ′ , 𝑦 − 𝑦 ′ ] → 𝐹⁡[𝑢⁡, 𝑣⁡] ⋅ 𝑒 −2𝑖𝜋(⁡ 𝑢𝑥 +𝑣𝑦 )/𝑤ℎ⁡
𝑓[𝑥⁡, 𝑦⁡] ⋅ 𝑒 −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

Si nous changeons l’expression de X(m, n) à:


𝑁−1 𝑀−1
′ (𝑚,
𝑙𝑛 𝑘𝑚
𝑋 𝑛) = ∑ (𝑒𝑥𝑝 {−2𝜋𝑗 } ∑ 𝑥(𝑘, 𝑙)𝑒𝑥𝑝 {−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,

La fonction « fft2 » permet de calculer la transformée de Fourier d’une image et la fonction


« fftshift » permet de centrer une transformée de Fourier sur la fondamentale(fréquence spatiale
nulle).

Manipulation 39
Utiliser la fonction CHECKERBOARD pour créer une image. Tester la transformée de Fourier de
cette image.

4.2.4- Analyse spectrale d’une image


Une image est avant tout un signal (visuel), tout comme le son est un signal audio. On peut analyser
les fréquences de ce signal. On parle de fréquences spatiales (image) au lieu de fréquences
temporelles (audio). Pour cela, on crée un nouvel « histogramme » (graphique) qui va représenter
les fréquences de l’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

- Entrée : une image


- Sortie : image(partie réelle) + image(partie imaginaire)

a) Fonctionnement pratique de la transformée de Fourrier

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

4.2.6- Quelques TF de base

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

a) Filtrage dans le domaine spectral

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

Pourcentage de l’information de l’image inclus dans les cercles (plus petit

vers le plus grand) : 90%, 95%, 98%, 99%, 99.5%, 99.9%

59
c) Filtrage passe-bas

d) Filtrage passe-bas par TF

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

On efface les basses fréquences de la TF en mettant les pixels au centre à zéro

f) Réduction du bruit dans une image

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. QU’EST-CE-QUE LA 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é

– Pas seulement les contours !


– Abus de langage sur la notion de contours !

5.1.2- Exemples de détection des discontinuités

5.1.3- Différents types de contours

63
Contour avec un peu de bruit…

Contour avec beaucoup 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

On utilise la première dérivée de l’image pour les contours :

∆𝑰 𝑰(𝒙 + ∆𝒙) − 𝑰(𝒙)


=
∆𝒙 ∆𝒙

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.

5.2.1- Filtre de Roberts


Roberts (1965) fournit une première approximation de la première dérivée d'une image discrète. Le
calcul se fait avec 2 masques de convolution pour les 2 directions de la dérivée

Manipulation 44
Appliquer le filtre de robert sur l’image « church.tiff » et afficher le résultat

5.2.2- Filtre de Prewitt


Il utilise les filtres suivants :

0On fait lissage de l’image + dérivée de l’image.

Filtre de Prewitt = Moyenneur + Dérivée

−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

5.2.3- Filtre de Sobel


Le filtre de Sobel détecte séparément les bords horizontaux et verticaux sur une image en niveaux
de gris. Les images en couleurs sont transformées RVB en niveaux de gris. L'application du filtre
aboutit à une image transparente avec de fines lignes noires et quelques restes de couleurs, comme
avec le filtre Laplace, mais les lignes sont plus épaisses et plus noires.

Il utilise les filtres suivants.

De même comme dans Prewitt, on fait le lissage plus la dérivée de l’image.

−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

Exemple d'application du filtre Sobel

Image d’origine Filtre « Sobel » appliqué

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é

Le gradient est caractériser par une norme et une direction

– Norme : Intensité du gradient en chaque pixel (mesure la plus utilisée)

– Direction : Direction du gradient le plus fort en chaque pixel

Exemples de détections de contours

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.

5.2.5- Deuxième dérivée de l’image : Le Laplacien


Une autre approche pour trouver les contours de l'image est d'utiliser la seconde dérivée de l'image.
Pour cela, on utilise le Laplacien comme opérateur

𝜕𝐼 𝜕𝐼
∇2 𝐼 = +
𝜕𝑥 2 𝜕𝑦 2

Les contours correspondent :

 Aux maxima de la première dérivée


 Aux passages par zéros de la deuxième dérivée

69
Exemple avec un contour « rampe »

70
Laplacien par convolution

Plusieurs approximations discrètes du Laplacien existent

0 1 0 1 1 1
[1 −4 1] ou [1 −8 1]
0 1 0 1 1 1

 Une seule matrice de convolution


 Symétrique en rotation

Comparaison Gradient / Laplacien

71
Manipulation 48
Appliquer le filtre de Laplace sur l’image « church.tiff »et afficher le résultat

5.2.6- Le filtre de canny


Le filtre de Canny est l’un des filtres les plus adaptés pour la détection des contours. Sa force vien
des trois critères ci-dessous :

 bonne détection : faible taux d'erreur dans la signalisation des contours,


 bonne localisation : minimisation des distances entre les contours détectés et les contours
réels,
 clarté de la réponse : une seule réponse par contour et pas de faux positifs

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 : |𝐺| = |𝐺𝑥 | + |𝐺𝑥 |

3) Direction des contours

𝐺𝑦
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

Quel filtre choisir pour les contours ?

Aucun opérateur n'est parfait pour détecter les contours. En pratique, on obtient des contours
incomplets

 il y a des pixels superflus


 il y a des manques
 il y a des erreurs de position et d'orientation des pixels contours

Chacun semble avoir sa préférence pour une méthode ou une autre

Un opérateur de détection de contour n'est qu'une première étape dans la chaîne de segmentation

5.2.7- Approche globale pour les contours : Transformée de Hough


Il existe des approches globales pour les contours

 On ne recherche pas seulement des pixels contours


 On cherche le contour au complet

On cherche plusieurs pixels correspondant à un contour

 Comment définir le contour ? Problème ?

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)

Plan x-y vs Plan 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

Principe de la transformée de Hough

 Cellules d'accumulation - Matrice (a,b)


 On construit une image des votes (chaque point permet de voter pour une droite particulière)
 Les droites recevant le plus de votes sont conservées

74
Calcul de la transformée de Hough

 On calcule le gradient de l’image originale (Sobel, Prewitt, Canny, …)


 Pour chaque point du gradient, on calcule une droite (a,b) (On obtient une droite dans le plan
a-b pour chaque pixel (x,y) )
 Les pics maximum dans le plan paramétrique a-b indiquent les droites avec le maximum de
points du plan x-y (Les points de croisement des droites dans le plan a-b indiquent les vraies
droites existantes dans le plan x-y)

Avec Matlab

Avec Matlab, on utilise la fonction « hough » pour calculer la transformée de Houg

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

Problème avec un espace (a,b)

Problème : pour une droite verticale, b=∞ !

Solution : représentation sous forme polaire (ρ,θ) : ρ = x cos θ + y sin θ

75
Exemple avec 5 points

Autres exemples

La transformée de points aléatoires ne donne rien de précis

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- QU'EST-CE QUE LA 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 ?)

6.1.2- But de la segmentation


 Extraire (séparer) les entités d’une image
 Pour y appliquer un traitement spécifique
 Pour interpréter le contenu de l’image
 Dans la pratique : construire une image de masques
 Chaque masque est une composante connexe

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

6.2.4- Segmentation régions/contours


La segmentation est normalement basée sur:

– les discontinuités : contours (les changements abruptes, frontières entre régions…)


– les zones homogènes : régions (Mêmes couleurs, textures, intensités, …)

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

Il existe alors plusieurs approches de segmentation

 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 seuillage peut être

– Global : un seuil pour toute l'image


– Local : un seuil pour une portion de l'image
– Adaptatif : un seuil s'ajustant selon les parties de l'image

6.2.2- Principe de base


Seuillage de base (2 classes) :

– Si valeur(pixel) ≥ seuil alors valeur(pixel) = 1


– Si valeur(pixel) < seuil alors valeur(pixel) = 0

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

Le problème se pose au niveau du choix du seuil. Il existe de grande famille de seuillage:

 Le seuillage fondé sur l’analyse de l’histogramme,


 Le seuillage adaptatif, par information de contour.

6.2.3- Seuillage à base d’histogramme


L’algorithme de seuillage va déterminer un seuil ou plusieurs seuils, cela va dépendre en fait de la
nature de l’image et de son histogramme associé. En fait si celui-ci correspond à une image
bimodale l’algorithme trouvera un seul seuil. Si celui-ci correspond à une image multimodale
l’algorithme trouvera plusieurs seuils.

a) Seuillage d’histogramme simple

1⁡𝑠𝑖⁡𝑓(𝑥, 𝑦) ≥ 𝑇
𝑔(𝑥, 𝑦) = {
𝑂⁡𝑠𝑖⁡𝑓(𝑥, 𝑦) < 𝑇

81
Avantages

– Universel, temps réel, simplicité


– Fonctionne bien sur des histogrammes multi-modaux

Inconvénients

– Connaître le nombre de classes


– Apparition de faux éléments (aucune prise en compte de la composante spatiale)
– Nombre de modes souvent nombre de classes attendu

b) Multi-seuils

n seuils pour séparer l’image en n+1 classes :

– Si valeur(pixel) < seuil_1, alors valeur(pixel) = 0


– Si valeur(pixel) ≥ seuil_1 && valeur(pixel) <
seuil_2, alors valeur(pixel) = 1
– …
– Si valeur(pixel) ≥ seuil_n, alors valeur(pixel) = n

Problèmes : Combien de seuils + Valeurs des seuils !

82
c) Comment définir le seuil ?

Pour trouver le bon seuiln(T), on peut

– Une valeur obtenue par tests


– La valeur moyenne des tons de gris
– La valeur médiane entre le ton maximum et
le ton minimum
– Une valeur qui balance les deux sections de
l'histogramme

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.

L’histogramme ne contient aucune information relative à l’emplacement des pixels ni sur la


proximité relative de deux pixels. Par contre, l’information qu’il contient peut concerner
notamment la brillance apparente et le contraste d’une image, et il est utilisé en traitement
d’images pour manipuler ces caractéristiques d’une image.

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.

6.2.4- Seuillage adaptatif


Le seuillage adaptatif est un type de seuillage paramétrique, c’est-à-dire qu’il tient compte des
variations d’éclairements présents dans l’image. En fait ce type d’opération fait intervenir les plus
proches voisins d’un pixel.

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....).

6.2.5- Quelques algorithmes de seuillage


Il existe plusieurs méthodes globales automatiques qui permettent de trouver un seuil à partir d’un
histogramme : Otsu, Kittler, … Mais chaque méthode donne un seuil différent. Quel est le bon seuil
? Il faut tester pour chaque nouvelle application

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.

 On balaie toutes les valeurs de seuil possible T


 Pour chaque seuil T :
– On calcule les moyennes et les variances de
chaque classe
– On s’intéresse à la variance intra-classes

Moyennes : μ1 et μ2

Variances :σ12 et σ22

Variance Intra−classes : σw2= P1.σ12+ P2.σ22

Le seuil optimal est celui qui donne σw minimum

 Basé sur le fait que les classes sont bien


définies et regroupées

Seuil trouvé par l'algorithme : T = 125

84
Algorithme de la méthode

Voici la fonction correspondante sous MATLAB:

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.

Problème du seuillage global

86
Problème : Le seuillage global ne peut traiter ce cas

Solution : seuillage local adaptatif

Exemple de seuillage adaptatif

– 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

L’algorithme est composé de 4 étapes :

2. Partitionnement des données en k sous-ensembles (non vides)


3. Calcul des centres des groupes de la partition courante
4. Les données sont affectées au groupe dont le centre leur est le plus proche
5. Retour à l’étape 2
88
Arrêt lorsque les groupes sont ~ constants

Exemple en segmentation d’images

K-moyennes basé sur l’intensité (gris) ou sur la couleur

K-moyennes sur la couleur en 11 groupes

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

Il existe des méthodes de segmentation en régions qui conservent la


connexité entre les régions

6.3.1- Division-fusion (Split-and-Merge)

 Etape de division (split)


– Diviser récursivement tout bloc non-homogène selon un
prédicat défini
– variance, max-min, …
– La division d'un bloc donne 4 sous-blocs
– Les attributs de chaque sous-bloc sont recalculés
 Etape de fusion (merge)
– Regrouper les blocs adjacents représentant des régions
homogènes selon un prédicat défini

90
Phase 1 : Créer les zones homogènes = DIVISION (split)

Phase 2 : Les regrouper = FUSION (merge)

Etape de division

– L’image est stockée dans un arbre : Au début, arbre racine


= image complète
– Récursivement, chaque feuille F est subdivisée en 4 si elle
n’est pas assez homogène. les 4 sous-images sont ajoutées
en tant que feuilles de F


L’algorithme poursuit tant qu’il reste des feuilles non homogènes à diviser

Etape de fusion

Connecter les régions adjacentes homogènes

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)

Croissance avec plusieurs germes

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

Ensuite on "complémente" les valeurs pour créer des zones inondables

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

Importance du contexte dans cette approche.

 Proximité : objets proches sont regroupés


 Similarité : objets semblables sont regroupés
 Tendance commune : objets avec un mouvement cohérent semblable sont regroupés
 Région commune : objets à l’intérieur d’une même région sont regroupés
 Parallélisme : courbes ou objets parallèles sont regroupés
 Fermeture : courbes ou objets qui peuvent former des objets fermés sont regroupés
 Symétrie : courbes ou objets qui peuvent former des objets symétriques sont regroupés
 Continuité : courbes ou objets formant une continuité (au sens esthétique) sont regroupés
 Configuration familière : courbes ou objets formant des objets connus sont regroupés.

95
Questions sur l’approche Gestalt :

- Comment intégrer des règles de regroupement dans un algorithme?


- Comment générer des hypothèses?

Malgré quelques essais, cette approche reste surtout théorique

CONCLUSION

Critères, prédicats et paramètres

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

 La segmentation d'une image cause encore aujourd'hui beaucoup de problèmes


– Aucune méthode ne fonctionne pour toutes les images
– Pas de garantie, pas de recette miracle !
 Le pré-traitement des images, la sélection de capteurs et sources d’énergie appropriées, et la
prise contrôlée des images rendent cette étape plus facile et plus efficace

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

1- soit l'image ci-contre ; on désire mettre en blanc


(255) les points dont la nuance de gris est comprise
entre 0 et 127 et en noir (0) les points dont la nuance
de gris est comprise entre 128 et 255. Ecrire un
programme Matlab permettant de faire cette
transformation.

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

7.2- QUELQUES NOTIONS


Il existe un ensemble de notions propres aux images binaires. La plupart des notions exposées ici
relèvent d'un domaine particulier de l'analyse d'image : la géométrie discrète. Soit I une image
binaire et I(i,j) la valeur du pixel m de coordonnées (i,j) dans I.

7.2.1- Le fond et … la forme


Les deux classes forme et fond constituent une partition de l'image I telle que :

 Forme = { m ∈ I tels que I(m) = 1}


 Fond = {m ∈ I tels que I(m) = 0}

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 :

s = (g,d,l,v) vérifiant : ∀ i 𝜖 [g,d], I(l,i) = v avec bien sûr v = 0 ou 1


99
Un segment est donc une suite continue de pixels de même valeur sur une ligne donnée. Chaque
élément du quadruplet porte un nom :

 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.

Soit S(i,x) l'ensemble des segments de la ligne i ayant pour valeur x :

S(i,x) = { s tels que : l(s) = i et v(s) = x}

L'ensemble S des segments de l'image I est défini par : S=⋃𝑖,𝑥 𝑆(𝑖, 𝑥)

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.

Figure : Relation de connexité entre des 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)):

 Distance de Manathan : d1(P,Q)=|xp - xq| + |yp - yq|


2
Elle a la forme d’un diamant cantré sur (x,y) 2 1 2
Ex : d1 ≤ 2 2 1 0 1 2
2 1 2
2

2 2
 Distance Euclidienne : 𝑑2 (𝑃, 𝑄) = √(𝑥𝑝 − 𝑥𝑞 ) + (𝑦𝑝 − 𝑦𝑞 )
 Distance de l'Echiquier : dinf(P,Q)=Max(|xp - xq| , |yp - yq|)

Elle a la forme un carré centré sur (x,y)


2 2 2 2 2

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.

7.2.5- Voisinage d'un objet et connexité


On appelle voisinage d'ordre k du pixel P et l'on note Vk(P) l'ensemble des pixels Q définit par:

Vk(P) = { Q tels que : 0 < d(P,Q) ≤ k }

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

Figure : Connexité et voisinage

Conseils : Connexités différentes pour les contours et régions : Connexité-4 pour les régions et
Connexité-8 pour les contours

7.2.6- Codage de Freeman


C’est une technique de représentation des directions du contour (on code la direction le long du
contour dans un repère absolu lors du parcours du contour à partir d’une origine donnée). Les
directions peuvent se représenter en 4-connexité (codage sur 2 bits) ou en 8-connexité (codage sur 3
bits)1

Le codage d’un contour se fait donc de la façon suivante :

1. transmission des coordonnées absolues du point de départ,

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

Exemple Du Codage De Freeman

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, ...) .

Une image segmentée n'est qu'une succession de pixels

On désire donner une valeur commune pour les pixels d'une région ou d'un contour

On désire avoir une valeur différente pour chaque région/contour

Nous allons effectuer un parcours de l’image pour


affecter un numéro unique (étiquette) pour chaque
région

Tous les pixels d’une même région doivent avoir le


même numéro (étiquette)

Premier parcours de l’image

 Pour chaque pixel d’une région, on lui affecte


 soit la plus petite étiquette parmi ses voisins
haut et gauche
 soit une nouvelle étiquette.

104
Deuxième parcours de l’image

Pour chaque pixel d’une région, on lui affecte la plus petite


étiquette parmi la sienne et celles ses voisins bas et droite

En deux parcours, nous avons terminé l’étiquetage des


régions. Parfois, il faut plus de deux parcours.

exemple : région en spirale ! On continue les parcours, dans


un sens puis l’autre, jusqu’à ce qu’il n’y ait plus de
changement d’étiquettes

105
Il est possible de ne faire qu’un seul parcours

- Gestion d’une table d’équivalence d’étiquettes


- Mise à jour récursive des étiquettes lorsque 2 étiquettes se
« rencontrent »

7.4- ETIQUETAGES DE CONTOURS


Pour étiqueter des contours, on peut utiliser le même algorithme

On procède de la même façon, sauf qu’on utilise la 8-connexité.


on regarde 4 voisins au lieu de 2

A faire attention : normalement l’épaisseur d’un contour doit être


d’un seul pixel. supprimer les pixels redondants (non-maxima

Il existe d’autres algorithmes plus performants pour les contours qui sortent du cadre de ce cours.

7.5- FERMETURE DES CONTOURS


Du gradient aux contours : Les méthodes de gradient vues en classe ne donnent pas forcément des
contours fermés, Il y a des trous et plusieurs morceaux isolés. On doit alors « fermer les contours »
pour avoir une segmentation avec les contours équivalents aux régions.

Plusieurs méthodes existent, mais rien de facile :

7.5.1- Epaisseur des contours


Condition importante : un contour doit avoir une
épaisseur de 1 pixel partout

Si le contour est trop épais, où si le contour


présente plusieurs chemins, on doit conserver les
pixels de gradient le plus fort

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

On peut avoir plusieurs chemins possibles

- Graphes de possibilités de chemin


- Choix des chemins les plus courts / les plus forts (gradient)

7.6- SEUILLAGE PAR HYSTERESIS


On définir deux seuils :

- seuil bas : minimum pour être contour


- seuil haut : minimum pour être contour d'un objet
(1) Seuiller avec le seuil haut
(2) Ajouter les contours connectés supérieur au seuil bas

7.7- OPERATEURS MORPHOLOGIQUES


Ils sont très utilisés sur les images binaires (images de masques), mais aussi sur les images en
niveaux de gris. Ils permettent de modifier la morphologie des objets (Pour nettoyer le résultat de la
segmentation, Remplir les trous, éliminer le bruit, Pour lisser le résultat de la segmentation)

Les opérateurs morphologiques sont caractérisés par :

107
- Un élément structurant
- Des transformations (érosion, dilatation, ouverture, fermeture)

7.7.1- Élément structurant


Un élément structurant est un masque binaire (constitué de pixels blancs et noirs) muni d'un point
d'ancrage.

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).

Les pixels "blancs" peuvent être interprétés comme "transparents".

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

7.7.2- Erosion et dilatation

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

de croix (au centre)

108
Propriétés de l'érosion :

- élargie les chenaux et les trous,


- supprime les caps étroits et les petits îlots,
- elle peut transformer une presqu'île en île.

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 :

- élargie les caps,


- comble les chenaux et les trous étroits,
- peut souder deux formes proches.

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.

c) Dualité entre érosion et dilatation

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.

Illustration de la dilatation et de l'érosion du complémentaire

Propriétés de l'érosion et de la dilatation

Les propriétés algébriques suivantes sont valables :

 l'érosion et la dilatation sont monotones croissantes

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 :

DilM1∪M2(X) = DilM1(X) ∪DilM2(X)


DilM1∩M2(X) = DilM1(X) ∩DilM2(X)
EroM1∪M2(X) = EroM1(X) ∩EroM2(X)
EroM1∩M2(X) = EroM1(X) ∪EroM2(X)
Manipulation 60
1) Binarisez l’image « bacteria.tif » en utilisant la méthode de votre choix. Par convention le «
fond » de l’image binaire doit être noir (à « 0 »), et la forme de l’objet doit être blanche (à
« 1 »). Donc, vous pouvez inverser l’image binaire avec l’opérateur « ~ » ( I = ~ I ).
2) Choisissez un élément structurant. Vous pouvez l’écrire directement sous la forme d’une
matrice binaire (ex. SE = ones(3), SE = [0 1 0;1 1 1;0 1 0], … ). Erodez les formes de l’image
binaire avec imerode.
3) De même, dilatez les formes de l’image binaire avec imdilate
4) Erodez ou dilatez l’image binaire en jouant avec la forme de l’élément structurant.
Observez notamment les résultats lorsque l’élément structurant n’est pas symétrique par
rapport à son origine.
5) On veut observer la relation de dualité entre l’érosion et la dilatation. Pour cela, créez une
image binaire résultat de l’érosion du fond, et une seconde résultat de la dilatation des formes.
Comparez ces deux images et concluez.

111
7.7.3- Ouverture et fermeture

a) Ouverture

Définition de l'ouverture

Une ouverture est une érosion suivie d’une dilatation.

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))

où M− représente l'élément structurant symétrique de M par rapport au point d'ancrage.

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 :

- conserve en général la taille de la forme,


- supprime les caps étroits et les petits îlots,
- elle peut transformer une presqu'île en île.

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))

où M− représente l'élément structurant symétrique de M par rapport au point d'ancrage.

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 :

- conserve en général la taille de la forme,


- comble les chenaux et les trous étroits,
- peut souder deux formes proches.

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 ?

c) Dualité entre ouverture et fermeture

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.

Propriétés algébriques de l'ouverture et de la fermeture

L'ouverture d'une image X par un élément structurant M est caractérisée par les propriétés
suivantes:

 l'ouverture est anti-extensive et la fermeture est extensive

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.7.4- Exemple récapitulatif

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

7.8.1- Filtrage du bruit


Le filtrage du bruit dans une image binaire peut être réalisé par un opérateur morphologique
exprimé par :

114
Filtre(X) = FerB4(OuvB4(X))

Exemple

7.8.2- Extraction du contour d'une composante 4-connexe


L'extraction du contour d'une composante 4-connexe peut être obtenue par l'expression

Contour4(X) = X −EroB9(X)

Exemple

7.8.3- Extraction du contour d'une composante 8-connexe


L'extraction du contour d'une composante 8-connexe peut être obtenue par l'expression

Contour8(X) = X −EroC5(X)

Exemple

7.8.4- Remplissage de régions


Soit Z une courbe 8-connexe; l'intérieur peut être construit de manière itérative à partir d'une image
X[0] contenant un seul pixel intérieur :

X[k] = DilC5(X[k-1]) ∩ZC

Lorsque la stabilité est atteinte X[k] = X[k-1] contient l'intérieur de la courbe Z

115
7.8.5- Gradient

Gradient morphologique

116
7.9- AUTRES OPERATEURS MORPHOLOGIQUES

7.9.1- Opérateur "tout ou rien"

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

– certains pixels sont noirs;


– certains pixels sont blancs;
– certains pixels sont quelconques (blancs ou noirs).

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

Voici une image X, un masque M=(M1,M0), puis EroM1(X), EroM0(XC) et ToRM(X)

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

AmM(X) = X −ToRM(X) = X ∩(ToRM(X))C

Exemple

118
Image originale

Ci contre ;Seuil =80°

Voici une composante connexe X, un masque M et l'amincissement AmM(X)

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

Voici une composante connexe X, un masque M et l'épaississement EpM(X)

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.

Voici deux composantes convexes et deux composantes non convexes

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.

On définit également le squelette par l'intermédiaire de la fonction distance: la valeur


de la fonction distance pour un pixel est la distance de ce pixel au bord le plus proche. le
squelette est l'ensemble des maximums locaux de la fonction distance.

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

Sq(X) = { s |∃x,y ∈frontière(X), x≠y et d(s,x)=d(s,y) }

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.

La squelettisation sera ainsi effectuée par une suite de transformations homotopes.

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)

7.9.6- Axe médian


Définition

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

Voici une composante connexe et son axe médian.

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é

X = DilM(Y1) ∪DilM(DilM(Y2)) ∪... ∪DilM(DilM(...(DilM(Yi)...))

Algorithme

pour j = 1, 2, ... , i faire


pour k = j, j+1, ... , i faire
Yk := DilM(Yk)
jusqu'à ce que Xi = ∅
X := Y1 ∪Y2 ∪... ∪Yi
Remarque
La reconstruction de X à partir de Méd(X) suppose connus les diamètres des blocs, soit la
décomposition en ensembles Yk.

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.

Exemples de squelettes et de TAM

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.

5- charger l'image « cirles.tif » de la toolbox Matlab. le programme « bwmorph.m » permet de


réaliser plusieurs opérations morphologiques sur les images. Faire « help bwmorph » pour
apprendre à l'utiliser
a) Essayer ce programme avec : bothat, clean, close, dilate, erode, hbreak, majority,
open, remove, thicken, thin
b) Créer des images pour interpréter toutes ces fonctions surtout « hbreak », « clean »
c) Ajouter du bruit « Salt and Pepper » sur l’image originale circles.tif puis appliquer
majority filter

6- Faite « help applylut » et « help makelut » pour apprendre comment appliquer la


transformée de voisinage

Remarques: Lut=ensemble des zeros et des 1.


N=2 donne 16 possibilités: 0 0 0 0 ….1111
00 10 01 11 00 10 01 11 00 10…
00 00 00 00 10 10 10 10 01 01
00 01 11
si lut=[000010000000011] alors 𝑉 =
10 11 11

a) Charger l'image circles.tiff


00 01 11
b)Faire une transformée de voisinage utilisant 𝑉=
10 11 11
c) Faire un amincissement en appliquant « applylut » V=[111 ;111 ;111]

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

Vous aimerez peut-être aussi