Skip to main content

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 RnR^n, nn 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 : BI=+I+I=(B(I)I)+(IϵB(I))=B(I)ϵB(I)ΔBI=+II=(B(I)I)(IϵB(I))=B(I)+ϵB(I)2I\nabla_B I = \partial^+ I + \partial^- I = (\partial_B(I) - I) + (I - \epsilon_B(I)) = \partial_B(I) - \epsilon_B(I) \\\\ \Delta_B^I = \partial^+ I - \partial^- I = -(\partial_B(I)-I) - (I - \epsilon_B(I)) = \partial_B(I) + \epsilon_B(I) - 2I
  • 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 ϵB(A)xA:BxA\epsilon_B(A) \\{x \in A : B_x \subseteq A \\} : trouver toutes les occurences de BB dans AA ϵB(A)\epsilon_B(A) c'est ce qu'on appelle la soustraction de Minkowski ()ϵB(A)=AB=xBAx(\ominus) \epsilon_B(A) = A \ominus B = \cap_{x\in B} A_{-x}. 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 δB(A)=xB:BxA=AB=xBAx\delta_B(A) = \\{x \in B : B_x \cap A \neq \emptyset \\} = A \oplus B = \cup_{x \in B} A_{-x} c'est ce qu'on appelle l'addition de Minkowski ()(\oplus). Cela revient à translater AA par rapport à BB et prendre l'union des translations.

Composition d'érosion et dilatation

Overture : γB(A)=δB(ϵB(A))=xBx:BA\gamma_B(A)= \delta_B(\epsilon_B(A)) = \cup_x \\{B_x : B \subseteq A \\}. Séparation et l'élimination d'objet d'une certainne taille de BB. Les objets plus petit que BB sont éliminés (l'érosion). Les objets restants sont filtrés et retrouvent leur taille initiale (dilatation).

Fermeture : ϕB(A)=ϵB(δB(A))=xBxc:ABxn\phi_B(A) = \epsilon_B(\delta_B(A)) = \cap_x \\{B_x^c : A \subseteq B_x^n \\}. 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é : ϕB(A)AγB(A)\phi_B(A) \subseteq A \subseteq \gamma_B(A)
  • croissance : si ACA \subseteq C alors γB(A)γB(C)\gamma_B(A) \subseteq \gamma_B(C) et ϕB(A)ϕB(C)\phi_B(A) \subseteq \phi_B(C)
  • idempotence : γB(γB(A))=γB(A)\gamma_B(\gamma_B(A)) = \gamma_B(A) et ϕ(ϕB(A))=ϕB(A)\phi(\phi_B(A)) = \phi_B(A)

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 ̀shapede taille $(2*halfsize+1)^2$, et le sauve dans une image binaire nommee ̀se-name
  • shape est de type entier enum{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ête morphology.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 et labeling-color.cpp afin que ce dernier puisse générer une carte de région (une carte de label) 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-boudary> <ims> <imd>