TNI+VO · Exercice de Programmation

EP03_09 — 📡 Filtre Médian 3×3

3.12.9 EP03_09 📡 Filtre Médian 3×3

Les images radar à synthèse d’ouverture (SAR) utilisées en surveillance environnementale et militaire souffrent d’un type spécifique de bruit appelé speckle, qui présente des caractéristiques similaires au bruit sel et poivre. Le filtre médian est la méthode standard pour supprimer ce bruit, car il préserve les contours des structures tout en éliminant les points parasites.

Voir dans Figure 3.34 une simulation de cet EP.

3.12.9.1 📋 Directives d’implémentation

  1. Dimensions : Lire les entiers \(L\) (lignes) et \(C\) (colonnes).
  2. Données : Lire la matrice de pixels \(f\).
  3. Filtre Médian 3×3 : Pour chaque pixel interne \((i,j)\) avec \(1 \le i < L-1\), \(1 \le j < C-1\) :
    • Collecter les 9 pixels du voisinage \(3 \times 3\) : \(\{f(i+s, j+t) : s,t \in \{-1,0,1\}\}\).
    • Trier les 9 valeurs en ordre croissant.
    • Affecter \(g(i,j)\) à la valeur centrale (position d’indice 4, en considérant l’indice 0).

\[g(i,j) = \text{médiane}\{f(i+s, j+t) : s,t \in \{-1,0,1\}\}\]

  1. Bordure : Copier directement : \(g(i,j) = f(i,j)\).
  2. Sortie : Afficher la matrice filtrée \(L \times C\).

3.12.9.2 📌 Contraintes computationnelles

  • Fenêtre : Toujours \(3 \times 3 = 9\) éléments.
  • Médiane : L’élément central de la séquence triée (indice 4 de 0 à 8).
  • Pas de clipping : La médiane des valeurs dans \([0, 255]\) reste dans \([0, 255]\).
  • Non linéaire : Le filtre médian ne peut pas être exprimé comme une convolution linéaire.

3.12.9.3 🧠 Fondement théorique

Bruit Filtre de moyenne Filtre médian
Sel et poivre (0 ou 255) Étale le bruit Supprime sans déformer les contours
Gaussien Réduit efficacement Réduit partiellement

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

Entrée :

  • Ligne 1 : Entier \(L\).
  • Ligne 2 : Entier \(C\).
  • Lignes suivantes : Éléments de la matrice.

Sortie :

  • Matrice filtrée \(L \times C\).

3.12.9.5 📌 Exemples

Entrée Sortie Observation
3
3
100 100 100
100 0 100
100 100 100
100 100 100
100 100 100
100 100 100
Point noir éliminé : médiane de 8×100+1×0 = 100
3
3
50 50 50
50 255 50
50 50 50
50 50 50
50 50 50
50 50 50
Point blanc (sel) éliminé
📉 Simulateur EP03_09 : Filtre Médian 3×3 g = Médiane(Voisins)

Injectez du bruit impulsionnel (sel et poivre) et survolez les pixels internes du résultat pour inspecter le tri du vecteur de voisinage et l'élimination du bruit.

Bruit sel (255) et poivre (0) — ~30 % des pixels internes affectés
Image f — Avec Bruit Sel (255) et poivre (0) visibles
Résultat g — Sans Bruit Survolez pour inspecter
Vecteur de Voisinage 3×3 — Trié Survolez un pixel interne du résultat pour visualiser
—
Légende :
Fenêtre 3×3
Pixel Central
Bord (Copié)
Médiane
Bruit (Éliminé)
Survolez un pixel interne du résultat pour voir le processus de tri.
Figure 3.34: Simulateur EP03_09 : Filtre de la Médiane 3×3
%%writefile EP03_09.py
# Code Python
Overwriting EP03_09.py
TestSuite("EP03_09.py").run()
✔️ EP03_09.cases existe déjà dans casos/
📋 5 cas chargé(s) depuis casos/EP03_09.cases

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