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
Dimensioni e parametri: Leggere gli interi \(L\), \(C\), \(k\) (dimensione della finestra, sempre dispari) e \(T\) (soglia di varianza).
Immagine: Leggere gli \(L \times C\) valori interi della matrice di trama (intensità tra 0 e 255).
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.
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). \]
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à.
Arrotondamento: Arrotondare la varianza all’intero più vicino (round half away from zero, con
np.floor(res_norm + 0.5)).Soglia: Definire \(\text{maschera}(i,j)=1\) se la varianza arrotondata è strettamente maggiore di \(T\); altrimenti, definire \(\text{maschera}(i,j)=0\).
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. |
%%writefile EP06_06.py
# Codice PythonOverwriting 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.