Descripteurs, Traitements morphologiques
Cours
Calculs de descripteurs basés régions
L'humain est capable de décrire les régions grâce à leur propriété, 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, un des plus simple la taille (nombre total de pixels), robuste au transformation géométrique (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 connectée. L'aide (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 baricentre 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 est de dimension , peut être très grand. Il y a onc un problème, comment normaliser ce vecteur qui contient des descripteurs sémantiquement différents.
Quelques traitements morphologiques
- Gradient morphologique / Laplacien :
- 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
Érosition ensembliste : trouver toutes les occurences de dans c'est ce qu'on appelle la soustraction de Minkowski . Cela permet la diminution de la taille, les objets avec concavités et trous se séparents, les petits objets et détails disparaissent.
Dilitation ensembliste 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
Overture : . Séparation et l'élimination d'objet d'une certainne taille de . Les objets plus petit que sont éliminés (l'érosion). Les objets restants sont filtrés et retrouvent leur taille initiale (dilatation).
Fermeture : . Fusionner les objets (connexion des contours). Filtrage de l'image, élimination des trous. Fusionne les contours et les objets
Propriétés:
- dualité : ouverture de la forme implique la fermeture du fond
- extensivité / anti-extensivité :
- croissance : si alors et
- idempotence : et
Mise en application
Remarque importante sur la partie morphologie mathématique
Il est sous entendu de manière implicite que tous les programmes doivent être fait "à la main" et n'utilisent pas les fonction d'opencv qui implémentent presque les mêmes opérations morphologiques
make-se <shape> <halfsize> <se-name>
Écrire le programme ̀makke-se.cpp`
- ce programme permet de créer un élément structurant de type ̀shape
de taille $(2*halfsize+1)^2$, et le sauve dans une image binaire nommee ̀se-name
shape
est de type entierenum{SQUARE, DIAMOND, DISK, LINE_V, DIAG_R, LINE_H, DIAG_L, CROSS, PLUS}
correspondant aux éléements 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.cpp
permettant de réaliser les algorithmes de base de la morphologie mathématique. Les fonctions à compléter se trouve dans l'entê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 niveau de gris) et un élément structurant `se-name ̀ - le programme réalise l'opération d'ouverture ou de fermeture 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.cpp
qui permet de compter les composantes connexes et convexes - modifier le programme
labeling.cpp
etlabeling-color.cpp
afin que ce dernier puisse générer une carte de région (une carte de label)reg-name
et 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.png
et 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.png
et 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-boudary> <ims> <imd>