Vous êtes sur la page 1sur 11

Exercice Chapitre 4 Traitement dimages binaires par Morphologie Mathmatique Lanalyse par morphologie mathmatique vise modifier la structure

re et la forme des objets de limage, par exemple, pour sparer les objets, les discriminer en fonction de leur taille, remplir les trous, Rappels : La transformation morphologique modifie la valeur dun pixel de limage en fonction de la valeur de ses voisins. Pour cela, on utilise un lment structurant, qui est un masque binaire. Il permet de prendre en compte le voisinage du pixel. Exemple dun lment structurant 4-connexit (le centre est marqu par un cercle) : 0 1 0 1 1 1 0 1 0

Les traitements morphologiques sont dfinis partir de deux oprations de base qui sont lrosion et la dilatation. Dfinition : Soient S le support de limage, et p laffixe dun point P de cette image : - Lrosion dune forme X par un lment structurant B est note X B . Elle est dfinie par : X B = { p S, tel que Bp X} ; - La dilatation dune forme X par un lment structurant B est note X B . Elle est dfinie par : X B = { p S, tel que Bp X }. Lrosion et la dilatation sont duales par rapport la complmentation : X B = ( XC B )C

Avec : - XC complmentaire de X ; - B lment symtrique de B ( i.e. B (i, j) = B (-i, -j) ) ; - Bp lment transpos de B par le vecteur daffixe p.

Vous allez utiliser Matlab pour raliser des filtrages morphologiques. Avant de commencer, ouvrez le fentre daide de Matlab (commande helpwin) et accdez la Toolbox Image Processing. Vous aurez ainsi une description dtaille pour chacune des fonctions utilises dans cet exercice.

1. Erosion et dilatation dune image binaire


Mettez jour la liste des chemins dans le path browser. Ouvrez un nouveau fichier MFile dans lequel vous allez saisir vos commandes et dont chaque ligne (se terminant par un ; ) sera ensuite interprte. Chargez limage CIRCUIT.TIF avec imread. 1.1 Binarisez limage en utilisant la mthode de votre choix (cf. exercice binarisation du chapitre 2).

1.2 Par convention le fond de limage binaire doit tre noir ( 0 ), et la forme de lobjet doit tre blanche ( 1 ). Donc, vous pouvez inverser limage binaire avec loprateur ~ ( I = ~ I ). 1.3 Choisissez un lment structurant. Vous pouvez lcrire directement sous la forme dune matrice binaire (ex. SE = ones(3), SE = [0 1 0;1 1 1;0 1 0], ). Erodez les formes de limage binaire avec imerode. Dfinissez, avec laide de Matlab (commande helpwin), cette opration. 1.4 De mme, dilatez les formes de limage binaire avec imdilate et dfinissez cette opration avec laide de Matlab. 1.5 Erodez ou dilatez limage binaire en jouant avec la forme de llment structurant. Observez notamment les rsultats lorsque llment structurant nest pas symtrique par rapport son origine. 1.6 On veut observer la relation de dualit entre lrosion et la dilatation. Pour cela, crez une image binaire rsultat de lrosion du fond, et une seconde rsultat de la dilatation des formes. Comparez ces deux images et concluez.

2. Ouverture (rosion puis dilatation) dune image binaire bruite


2.1 Chargez limage CIRCUIT.TIF et ajoutez lui du bruit avec la fonction randn. Cette fonction permet de gnrer une matrice dun bruit gaussien N(0, 1) que vous pouvez amplifier et ajouter votre image originale Remarques : - les dimensions de la matrice du bruit et de limage originale doivent tre les mmes ; - pensez convertir vos donnes pour les oprations effectues (fonctions double et uint8). 2.2 Binarisez limage originale et limage bruite, puis comparez les. 2.3 Choisissez un lment structurant symtrique. Faites lrosion puis la dilatation de limage binaire bruite. La compose de ces deux fonctions sappelle louverture de limage. Quel est lintrt ? 2.4 Que ce passe t-il si, cette fois, llment structurant nest pas symtrique ? Proposez et testez une mthode qui garantisse alors, la reconstruction des objets lidentique. Une piste : il faut penser faire lrosion et la dilatation avec un lment structurant diffrent.

3. Fermeture puis ouverture d'une image binaire


