EDI+VA · Esercizio di Programmazione

EP05_02 — 🟡 Filtro Notch : Rimozione dei Picchi Periodici

5.13.2 EP05_02 🟡 Filtro Notch: Rimozione dei Picchi Periodici

Una telecamera di ispezione industriale acquisisce immagini di circuiti stampati, ma l’alimentazione della linea di produzione introduce un’interferenza elettrica periodica — un pattern di strisce quasi impercettibile a occhio nudo, che però appare nello spettro di Fourier come coppie di picchi luminosi posizionati simmetricamente attorno al centro. Il team di visione artificiale non può rielaborare l’acquisizione: deve localizzare e cancellare chirurgicamente queste coppie di picchi nello spettro, preservando tutta l’altra informazione utile dell’immagine.

Questo è il ruolo del filtro rigetta-banda notch: a differenza del passa-basso (che interessa una regione continua), esso agisce su punti specifici e sui loro simmetrici, lasciando intatto il resto dello spettro.

5.13.2.1 📋 Linee Guida di Implementazione

  1. Dimensioni: Leggere gli interi \(L\) (righe) e \(C\) (colonne) dello spettro di magnitudine centrato.
  2. Dati: Leggere i valori interi della matrice di magnitudine, riga per riga.
  3. Picchi: Leggere l’intero \(K\) (numero di coppie di picchi da rimuovere).
  4. Per ciascuno dei \(K\) picchi: leggere tre interi \(\Delta v\), \(\Delta u\), \(r\) — spostamento verticale, spostamento orizzontale e raggio del notch.
  5. Centro dello spettro: \((c_y, c_x) = (L \mathbin{//} 2,\; C \mathbin{//} 2)\).
  6. Soppressione simmetrica: per ogni picco, azzerare tutte le posizioni \((u,v)\) tali che la distanza dal punto \((c_y+\Delta v,\, c_x+\Delta u)\) sia \(\le r\), e anche tutte le posizioni con distanza \(\le r\) dal punto simmetrico \((c_y-\Delta v,\, c_x-\Delta u)\).
  7. Uscita: Visualizzare la matrice risultante con dimensioni \(L \times C\).

5.13.2.2 📌 Vincoli Computazionali

  • Simmetria obbligatoria: ogni picco indicato genera due dischi azzerati (il punto e il suo simmetrico rispetto al centro) — dimenticare il simmetrico è l’errore più comune.
  • Sovrapposizione: se due dischi si sovrappongono, la posizione rimane azzerata (non c’è “somma” o ripristino).
  • Confronto non stretto: una posizione viene azzerata se \(\text{distanza} \le r\).
  • Ordine di lettura: i \(K\) picchi devono essere elaborati nell’ordine in cui compaiono nell’input, ma il risultato finale non dipende dall’ordine (le operazioni di azzeramento sono commutative).

5.13.2.3 🧠 Fondamenti Teorici

Concetto Ruolo nel filtro notch
Picco in \((\Delta v, \Delta u)\) Frequenza dell’interferenza periodica rilevata visivamente nello spettro
Punto simmetrico \((-\Delta v,-\Delta u)\) Ogni DFT di segnale reale è hermitiana: i picchi compaiono sempre in coppie simmetriche rispetto al centro
Raggio \(r\) Controlla la “larghezza” della reiezione — un \(r\) grande rimuove più energia attorno al picco, ma anche informazione utile

5.13.2.4 📦 Specifica di Input e Output (VPL)

Input:

  • Riga 1: Intero \(L\).
  • Riga 2: Intero \(C\).
  • Righe successive: Elementi interi della matrice di magnitudine (centrata), \(L\) righe.
  • Riga successiva: Intero \(K\).
  • \(K\) righe successive: tre interi \(\Delta v\), \(\Delta u\), \(r\) (separati da spazi).

Output:

  • Matrice risultante in \(L\) righe e \(C\) colonne, separati da spazi.

5.13.2.5 📌 Esempi

Input Output Osservazione
5
5
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
1
1 1 0
1 2 3 4 5
6 0 8 9 10
11 12 13 14 15
16 17 18 0 20
21 22 23 24 25
Centro \((c_y, c_x) = (2, 2)\). Il picco indicato \((\Delta v, \Delta u) = (1, 1)\) genera il punto \((3, 3)\) (valore 19) e il suo simmetrico \((1, 1)\) (valore 7), entrambi azzerati con \(r=0\) (solo i punti esatti).
🎮 Simulatore EP05_02: Filtro Notch Coppia simmetrica
1
1
0
Muovi Δv e Δu per scegliere il picco — osserva che anche la coppia simmetrica viene filtrata.
Spettro 5×5 (Rosso = Rimosso dal Filtro)
–
Figura 5.33: Simulatore EP05_02: Filtro Notch
%%writefile EP05_02.py
# Codice Python
Overwriting EP05_02.py
TestSuite("EP05_02.py").run()
✔️ EP05_02.cases esiste già in casos/
📋 5 caso/i caricato/i da casos/EP05_02.cases

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