👆 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.
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
- Dimensioni: Leggere gli interi \(L\) (righe) e \(C\) (colonne).
- Soglia: Leggere l’intero \(T\) (soglia di decisione).
- Dati: Leggere i valori interi della matrice originale riga per riga.
- 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
128
Ingresso Originale (Cliccabile)
Risultato Binarizzato (p')
Formula applicata: (p > 128) ? 255 : 0
%%writefile EP04_01.py
# Codice PythonOverwriting 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.