Dans cette partie, vous allez découvrir les opérateurs de base du traitement d'image fondés sur la Morphologie Mathématique.
Afin d'apprécier l'effet de cette technique sur une image binaire fortement bruitée, les concepts de l'Érosion et de la Dilatation seront abordés. Les processus d'ouverture et de fermeture seront également exposés. Enfin, des opérations morphologiques de plus haut niveau, d'extraction de contours, intitulées Gradients Morphologiques seront présentées.
L'effet de ces traitements sera illustré au travers d'images bruitées corrigées grâce à ces opérateurs, afin de vous permettre de mieux comprendre ces différentes techniques.
Historique et genèse
La Morphologie Mathématique est une technique de traitement d’image qui remonte aux années 1960, découverte par Georges Mathéron et Jean Serra à l'École des Mines de Paris.
La Morphologie Mathématique est un ensemble de méthodes développées pour le traitement de la forme des objets dans une image, et permet de supprimer le bruit introduit par des opérations de segmentation. Elle permet ainsi de nettoyer des images très bruitées.
Le développement de ce nouvel opérateur a donné lieu à la publication d'un livre de référence : « Image analysis and mathematical morphology », J. Serra, 1982.
Objectifs
Les objectifs de la morphologie mathématique sont :
D’une part la transformation géométrique d’une image binaire par un élément structurant ;
D’autre part le traitement de la forme des objets dans une image ou la suppression du bruit introduit par les opérateurs de segmentation.
Principes
Le principe de la morphologie mathématique est fondé sur l’utilisation d’un élément structurant (ES) qui représente un masque de convolution appliqué à une image binaire.

Considérons une image binaire de petite taille avec un objet clair sur fond noir :
Activité n° 1 - Chargement d'une image N&B
Prérequis : un environnement Python configuré pour le cours.
Téléchargez cette image (lien) et enregistrez-la sous le nom smiley_nb.png
:

Ouvrez un interpréteur Python dans le dossier où vous avez votre image et copiez-collez le code suivant :
#Chargement d'une image N&B
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
image = cv.imread('smiley_nb.png',0)
plt.imshow(image, cmap='gray')
plt.show()
Ce code permet de charger une image et d'ouvrir une fenêtre afin de l'afficher. Assurez-vous de bien voir l'image à l'écran.
Combien y a-t-il de valeurs différentes pour l'ensemble des pixels ?
Quelle est la taille de l'image ?
Veuillez noter vos réponses. La correction vous sera donnée à la fin de ce chapitre.
Notion d’Élément Structurant (ES)
L’élément structurant sous forme d’image peut être utilisé en termes :
D’exclusion (en vert sur l'image ci-dessous) ;
D’intersection (en bleu) ;
Ou d’inclusion (en violet).

Il existe plusieurs sortes d’éléments structurants. Ils ne sont restreints ni en taille ni forme. Pour ce cours, vous observerez des ES de forme rectangulaire avec origine au pixel central.
Voici ci-dessous une représentation de différents masques de convolution :
Carré (4-connexité) | | |
Hexagonal (6-connexité) |
| 2 cas possibles : |
Carré (8-connexité) | | |
Deux critères sont importants pour choisir le masque de convolution :
Le masque doit être capable de supprimer le bruit sans altérer l'information principale de l'image ;
La taille du masque doit être raisonnable afin de limiter les temps d'exécution.
Activité n° 2 - Création d'éléments structurants
Récupérez le code suivant et exécutez-le dans votre environnement Python :
#Notion d'élément structurant
import cv
import numpy as np
import matplotlib.pyplot as plt
kernel_cross = cv.getStructuringElement(cv2.MORPH_CROSS,(5,5))
print(kernel_cross)
plt.imshow(kernel_cross,cmap='gray')
plt.show()
kernel_circle = cv.getStructuringElement(cv2.MORPH_ELLIPSE,(20,20))
print(kernel_circle)
plt.figure()
plt.imshow(kernel_circle,cmap='gray')
plt.show()
kernel_rect = cv.getStructuringElement(cv2.MORPH_RECT,(5,5))
print(kernel_rect)
plt.figure()
plt.imshow(kernel_rect,cmap='gray')
plt.show()
Vous devriez voir apparaître successivement trois formes d'éléments structurants. Les différents éléments structurants vous permettront d'appliquer différents effets sur vos images.
Pourquoi la dernière forme, un carré, apparaît-elle toute noire ?
Exemple d’application
Prenons comme exemple une image d’empreinte digitale après segmentation qui est très bruitée :

L’intérêt de la morphologie mathématique est de nettoyer cette image bruitée afin d’obtenir une image beaucoup plus nette :

Réponses aux activités
Activité n° 1 - Chargement d'une image N&B
Combien y a-t-il de valeurs différentes pour l'ensemble des pixels ?
La bonne réponse est : 2. Une pour le blanc et une pour le noir.
Quelle est la taille de l'image ?
Réponse : print(image.shape)
nous donne [50 50], donc 50 pixels par 50 pixels.
Activité n° 2 - Création d'éléments structurants
Pourquoi la dernière forme, un carré, apparaît-elle toute noire ?
Réponse : la forme ne contient que des 1, et donc l'affichage utilise tout le temps la même couleur pour la valeur 1.