Opérations morphologiques
Parfois, après avoir traité votre image avec un seuil (Threshold), vous avez du bruit indésirable dans l’image binaire résultante. Les opérations morphologiques peuvent aider à supprimer ce bruit.
Noyau (Kernel)
Le noyau est une forme simple où l’origine est superposée à chaque pixel de valeur 1 de l’image binaire. OpenCV limite le noyau à une matrice NxN où N est un nombre impair. L’origine du noyau est le centre. Un noyau commun est:
Différents noyaux peuvent affecter l’image différemment, tels que l’érosion ou la dilatation appliquée verticalement.
Pour référence, voici notre image binaire que nous avons créée:
Érosion
L’érosion en vision par ordinateur est similaire à l’érosion sur le sol. Elle amenuise les rebords des objets de premier plan. Ce processus peut supprimer le bruit de l’arrière-plan.
kernel = np.ones((3, 3), np.uint8)
binary_img = cv2.erode(binary_img, kernel, iterations = 1)
Pendant l’érosion, les pixels de l’image binaire qui ne sont pas superposés par les pixels du noyau sont supprimés.
Dilatation
La dilatation est le contraire de l’érosion. Au lieu d’amenuiser les rebords, on les renforcit. Ce processus peut contribuer à supprimer de petits trous à l’intérieur d’une plus grande région.
kernel = np.ones((3, 3), np.uint8)
binary_img = cv2.dilate(binary_img, kernel, iterations = 1)
Pendant la dilatation, chaque pixel de chaque noyau superposé est inclus dans la dilatation.
Ouverture
L’ouverture est une érosion suivie d’une dilatation. Ce processus supprime le bruit sans affecter la forme des entités plus grandes.
kernel = np.ones((3, 3), np.uint8)
binary_img = cv2.morphologyEx(binary_img, cv2.MORPH_OPEN, kernel)
Note
Dans ce cas précis, il convient de faire quelques itérations d’ouverture afin de se débarrasser des pixels en haut à droite.
Fermeture
La fermeture est une dilatation suivie d’une érosion. Ce processus supprime les petits trous ou les ruptures sans affecter la forme des entités plus grandes.
kernel = np.ones((3, 3), np.uint8)
binary_img = cv2.morphologyEx(binary_img, cv2.MORPH_CLOSE, kernel)