EDI+VA · Esercizio di Programmazione

EP04_08 — 🌋 Gradiente Morfologico, Top-hat e Black-hat

4.9.8 EP04_08 🌋 Gradiente Morfologico, Top-hat e Black-hat

Nell’ispezione automatica dei circuiti stampati, tre domande ricorrono continuamente: dove sono i bordi dei componenti? Quali dettagli chiari e piccoli (come i punti di saldatura) si distinguono dallo sfondo? Quali incavi scuri (come le cricche) lo sfondo nasconde? Una singola coppia erosione/dilatazione risponde a tutte e tre: il gradiente morfologico evidenzia i contorni, il top-hat rivela i picchi stretti, e il black-hat rivela le valli strette — tre strumenti, un solo intorno. Vedi in Figura 4.37 una simulazione di questo EP.

4.9.8.1 📋 Linee Guida di Implementazione

  1. Dimensioni dell’immagine: Leggere gli interi \(L\) (righe) e \(C\) (colonne) di \(f\).
  2. Dimensioni di \(B\): Leggere gli interi \(L_B\) (righe) e \(C_B\) (colonne) dell’elemento strutturante.
  3. Elemento strutturante: Leggere la matrice \(B\) con valori \(0\) o \(1\), riga per riga.
  4. Dati: Leggere la matrice \(f\) (l’immagine originale, in scala di grigi), riga per riga.
  5. Operatori di base: Calcolare, esattamente come negli EP 04_03 fino a 04_06:
    • \(d = f \oplus B\) (dilatazione),
    • \(e = f \ominus B\) (erosione),
    • \(\text{ apertura} = e \oplus B\),
    • \(\text{chiusura} = d \ominus B\).
  6. Gradiente morfologico: \(\text{grad}(y,x) = d(y,x) - e(y,x)\).
  7. Top-hat: \(\text{tophat}(y,x) = f(y,x) - \text{apertura}(y,x)\).
  8. Black-hat: \(\text{blackhat}(y,x) = \text{chiusura}(y,x) - f(y,x)\).
  9. Output: Mostrare, in questo ordine, le tre matrici complete: gradiente, top-hat, black-hat.

4.9.8.2 📌 Vincoli Computazionali

  • Nessun padding in nessuna fase intermedia — dilatazione, erosione, apertura e chiusura seguono le stesse regole di vicinato degli EP precedenti.
  • Nessun clipping: le tre uscite possono contenere qualsiasi valore intero (il gradiente è sempre \(\geq 0\), ma anche top-hat e black-hat lo sono).
  • Riutilizzo: \(d\) e \(e\) devono essere calcolati una sola volta e riutilizzati per costruire apertura, chiusura e gradiente.

4.9.8.3 🧠 Fondamenti Teorici

Operatore Formula Cosa rivela
Gradiente \(d - e\) Bordi: zero in regioni piatte, alto nelle transizioni
Top-hat \(f - \text{apertura}(f)\) Elementi chiari e sottili, più piccoli di \(B\)
Black-hat \(\text{chiusura}(f) - f\) Elementi scuri e sottili, più piccoli di \(B\)

4.9.8.4 📦 Specifica di Input e Output (VPL)

Input:

  • Riga 1: Intero \(L\).
  • Riga 2: Intero \(C\).
  • Riga 3: Intero \(L_B\).
  • Riga 4: Intero \(C_B\).
  • Prossime \(L_B\) righe: elementi interi (\(0\) o \(1\)) della matrice \(B\).
  • Prossime \(L\) righe: elementi interi della matrice \(f\).

Output:

  • Matrice gradiente in \(L\) righe e \(C\) colonne.
  • Matrice top-hat in \(L\) righe e \(C\) colonne.
  • Matrice black-hat in \(L\) righe e \(C\) colonne.

4.9.8.5 📌 Esempi

Input Output Osservazione
9
9
3
3
1 1 1
1 1 1
1 1 1
10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 10 10
10 10 80 10 10 10 10 10 10
10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 2 10 10
10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 10 10
(gradiente: alone \(3\times3=70\) attorno a \((2,2)\) e alone \(3\times3=8\) attorno a \((6,6)\), resto \(0\))
(top-hat: unico \(70\) in \((2,2)\), resto \(0\))
(black-hat: unico \(8\) in \((6,6)\), resto \(0\))
Picco isolato diventa top-hat; valle isolata diventa black-hat; entrambi appaiono nel gradiente
🌋 Simulatore EP04_08: Gradiente / Top-hat / Black-hat 3 operatori, 1 vicinanza

Aggiungi picchi o valli nella matrice f e osserva il comportamento simultaneo degli operatori gradiente, top-hat e black-hat.

f (Ingresso)
Gradiente
Top-hat
Black-hat
Figura 4.37: Simulatore EP04_08: Gradiente morfologico, Top-hat e Black-hat
%%writefile EP04_08.py
# Codice Python
Overwriting EP04_08.py
TestSuite("EP04_08.py").run()
✔️ EP04_08.cases esiste già in casos/
📋 4 caso/i caricato/i da casos/EP04_08.cases

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