Descripteurs et morphologie
Cours
Calculs de descripteurs basés régions
L'humain est capable de décrire les régions grâce à leurs propriétés ; la machine n'est pas encore capable de telles descriptions. Par contre, elle est capable de calculer des propriétés mathématiques permettant de classifier les images ou les régions : descripteurs. L'utilisation des descripteurs est fondamentale dans la reconnaissance de formes.
Quelques types de descripteurs
- Contours : calculer les contours intérieurs et extérieurs des objets
- Descripteur de forme : par exemple, l'un des plus simples, la taille (nombre total de pixels), robuste aux transformations géométriques (translations, rotations, etc.)
- Descripteur géométrique : par exemple, le périmètre de la région : longueur du contour extérieur. La région doit être connexe. L'aire (la taille)
- La compacité, circularité : relation entre l'aire et le périmètre
- Boîte englobante : rectangle minimal qui englobe tous les points de la région
- Enveloppe convexe : polygone minimal qui englobe tous les points de la région
- Propriétés statistiques : moyenne, écart-type, variance, etc.
- Asymétrie : l'écart au barycentre de la région
Il existe des centaines de descripteurs, chaque pixel ou région est maintenant décrit par un vecteur de descripteurs (taille, périmètre, couleur, barycentre). Ce vecteur appartient à , où peut être très grand. Il y a donc un problème : comment normaliser ce vecteur, qui contient des descripteurs sémantiquement différents ?
Quelques traitements morphologiques
- Gradient morphologique / laplacien morphologique (avec la dilatation et l'érosion) : et
- Calcul de la distance : chaque point de l'objet est étiqueté avec la distance au point du fond le plus proche
- Remplissage de régions
- Composantes connexes
- Transformation tout ou rien
- Extraction de squelette
Érosion et dilatation ensembliste
Érosion ensembliste : , c'est-à-dire trouver toutes les positions où est inclus dans . C'est ce qu'on appelle la soustraction de Minkowski : . Cela entraîne la diminution de la taille des objets ; les objets avec concavités et trous se séparent, les petits objets et détails disparaissent.
Dilatation ensembliste : , où est le symétrique de (égal à pour un élément structurant symétrique). C'est ce qu'on appelle l'addition de Minkowski . Cela revient à translater par rapport à et prendre l'union des translations.
Composition d'érosion et dilatation
Ouverture : . Séparation et élimination des objets plus petits que : ils sont éliminés par l'érosion. Les objets restants sont filtrés et retrouvent leur taille initiale (dilatation).
Fermeture : (pour un élément structurant symétrique). Elle fusionne les objets proches (connexion des contours) et élimine les trous plus petits que .
Propriétés :
- dualité : l'ouverture de la forme correspond à la fermeture du fond
- anti-extensivité / extensivité :
- croissance : si alors et
- idempotence : et
Mise en application
Remarque importante sur la partie morphologie mathématique
Il est sous-entendu que tous les programmes doivent être faits "à la main", sans utiliser les fonctions d'OpenCV qui implémentent presque les mêmes opérations morphologiques.
make-se <shape> <halfsize> <se-name>
Écrire le programme make-se.cpp
- ce programme permet de créer un élément structurant de type
shapede taille , et le sauve dans une image binaire nomméese-name shapeest de type entierenum{SQUARE, DIAMOND, DISK, LINE_V, DIAG_R, LINE_H, DIAG_L, CROSS, PLUS}correspondant aux éléments structurants suivants : un carré, un losange, un disque, une ligne verticale, une diagonale à droite, une ligne horizontale, une diagonale à gauche, une croix, un plus
morphology.cpp
Écrire le programme morphology.cpp
- compléter le programme
morphology.cpppermettant de réaliser les algorithmes de base de la morphologie mathématique. Les fonctions à compléter se trouvent dans l'en-têtemorphology.hpp - ce module sert de module de base aux programmes que vous réalisez par la suite.
dilatation / erosion <se-name> <ims-name> <imd-name>
Écrire le programme dilatation.cpp / erosion.cpp
- ce programme permet de charger une image donnée en paramètre par
<ims-name>(considérée en niveaux de gris) et un élément structurantse-name - le programme réalise l'opération de dilatation ou d'érosion et sauve l'image résultante dans
<imd-name>
labeling-color <ims-name> <reg-name> <color-name>
Écrire le programme labeling-color.cpp
- ce programme permet de charger une image donnée (considérée comme binaire) en paramètre
- étudier et tester le programme
labeling.cppqui permet de compter les composantes connexes - modifier le programme
labeling.cppetlabeling-color.cppafin que ce dernier puisse générer une carte de région (une carte de labels)reg-nameet une version en fausses couleurs des composantes connexes
Règle extract-gear du Makefile
Modifier et compléter la règle extract-gear du Makefile fourni
- cette règle permet de traiter l'image
gear.pnget d'extraire les dents de l'engrenage à l'aide d'une chaîne de traitement utilisant entre autres, les opérateurs morphologiques - cette règle affiche les différentes étapes de la chaîne de traitements via pvisu
- vous pouvez, selon les besoins, écrire un programme de binarisation
binarization <thmin> <thmax> <ims> <imd>
Règle extract-cell du Makefile
Modifier et compléter la règle extract-cell du Makefile fourni
- cette règle permet de traiter l'image
cell.pnget d'extraire les cellules dans l'image à l'aide d'une chaîne de traitements utilisant, entre autres, les opérateurs morphologiques - cette règle affiche les différentes étapes de la chaîne de traitements via pvisu
- afin de visualiser les contours, vous pouvez, selon les besoins écrire un programme permettant d'ajouter les contours à l'image finale
add-boundary <im-boundary> <ims> <imd>