3.1 Chargez limage en niveaux de gris PEARLITE.TIF. Binarisez et inversez limage. 3.2 Faites la fermeture (imclose) de cette image binaire inverse. Dfinissez cette opration (cf. aide Matlab). Pour gnrer lES vous pouvez utiliser la fonction strel (cette fonction gnre des objets lment structurant ).

3.3 Effectuez louverture (imopen) de limage binaire prcdente. Dfinissez cette opration. 3.4 Analysez la chane complte des oprations.

Correction de lexercice : Morphologie Mathmatique pour images binaires 1.1 Voici un exemple de solution pour binariser limage CIRCUIT.TIF : I = imread('CIRCUIT.TIF'); seuil = graythresh(I) % recherche du seuil avec la mthode d'Otsu Ib = im2bw(I,seuil); % binarisation 1.2 Sous Matlab, loprateur ~ correspond au non logique . Vous pouvez donc inverser une image binaire avec la commande : Ibi=~Ib. Pour observer lopration effectue, tapez : figure(1) imshow(Ib) Ibi =~ Ib; figure(2) imshow(Ibi)

1.3 on considre, par exemple, llment structurant suivant : 1 1 1

0 1 0 0 1 0

Pour roder limage binaire Ibi et afficher le rsultat : SE = [0 1 0;1 1 1;0 1 0] ; % lment structurant Ier = imerode(Ibi,SE) ; figure(3) imshow(Ier) Llment structurant permet de dfinir un voisinage pour chacun des pixels de limage dorigine : les pixels voisins sont ceux 1 au sein de llment structurant. On balaie ensuite lensemble des pixels de limage en leur appliquant llment structurant. La valeur dun pixel aprs rosion est alors dfinie comme tant la valeur minimale de tous les pixels dans son voisinage. Pour une image binaire, si lun des pixels du voisinage est 0, la valeur de sortie du pixel est alors automatiquement 0. La figure ci-dessous prsente un exemple drosion, on dtaille le cas du pixel daffixe (3, 2), avec un lment structurant 4-connexit.

Voici limage obtenue aprs rosion :

Lrosion a limin les pixels isols sur le fond et a rod le contour des objets de limage CIRCUIT. 1.4 Pour dilater limage binaire Ibi et afficher le rsultat : Idi = imdilate(Ibi,SE) ; figure(4) imshow(Idi) La valeur de sortie dun pixel est la valeur maximale parmi tous les pixels compris dans le voisinage. Pour une image binaire, si lun des pixel du voisinage est 1, la valeur de sortie du pixel est 1. La figure ci-dessous prsente un exemple de dilatation, et dtaille le cas du pixel daffixe (2,4), avec un lment structurant 4-connexit.

Voici limage obtenue aprs dilatation :

La dilatation limine les trous isols dans les objets et dilate les bords des objets.

1.5 On rode limage avec llment structurant suivant : 0 1 1

0 1 1 0 0 0

Dans ce cas, llment structurant nest pas symtrique. Cette rosion tronque les coins suprieurs droits des objets.

Les formes rodes et dilates dans les objets dpendent donc fortement de la forme de llment structurant. 1.6 On veut montrer que : dilater la forme cest roder le fond puis inverser , soit que : Ibi SE = ( IbiC SE )C : on cr Idi = Ibi SE : Idi = imdilate(Ibi,SE) ; on cr Idi2= ( IbiC SE )C : Idi2 = ~imerode(~Ibi,SE) ;

Les deux images obtenues sont identiques. On peut vrifier ce rsultat en entrant la commande : isequal(Idi,Idi2). La fonction isequal retourne 1 si les deux matrices sont identiques, 0 sinon. 2.1 Voici la liste de commandes pour chargez limage CIRCUIT.TIF et lui ajouter un bruit gaussien N(0, 1) : I = imread('circuit.tif'); % Ajout de bruit : [nb_lig, nb_col] = size( I ); % taille de l'image Bruit = 25 * randn(nb_lig, nb_col); IB = double( I ) + Bruit; % Conversion IB = uint8( IB );

Voici limage Circuit avant ( gauche) et aprs ( droite) ajout du bruit :

