TNI+VO · Exercice de Programmation

EP04_06 — 🧩 Fermeture Morphologique (Remplissage des Lacunes)

4.9.6 EP04_06 🧩 Fermeture Morphologique (Remplissage des Lacunes)

Dans la numérisation d’empreintes digitales, les sillons de la peau sont parfois interrompus par de la saleté ou un dessèchement, créant de petites lacunes dans la courbe continue qui devrait exister. La fermeture — dilatation suivie d’une érosion avec le même élément structurant — est l’opérateur dual de l’ouverture : elle remplit les petits trous et les renfoncements étroits, sans modifier significativement le contour externe de l’objet. C’est l’étape standard avant d’extraire le squelette d’une empreinte digitale. Voir dans Figure 4.35 une simulation de cet EP.

4.9.6.1 📋 Directives d’implémentation

  1. Dimensions de l’image : Lire les entiers \(L\) (lignes) et \(C\) (colonnes) de \(f\).
  2. Dimensions de \(B\) : Lire les entiers \(L_B\) (lignes) et \(C_B\) (colonnes) de l’élément structurant.
  3. Élément structurant : Lire la matrice \(B\) avec les valeurs \(0\) ou \(1\), ligne par ligne.
  4. Données : Lire la matrice binaire \(f\) (valeurs \(0\) ou \(1\)), ligne par ligne.
  5. Dilatation : Calculer \(d = f \oplus B\), en utilisant exactement l’algorithme de l’EP04_03 (réflexion de \(B\), sans padding).
  6. Érosion : Calculer \(g = d \ominus B\), en utilisant exactement l’algorithme de l’EP04_04 (sans réflexion de \(B\), sans padding) — maintenant appliqué sur \(d\), et non sur \(f\).
  7. Sortie : Afficher la matrice résultante \(g\) (la fermeture de \(f\) par \(B\)) avec les dimensions \(L \times C\).

4.9.6.2 📌 Contraintes de calcul

  • Ordre fixe : C’est toujours la dilatation d’abord, puis l’érosion — l’ordre inverse est l’ouverture de l’EP04_05.
  • Même \(B\) : L’élément structurant utilisé dans la dilatation et dans l’érosion doit être identique.
  • Sans padding à aucune des deux étapes.

4.9.6.3 🧠 Fondement théorique

Concept Signification Impact visuel
Extensivité \(g \supseteq f\) toujours La fermeture ne supprime jamais de pixel, elle n’ajoute que
Idempotence \(\text{fermeture}(\text{fermeture}(f)) = \text{fermeture}(f)\) Réapplique ne change plus rien
Petits trous Plus petits que \(B\) Sont complètement remplis
Dualité \(\text{fermeture}(f) = \overline{\text{ouverture}(\bar f)}\) C’est l’ouverture appliquée au « négatif » de l’image

4.9.6.4 📦 Spécification d’entrée et de sortie (VPL)

Entrée :

  • Ligne 1 : Entier \(L\).
  • Ligne 2 : Entier \(C\).
  • Ligne 3 : Entier \(L_B\).
  • Ligne 4 : Entier \(C_B\).
  • Les \(L_B\) lignes suivantes : éléments entiers (\(0\) ou \(1\)) de la matrice \(B\).
  • Les \(L\) lignes suivantes : éléments entiers (\(0\) ou \(1\)) de la matrice \(f\).

Sortie :

  • Matrice résultante en \(L\) lignes et \(C\) colonnes, valeurs \(0\) ou \(1\).

4.9.6.5 📌 Exemples

Entrée Sortie Observation
8
8
3
3
1 1 1
1 1 1
1 1 1
0 0 0 0 0 0 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
0 0 1 0 1 1 0 0
0 0 1 1 0 1 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
0 0 0 0 0 0 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
Les deux trous internes non adjacents sont totalement remplis
🧩 Simulador EP04_06 : Fermeture morphologique g = (f ⊕ B) ⊖ B

Cliquez sur les cellules de f original pour allumer ou éteindre les pixels (remplissez les trous internes !) et ajustez la taille de l'élément structurant B.


3×3
f Original (Cliquable)
d = f ⊕ B (Dilatation)
g = d ⊖ B (Fermeture)
Figure 4.35: Simulateur EP04_06: Fermeture morphologique (g = (f ⊕ B) ⊖ B)
%%writefile EP04_06.py
# Code Python
Overwriting EP04_06.py
TestSuite("EP04_06.py").run()
✔️ EP04_06.cases existe déjà dans casos/
📋 5 cas chargé(s) depuis casos/EP04_06.cases

🔍 Test de Python : EP04_06.py
⚠️ EP04_06.py : fichier vide (moins de 3 lignes). Tests ignorés.