EDI+VA · Esercizio di Programmazione

EP01_11 — 📈 Analisi di Vicinato: Filtro di Massimo 1D

1.17.11 EP01_11 📈 Analisi di Vicinato: Filtro di Massimo 1D

In questa attività, devi implementare un semplice filtro morfologico di massimo che opera su un segnale unidimensionale (vettore).

  • Leggi un intero n, che rappresenta la dimensione del vettore.
  • Leggi i n elementi interi che compongono il vettore originale v1.
  • Crea un nuovo vettore v2, in cui ogni posizione \(i\) è il risultato del confronto tra l’elemento corrente e i suoi vicini immediati:

\[v2[i] = \max(v1[i-1],\; v1[i],\; v1[i+1])\]

📌 Importante:

  • Bordi: Alle estremità del vettore (indici \(0\) e \(n-1\)), il vicinato ha solo due elementi (quello stesso e l’unico vicino disponibile). All’indice \(0\), confronta solo \(v1[0]\) e \(v1[1]\). All’ultimo indice, confronta solo \(v1[n-2]\) e \(v1[n-1]\).
  • Output: Stampa l’intestazione “v2:” seguita dai valori del vettore risultante, uno per riga.
  • Per un simulatore interattivo su questo problema, vedi Figura 1.21 (passa il mouse sui risultati per visualizzare la finestra di vicinato utilizzata nel calcolo).

1.17.11.1 🧠 Perché analizzare i vicini?

Nell’elaborazione delle immagini, il valore di un pixel raramente è isolato; dipende dal contesto circostante. Il Filtro di Massimo è la base dell’operazione di Dilatazione nella morfologia matematica e serve a:

Funzione Effetto Visivo
Enfatizzazione Espande strutture luminose e “ingrossa” oggetti chiari.
Rimozione del Rumore Elimina piccoli punti neri (rumore “sale e pepe” scuro).
Riempimento Chiude piccoli buchi o lacune in forme binarie.

1.17.11.2 📋 Compito (specifica per VPL)

Input:

Un intero n.

Nelle righe successive, i n elementi interi del vettore.

Output:

La stringa v2: sulla prima riga.

Nelle righe successive, ogni elemento di v2 (uno per riga).

1.17.11.3 📌 Esempi

Input Output Osservazione
5
10
20
5
30
15
v2:
20
20
30
30
30
All’indice 1: max(10, 20, 5) = 20
📈 Simulatore EP01_11: Filtro di Massimo Locale 1D Finestra 1x3

Clicca sugli elementi di v1 (Ingresso) per generare nuovi valori individuali oppure passa il mouse sulle celle di v2 (Risultato) per ispezionare la finestra locale di vicinanza.

Vettore v1 (Ingresso)
⬇️
Vettore v2 (Risultato del Massimo)
Passa il cursore del mouse su una cella del vettore v2 per analizzare la finestra di massimo locale.
Figura 1.21: Simulatore EP01_11: Filtro di Massimo Locale 1D (Vicinato 1x3 con Condizione di Bordo)
%%writefile EP01_11.cpp
// your solution
Overwriting EP01_11.cpp
TestSuite("EP01_11.cpp").run()
✔️ EP01_11.cases esiste già in casos/
📋 7 caso/i caricato/i da casos/EP01_11.cases

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