2.2 Voici un exemple de script pour construire limage binaire et limage binaire bruite : seuil1 = graythresh(I) ; Ib = im2bw(I,seuil1); seuil2=graythresh(IB) ; IBb = im2bw(IB,seuil2); subplot(1,2,1) subimage(Ib) subplot(1,2,2) subimage(IBb) Voici les rsultats obtenus:

2.3 On considre, par exemple, un lment structurant 8-connexit. Pour raliser louverture de limage bruite, on inverse limage (afin davoir les formes en blanc et le fond en noir), puis on crit : SE = [1 1 1 ;1 1 1 ;1 1 1] ; Iouv = imdilate(imerode(~IBb,SE),SE) ; subplot(1,2,1) subimage(~IBb) subplot(1,2,2) subimage(Iouv)

Voici les images obtenues:

Dans le cas prsent, lintrt dune telle transformation est droder dans un premier temps les formes de limage pour supprimer les pixels isols qui correspondent au bruit, puis de dilater les formes de limage afin de leur rendre une proportion proche de celle quelles avaient avant lrosion. Le bruit est ainsi attnu. 2.4 Si llment structurant nest pas symtrique, lrosion va bien attnuer le bruit de limage (pixels isols sur le fond). Pour reconstruire les formes initiales, on applique une dilatation avec le mme lment structurant. Mise en garde :

Il faut prendre garde bien comprendre la dfinition dune dilatation : X B = { p S, tel que Bp X } Le rsultat de la dilatation est lensemble des points, tels que si on leur applique llment structurant symtrique, lintersection avec la forme X nest pas lensemble vide. On considre, par exemple, un lment structurant non symtrique : 1 1 0 .

1 1 0 0 0 0

Le coin suprieur gauche est donc tronqu par dilatation:

Pour reconstruire la forme, on veut utiliser une dilatation. Considrons que la dfinition de la dilation ne tienne pas compte de la symtrie : X B = { p S, tel que Bp X }. Attention cette dfinition est errone et a pour unique but de vous prsenter une erreur classique ne pas commettre avec un lment structurant non symtrique.

Avec une mauvaise dfinition de la dilatation, on saperoit reconstruction avec le mme lment structurant naboutit pas :

que

la

Pour reconstruire la partie grise, il faut utiliser llment structurant suivant : 0 1 1 qui est le symtrique de llment structurant de dpart.

0 0 0 0 1 1

Afin de crer des ouvertures et des fermetures qui garantissent cette relation de symtrie, et donc une reconstruction cohrente des formes, la dfinition de la dilatation est caractrise par llment structurant symtrique de celui utilis lors de lrosion. Dans le cas dune ouverture avec un lment structurant symtrique, le problme ne se pose videmment pas. Voici un exemple de script pour raliser louverture de limage bruite binarise Circuit avec un lment structurant non symtrique : SE1 = [1 1 0 ;1 1 0 ;0 0 0] SE2 = [0 0 0 ;0 1 1 ;0 1 1] Iouv = imdilate(imerode(~IBb,SE1),SE2) ; Voici les rsultats obtenus :

Le bruit est attnu et les formes sur limage de sortie gardent les mmes proportions que sur limage dentre.

3.1 Voici la commande pour charger limage Pearlite.tif, la binariser et linverser : I = imread(pearlite.tif); L = graythresh(I) I = ~im2bw(I,L); 3.2 Pour raliser la fermeture de cette structurant avec la fonction strel de Matlab : SE = strel('disk', 6) Dans la console on a alors : image on cr un lment

limage de la fermeture est alors obtenue par la commande : Ifer = imclose(I,SE); Voici limage obtenue:

La fermeture adoucit les bords des formes, bouche les canaux troits, fusionne les objets proches les uns des autres et bouche les trous de petite taille.

3.3 Pour raliser louverture fonction imopen de Matlab : Im = imopen(Ifer,SE); On obtient alors limage suivante:

de

limage

prcdente,

on

utilise

la

Louverture dune image binaire adoucit les bords des formes en supprimant les dtails. 3.5 La succession de la fermeture puis de louverture nous a permis dextraire les objets larges de limage binaire, et de raliser une segmentation. Ces deux traitements sont typiquement utiliss pour adoucir les bords, complter, ou pour enlever des objets dans une image binaire. Le choix de llment structurant dpend de la taille et de la forme des objets modifier.

Vous aimerez peut-être aussi