TNI+VO · Exercice de Programmation

EP04_05 — 🧹 Ouverture Morphologique (Suppression de Bruit)

4.9.5 EP04_05 🧹 Ouverture Morphologique (Suppression de Bruit)

Les images capturées par des capteurs à faible coût, comme ceux des drones agricoles, sont souvent parsemées de petits points de bruit — des pixels isolés qui ne représentent rien de réel. Appliquer une érosion suivie d’une dilatation avec le même élément structurant produit l’ouverture : elle « nettoie » les points et les fines protubérances, mais rend à l’objet principal pratiquement sa taille d’origine. C’est la combinaison classique utilisée dans le pré-traitement d’images satellitaires avant tout comptage de surface cultivée. Voir dans Figure 4.34 une simulation de cet EP.

4.9.5.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 des valeurs \(0\) ou \(1\), ligne par ligne.
  4. Données : Lire la matrice binaire \(f\) (valeurs \(0\) ou \(1\)), ligne par ligne.
  5. Érosion : Calculer \(e = f \ominus B\), en utilisant exactement l’algorithme de l’EP04_04 (sans réfléchir \(B\), sans padding).
  6. Dilatation : Calculer \(g = e \oplus B\), en utilisant exactement l’algorithme de l’EP04_03 (en réfléchissant \(B\), sans padding) — mais maintenant appliqué sur \(e\), pas sur \(f\).
  7. Sortie : Afficher la matrice résultante \(g\) (l’ouverture de \(f\) par \(B\)) avec les dimensions \(L \times C\).

4.9.5.2 📌 Contraintes Computationnelles

  • Ordre fixe : C’est toujours l’érosion d’abord, puis la dilatation — l’ordre inverse définit un autre opérateur (la fermeture, du prochain EP).
  • Même \(B\) : L’élément structurant utilisé pour l’érosion et la dilatation doit être identique.
  • Sans padding dans aucune des deux étapes.

4.9.5.3 🧠 Fondement Théorique

Concept Signification Impact Visuel
Anti-extensivité \(g \subseteq f\) toujours L’ouverture ne crée jamais de nouveau pixel, elle ne fait que supprimer
Idempotence \(\text{ouverture}(\text{ouverture}(f)) = \text{ouverture}(f)\) Réappliquer ne change plus rien
Points isolés Plus petits que \(B\) Ils sont complètement éliminés
Noyau de l’objet Plus grand que \(B\) Il est récupéré presque intact par la dilatation finale

4.9.5.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.5.5 📌 Exemples

Entrée Sortie Observation
7
7
3
3
1 1 1
1 1 1
1 1 1
0 0 0 0 0 0 0
0 1 0 0 0 1 0
0 0 1 1 1 0 0
0 0 1 1 1 0 0
0 0 1 1 1 1 0
0 0 0 0 0 0 0
0 1 0 0 0 0 1
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 1 1 1 0 0
0 0 1 1 1 0 0
0 0 1 1 1 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
Les points isolés et la fine protubérance disparaissent ; le carré central survit
🧹 Simulateur EP04_05 : Ouverture morphologique g = (f ⊖ B) ⊕ B

Cliquez sur les cellules de f original pour allumer ou éteindre des pixels (créez votre propre bruit de fond !) et ajustez la taille de l'élément structurant B.


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

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