EDI+VA · Esercizio di Programmazione

EP06_06 — 🔴 Mappa di Varianza Locale per il Rilevamento di Trama

6.14.6 EP06_06 🔴 Mappa di Varianza Locale per il Rilevamento di Trama

Una fabbrica tessile deve ispezionare rotoli di tessuto in tempo reale, senza disporre di un’immagine di riferimento — ogni rotolo presenta piccole variazioni naturali. In questa situazione, la strategia presentata nel capitolo consiste nell’analizzare l’omogeneità locale della trama: le regioni uniformi presentano una bassa varianza di intensità in piccoli intorni, mentre graffi, macchie e difetti di fabbricazione producono aumenti locali di tale varianza.

In questo esercizio, implementerai il nucleo di questo metodo, calcolando la varianza locale in una finestra scorrevole e generando una maschera binaria che identifica le regioni la cui varianza supera una soglia.

6.14.6.1 📋 Linee Guida di Implementazione

  1. Dimensioni e parametri: Leggere gli interi \(L\), \(C\), \(k\) (dimensione della finestra, sempre dispari) e \(T\) (soglia di varianza).

  2. Immagine: Leggere gli \(L \times C\) valori interi della matrice di trama (intensità tra 0 e 255).

  3. Gestione dei bordi: Quando la finestra supera i limiti dell’immagine, utilizzare la replicazione del bordo, cioè ripetere il valore del pixel valido più vicino.

  4. Media locale: Per ogni posizione \((i,j)\), calcolare \[ \mu(i,j)= \frac{1}{k^2} \sum_{(p,q)\in\text{finestra}} \text{trama}(p,q). \]

  5. Varianza locale: Calcolare la varianza della popolazione della finestra, \[ \sigma^2(i,j)= \frac{1}{k^2} \sum_{(p,q)\in\text{finestra}} \left(\text{trama}(p,q)-\mu(i,j)\right)^2, \] o, in modo equivalente, \[ \sigma^2(i,j)=\overline{x^2}-\mu(i,j)^2, \] dove \(\overline{x^2}\) rappresenta la media dei quadrati delle intensità.

  6. Arrotondamento: Arrotondare la varianza all’intero più vicino (round half away from zero, con np.floor(res_norm + 0.5)).

  7. Soglia: Definire \(\text{maschera}(i,j)=1\) se la varianza arrotondata è strettamente maggiore di \(T\); altrimenti, definire \(\text{maschera}(i,j)=0\).

  8. Output: Stampare la maschera binaria risultante.

6.14.6.2 📌 Vincoli Computazionali

  • Replicazione del bordo: utilizzare il valore del pixel valido più vicino ogni volta che la finestra supera i limiti dell’immagine.
  • Varianza della popolazione: utilizzare il denominatore \(k^2\), mai \(k^2-1\).
  • Confronto stretto: la maschera deve essere calcolata utilizzando la condizione \(\sigma^2_{\text{arrotondata}}>T\).
  • Finestra dispari: il valore di \(k\) è sempre dispari, garantendo un pixel centrale.

6.14.6.3 🧠 Fondamento Teorico

Situazione Varianza locale Interpretazione
Regione uniforme Bassa Intensità simili nell’intorno.
Regione con difetto Alta La presenza di intensità distinte aumenta la dispersione dei valori.
Finestra piccola Maggiore sensibilità a dettagli e rumore Rileva alterazioni localizzate.
Finestra grande Risposta più uniforme Evidenzia difetti più grandi, ma riduce la precisione della loro localizzazione.

La varianza locale misura la dispersione delle intensità in un intorno. Le regioni omogenee presentano una bassa varianza, mentre le alterazioni nella trama aumentano questa misura, consentendo di identificare possibili difetti tramite una semplice sogliatura.

6.14.6.4 📦 Specifica di Input e Output (VPL)

Input:

  • Riga 1: Intero \(L\).
  • Riga 2: Intero \(C\).
  • Riga 3: Intero \(k\) (dispari).
  • Riga 4: Intero \(T\).
  • Prossime \(L\) righe: elementi interi della matrice di trama.

Output:

  • Maschera binaria (valori 0 o 1), con \(L\) righe e \(C\) colonne.

6.14.6.5 📌 Esempi

Input Output Osservazione
3
3
3
50
10 10 10
10 10 10
10 90 10
0 0 0
1 1 1
1 1 1
Il difetto aumenta la varianza in tutte le finestre che lo contengono.
2
2
3
5
100 100
100 100
0 0
0 0
La trama è uniforme; la varianza è nulla in tutta l’immagine.
🎮 Simulatore EP06_06: Varianza Locale (Rilevamento della Trama) σ² = média(x²) − média(x)²
Regola il valore del difetto e la soglia T; osserva come la finestra 3×3 diffonde il rilevamento nella vicinanza.
Trama (3×3)
Maschera di Difetto
–
Figura 6.26: Simulatore EP06_06: Mappa della Varianza Locale per il Rilevamento della Trama
%%writefile EP06_06.py
# Codice Python
Overwriting EP06_06.py
TestSuite("EP06_06.py").run()
✔️ EP06_06.cases esiste già in casos/
📋 5 caso/i caricato/i da casos/EP06_06.cases

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