EDI+VA · Esercizio di Programmazione

EP04_01 — 🎚️ Soglia Globale con Soglia Fissa

4.9.1 EP04_01 🎚️ Soglia Globale con Soglia Fissa

Negli scanner di documenti e nei sistemi di lettura di codici a barre, la prima fase dell’elaborazione consiste sempre nel separare ciò che è “oggetto” (inchiostro, testo, barre) da ciò che è “sfondo” (carta, imballaggio). La soglia globale fa esattamente questo: confronta ogni pixel con un’unica soglia \(T\) e decide, in tempo reale, se esso appartiene alla classe chiara o alla classe scura. È l’operatore di segmentazione più semplice — eppure è alla base di gran parte dei pipeline industriali di ispezione visiva. Vedi in Figura 4.30 una simulazione di questo EP.

4.9.1.1 📋 Linee Guida di Implementazione

  1. Dimensioni: Leggere gli interi \(L\) (righe) e \(C\) (colonne).
  2. Soglia: Leggere l’intero \(T\) (soglia di decisione).
  3. Dati: Leggere i valori interi della matrice originale riga per riga.
  4. Mappatura: Per ogni pixel \(p\), calcolare il nuovo valore tramite l’equazione:

\[ p' = \begin{cases} 255, & \text{se } p > T \\ 0, & \text{se } p \le T \end{cases} \] 5. Output: Visualizzare la matrice binarizzata con dimensioni \(L \times C\).

4.9.1.2 📌 Vincoli Computazionali

  • Binarizzazione: L’output contiene solo i valori \(0\) o \(255\).
  • Confronto rigoroso: Il criterio usa \(> T\) (i pixel uguali a \(T\) diventano sfondo).
  • Tipo: Il risultato finale deve essere intero.
  • Osservazione: Questo EP segue la convenzione di OpenCV (cv2.THRESH_BINARY): solo i pixel con valore maggiore di \(T\) diventano bianchi (255); i pixel con valore uguale a \(T\) restano neri (0).

4.9.1.3 🧠 Fondamenti Teorici

Parametro Tipo Impatto Visivo
\(T\) piccolo Intero La maggior parte dei pixel diventa bianca
\(T\) grande Intero La maggior parte dei pixel diventa nera
\(T\) ben scelto Intero Separa nettamente oggetto e sfondo

4.9.1.4 📦 Specifica di Input e Output (VPL)

Input:

  • Riga 1: Intero \(L\).
  • Riga 2: Intero \(C\).
  • Riga 3: Intero \(T\).
  • Righe successive: Elementi interi della matrice originale.

Output:

  • Matrice binarizzata in \(L\) righe e \(C\) colonne, valori \(0\) o \(255\) separati da spazi.

4.9.1.5 📌 Esempi

Input Output Osservazione
2
4
100
0 99 100 180
255 30 120 80
0 0 0 255
255 0 255 0
\(T=100\): solo i pixel con valore maggiore di 100 diventano bianchi;
pertanto, 99 e 100 diventano neri.
1
3
0
0 50 255
0 255 255 \(T=0\): solo i pixel con valore strettamente maggiore di 0 diventano bianchi.
🎚️ Simulatore EP04_01: Soglia Globale p' = (p > T) ? 255 : 0

👆 Clicca su una cella della Ingresso Originale per scurire il pixel (−30) e clicca con il tasto destro per schiarire (+30). Regola la soglia T per la binarizzazione.

128
Ingresso Originale (Cliccabile)
Risultato Binarizzato (p')
Formula applicata: (p > 128) ? 255 : 0
Figura 4.30: Simulatore EP04_01: Soglia Globale con Soglia Fissa (p’ = (p > T) ? 255 : 0)
%%writefile EP04_01.py
# Codice Python
Overwriting EP04_01.py
TestSuite("EP04_01.py").run()
✔️ EP04_01.cases esiste già in casos/
📋 7 caso/i caricato/i da casos/EP04_01.cases

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