EDI+VA · Esercizio di Programmazione

EP03_09 — 📡 Filtro della Mediana 3×3

3.12.9 EP03_09 📡 Filtro della Mediana 3×3

Le immagini radar ad apertura sintetica (SAR) utilizzate nel monitoraggio ambientale e militare sono soggette a un tipo specifico di rumore chiamato speckle, che presenta caratteristiche simili al rumore sale e pepe. Il filtro della mediana è il metodo standard per la rimozione di tale rumore perché preserva i bordi delle strutture eliminando al contempo i punti spuri.

Vedere in Figura 3.34 una simulazione di questo EP.

3.12.9.1 📋 Linee Guida di Implementazione

  1. Dimensioni: Leggere gli interi \(L\) (righe) e \(C\) (colonne).
  2. Dati: Leggere la matrice dei pixel \(f\).
  3. Filtro della Mediana 3×3: Per ogni pixel interno \((i,j)\) con \(1 \le i < L-1\), \(1 \le j < C-1\):
    • Raccogliere i 9 pixel del vicinato \(3 \times 3\): \(\{f(i+s, j+t) : s,t \in \{-1,0,1\}\}\).
    • Ordinare i 9 valori in ordine crescente.
    • Assegnare a \(g(i,j)\) il valore centrale (posizione indice 4, considerando indice 0).

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

  1. Bordo: Copiare direttamente: \(g(i,j) = f(i,j)\).
  2. Uscita: Visualizzare la matrice filtrata \(L \times C\).

3.12.9.2 📌 Vincoli Computazionali

  • Finestra: Sempre \(3 \times 3 = 9\) elementi.
  • Mediana: L’elemento centrale della sequenza ordinata (indice 4 da 0 a 8).
  • Nessun clipping: La mediana di valori in \([0, 255]\) rimane in \([0, 255]\).
  • Non lineare: Il filtro mediana non può essere espresso come convoluzione lineare.

3.12.9.3 🧠 Fondamenti Teorici

Rumore Filtro della Media Filtro della Mediana
Sale e pepe (0 o 255) Diffonde il rumore Rimuove senza distorcere i bordi
Gaussiano Riduce efficacemente Riduce parzialmente

3.12.9.4 📦 Specifica di Ingresso e Uscita (VPL)

Ingresso:

  • Riga 1: Intero \(L\).
  • Riga 2: Intero \(C\).
  • Righe successive: Elementi della matrice.

Uscita:

  • Matrice filtrata \(L \times C\).

3.12.9.5 📌 Esempi

Ingresso Uscita Osservazione
3
3
100 100 100
100 0 100
100 100 100
100 100 100
100 100 100
100 100 100
Punto nero eliminato: mediana di 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
Punto bianco (sale) eliminato
📉 Simulatore EP03_09: Filtro Mediano 3×3 g = Mediana(Vicini)

Inietta rumore impulsivo (sale e pepe) e passa il mouse sui pixel interni del risultato per ispezionare l'ordinamento del vettore di vicinanza e l'eliminazione del rumore.

Rumore sale (255) e pepe (0) — circa il 30% dei pixel interni interessati
Immagine f — Con Rumore Sale (255) e pepe (0) visibili
Risultato g — Senza Rumore Passa il mouse per ispezionare
Vettore di Vicinanza 3×3 — Ordinato Passa il mouse su un pixel interno del risultato per visualizzare
—
Legenda:
Finestra 3×3
Pixel Centrale
Bordo (Copiato)
Mediana
Rumore (Eliminato)
Passa il mouse su un pixel interno del risultato per vedere il processo di ordinamento.
Figura 3.34: Simulatore EP03_09: Filtro della Mediana 3×3
%%writefile EP03_09.cpp
// your solution
Overwriting EP03_09.cpp
TestSuite("EP03_09.cpp").run()
✔️ EP03_09.cases esiste già in casos/
📋 5 caso/i caricato/i da casos/EP03_09.cases

🔍 Test di C++: EP03_09.cpp
⚠️ EP03_09.cpp: file vuoto (meno di 3 righe). Test saltati.