👆 Clic sinistro scurisce (−25) e clic con tasto destro schiarisce (+25) i pixel dell'input. Osserva la soglia ottimale T* adattarsi dinamicamente all'istogramma.
T* = −
Scegliere manualmente la soglia \(T\) funziona quando l’illuminazione è stabile, ma in microscopia digitale e nell’ispezione di strisci di sangue, ogni campione ha un contrasto diverso — una soglia fissa fallirebbe da un’immagine all’altra. Il metodo di Otsu risolve questo problema trovando, da solo, la soglia che massimizza la separazione statistica tra le due classi di pixel, rendendo la segmentazione automatica e adattiva. Vedi in Figura 4.31 una simulazione di questo EP.
Dimensioni: Leggere gli interi \(L\) (righe) e \(C\) (colonne).
Dati: Leggere i valori interi della matrice originale riga per riga.
Istogramma: Costruire l’istogramma \(h[i]\), \(i=0,\dots,255\), contando quanti pixel hanno valore \(i\).
Ricerca della soglia: Per ogni candidato \(T\) da \(1\) a \(255\), calcolare la varianza tra le classi: \[ \sigma_B^2(T) = \frac{n_0 \cdot n_1}{N^2}\,(m_0 - m_1)^2 \] dove \(n_0,n_1\) sono le quantità di pixel con valore \(<T\) e \(\geq T\), \(m_0,m_1\) sono le loro medie, e \(N=L\times C\).
Scelta: La soglia ottimale \(T^*\) è quella che massimizza \(\sigma_B^2(T)\) (in caso di pareggio, mantenere la prima trovata).
Applicazione: Binarizzare l’immagine usando T*, applicando: \[ p' = \begin{cases} 255, & \text{se } p > T^* \\ 0, & \text{se } p \le T^* \end{cases} \]
cv2.THRESL_BINARY; i pixel con valore esattamente uguale a \(T^*\) diventano neri.| Concetto | Significato | Impatto |
|---|---|---|
| \(\sigma_B^2(T)\) alta | Classi ben separate in \(T\) | \(T\) è un buon candidato come soglia |
| Istogramma bimodale | Due “colline” distinte | Otsu trova la valle tra di esse |
| Istogramma unimodale | Una sola “collina” | Otsu sceglie comunque qualche \(T\), ma la segmentazione è poco affidabile |
Input:
Output:
| Input | Output | Osservazione |
|---|---|---|
| 4 4 12 12 12 200 12 12 200 200 12 200 200 200 200 200 200 200 |
0 0 0 255 0 0 255 255 0 255 255 255 255 255 255 255 |
Istogramma bimodale chiaro: 12 e 200 |
| 1 2 10 250 |
0 250 | Solo due valori: \(T^*\) si colloca sul maggiore |
👆 Clic sinistro scurisce (−25) e clic con tasto destro schiarisce (+25) i pixel dell'input. Osserva la soglia ottimale T* adattarsi dinamicamente all'istogramma.
T* = −
%%writefile EP04_02.cpp
// your solutionOverwriting EP04_02.cpp
TestSuite("EP04_02.cpp").run()✔️ EP04_02.cases esiste già in casos/
📋 5 caso/i caricato/i da casos/EP04_02.cases
🔍 Test di C++: EP04_02.cpp
⚠️ EP04_02.cpp: file vuoto (meno di 3 righe). Test saltati.