EDI+VA · Esercizio di Programmazione

EP04_06 — 🧩 Chiusura Morfologica (Riempimento delle Lacune)

4.9.6 EP04_06 🧩 Chiusura Morfologica (Riempimento delle Lacune)

Nella digitalizzazione delle impronte digitali, i solchi della pelle talvolta vengono interrotti da sporco o secchezza, creando piccole lacune nella curva continua che dovrebbe esistere. La chiusura — dilatazione seguita da erosione con lo stesso elemento strutturante — è l’operatore duale dell’apertura: riempie piccoli buchi e rientranze strette, senza alterare significativamente il contorno esterno dell’oggetto. È la fase standard prima di estrarre lo scheletro di un’impronta digitale. Vedi una simulazione di questo EP in Figura 4.35.

4.9.6.1 📋 Linee Guida di Implementazione

  1. Dimensioni dell’immagine: Leggere gli interi \(L\) (righe) e \(C\) (colonne) da \(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 binaria \(f\) (valori \(0\) o \(1\)), riga per riga.
  5. Dilatazione: Calcolare \(d = f \oplus B\), usando esattamente l’algoritmo del EP04_03 (riflettendo \(B\), senza padding).
  6. Erosione: Calcolare \(g = d \ominus B\), usando esattamente l’algoritmo del EP04_04 (senza riflettere \(B\), senza padding) — ora applicato su \(d\), non su \(f\).
  7. Uscita: Visualizzare la matrice risultante \(g\) (la chiusura di \(f\) per \(B\)) con dimensioni \(L \times C\).

4.9.6.2 📌 Vincoli Computazionali

  • Ordine fisso: È sempre prima la dilatazione, poi l’erosione — l’ordine inverso è l’apertura del EP04_05.
  • Stesso \(B\): L’elemento strutturante usato nella dilatazione e nell’erosione deve essere identico.
  • Nessun padding in nessuna delle due fasi.

4.9.6.3 🧠 Fondamento Teorico

Concetto Significato Impatto Visivo
Estensività \(g \supseteq f\) sempre La chiusura non rimuove mai pixel, solo aggiunge
Idempotenza \(\text{chiudi}(\text{chiudi}(f)) = \text{chiudi}(f)\) Applicare di nuovo non cambia più nulla
Piccoli buchi Minori di \(B\) Vengono completamente riempiti
Dualità \(\text{chiudi}(f) = \overline{\text{apri}(\bar f)}\) È l’apertura applicata al “negativo” dell’immagine

4.9.6.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 (\(0\) o \(1\)) della matrice \(f\).

Output:

  • Matrice risultante in \(L\) righe e \(C\) colonne, valori \(0\) o \(1\).

4.9.6.5 📌 Esempi

Input Output Osservazione
8
8
3
3
1 1 1
1 1 1
1 1 1
0 0 0 0 0 0 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
0 0 1 0 1 1 0 0
0 0 1 1 0 1 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
0 0 0 0 0 0 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
I due buchi interni non adiacenti vengono completamente riempiti
🧩 Simulatore EP04_06: Chiusura Morfologica g = (f ⊕ B) ⊖ B

Fai clic sulle celle di f originale per accendere o spegnere i pixel (riempi i buchi interni!) e regola la dimensione dell'elemento strutturante B.


3×3
f Originale (Cliccabile)
d = f ⊕ B (Dilatazione)
g = d ⊖ B (Chiusura)
Figura 4.35: Simulatore EP04_06: Chiusura Morfologica (g = (f ⊕ B) ⊖ B)
%%writefile EP04_06.cpp
// your solution
Overwriting EP04_06.cpp
TestSuite("EP04_06.cpp").run()
✔️ EP04_06.cases esiste già in casos/
📋 5 caso/i caricato/i da casos/EP04_06.cases

🔍 Test di C++: EP04_06.cpp
⚠️ EP04_06.cpp: file vuoto (meno di 3 righe). Test saltati.