5.18.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.18.1.1 📋 Linee Guida di Implementazione
- Dimensioni: Leggere gli interi \(L\) (righe) e \(C\) (colonne) dello spettro di magnitudo — già fornito centrato (equivalente all’uscita di
np.fft.fftshift). - Frequenza di taglio: Leggere l’intero \(D_0\).
- Dati: Leggere i valori interi della matrice di magnitudo, riga per riga.
- Centro dello spettro: Calcolare \((c_y, c_x) = (L \mathbin{//} 2,\; C \mathbin{//} 2)\).
- Distanza: Per ogni posizione \((u,v)\), calcolare \[ D(u,v) = \sqrt{(u-c_y)^2 + (v-c_x)^2} \]
- Maschera ideale: Applicare \[ H(u,v) = \begin{cases} 1, & D(u,v) \le D_0 \\ 0, & D(u,v) > D_0 \end{cases} \]
- Filtraggio: Il valore di uscita è \(\text{mag}'(u,v) = \text{mag}(u,v) \cdot H(u,v)\).
- Uscita: Visualizzare la matrice filtrata con dimensioni \(L \times C\).
5.18.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.18.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.18.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.18.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\). |
%%writefile EP05_01.cpp
// your solutionOverwriting EP05_01.cpp
TestSuite("EP05_01.cpp").run()✔️ EP05_01.cases esiste già in casos/
📋 5 caso/i caricato/i da casos/EP05_01.cases
🔍 Test di C++: EP05_01.cpp
⚠️ EP05_01.cpp: file vuoto (meno di 3 righe). Test saltati.