EDI+VA · Esercizio di Programmazione

EP05_01 — 🟢 Filtro Passa-Basso Ideale per Distanza nello Spettro

5.13.1 EP05_01 🟢 Filtro Passa-Basso Ideale per Distanza nello Spettro

In uno scanner di documenti antico, il sensore cattura carta stropicciata e la trama delle fibre insieme al testo — rumore ad alta frequenza che “inquina” lo spettro ai bordi. Il tecnico della manutenzione non ha accesso all’immagine originale, ma solo allo spettro di magnitudo già calcolato dal software dello scanner. Il suo compito è semplice e chirurgico: mantenere solo il cerchio centrale delle basse frequenze (la struttura globale del documento) ed eliminare tutto ciò che si trova al di fuori del raggio \(D_0\), rimuovendo la trama fine senza nemmeno dover toccare l’immagine spaziale.

Questo è il Filtro Passa-Basso Ideale (LPFI): l’operazione spettrale più diretta del capitolo, ma anche quella che meglio rivela l’anatomia di uno spettro centrato.

5.13.1.1 📋 Linee Guida di Implementazione

  1. Dimensioni: Leggere gli interi \(L\) (righe) e \(C\) (colonne) dello spettro di magnitudo — già fornito centrato (equivalente all’uscita di np.fft.fftshift).
  2. Frequenza di taglio: Leggere l’intero \(D_0\).
  3. Dati: Leggere i valori interi della matrice di magnitudo, riga per riga.
  4. Centro dello spettro: Calcolare \((c_y, c_x) = (L \mathbin{//} 2,\; C \mathbin{//} 2)\).
  5. Distanza: Per ogni posizione \((u,v)\), calcolare \[ D(u,v) = \sqrt{(u-c_y)^2 + (v-c_x)^2} \]
  6. Maschera ideale: Applicare \[ H(u,v) = \begin{cases} 1, & D(u,v) \le D_0 \\ 0, & D(u,v) > D_0 \end{cases} \]
  7. Filtraggio: Il valore di uscita è \(\text{mag}'(u,v) = \text{mag}(u,v) \cdot H(u,v)\).
  8. Uscita: Visualizzare la matrice filtrata con dimensioni \(L \times C\).

5.13.1.2 📌 Vincoli Computazionali

  • Confronto non stretto: il criterio usa \(D(u,v) \le D_0\) (il confine appartiene al filtro, cioè viene mantenuto).
  • Tipo: tutti i valori di ingresso e uscita sono interi; la distanza è calcolata in virgola mobile solo internamente.
  • Nessun arrotondamento della magnitudo: poiché l’ingresso è già intero e la maschera è binaria (0 o 1), l’uscita non richiede mai arrotondamento.

5.13.1.3 🧠 Fondamenti Teorici

Regione Distanza dal centro Effetto del filtro
Centro (\(D \le D_0\)) Basse frequenze Preservate — struttura globale mantenuta
Bordi (\(D > D_0\)) Alte frequenze Azzerate — trama e rumore rimossi
\(D_0\) piccolo — L’immagine ricostruita sarebbe molto sfocata
\(D_0\) grande — Poca filtrazione; quasi tutta l’energia preservata

5.13.1.4 📦 Specifica di Ingresso e Uscita (VPL)

Ingresso:

  • Riga 1: Intero \(L\).
  • Riga 2: Intero \(C\).
  • Riga 3: Intero \(D_0\).
  • Righe successive: Elementi interi della matrice di magnitudo (centrata).

Uscita:

  • Matrice filtrata con \(L\) righe e \(C\) colonne, separati da spazi.

5.13.1.5 📌 Esempi

Ingresso Uscita Osservazione
3
3
1
10 20 30
40 50 60
70 80 90
0 20 0
40 50 60
0 80 0
Centro \((1,1)\). Gli angoli hanno \(D=\sqrt{2}\approx1.41 > 1\), quindi vengono azzerati; i vicini ortogonali hanno \(D=1 \le 1\) e sono mantenuti.
1
3
0
5 9 7
0 9 0 \(L=1, C=3\): centro in \((0,1)\). Solo la posizione centrale stessa (\(D=0\)) sopravvive a \(D_0=0\).
🎮 Simulatore EP05_01: Filtro Passa-Basso Ideale H = (D ≤ D₀) ? 1 : 0
Regola D₀ e osserva quali posizioni dello spettro 5×5 sopravvivono al filtro.
Spettro Originale (Magnitudine)
Risultato Filtrato
–
Figura 5.32: Simulatore EP05_01: Filtro Passa-Basso Ideale nello Spettro
%%writefile EP05_01.py
# Codice Python
Overwriting EP05_01.py
TestSuite("EP05_01.py").run()
✔️ EP05_01.cases esiste già in casos/
📋 5 caso/i caricato/i da casos/EP05_01.cases

🔍 Test di Python: EP05_01.py
⚠️ EP05_01.py: file vuoto (meno di 3 righe). Test saltati.