👆 Clic gauche assombrit (−25) et clic droit éclaircit (+25) les pixels d'entrée. Observez le seuil optimal T* s'ajuster dynamiquement à l'histogramme.
T* = −
Choisir manuellement le seuil \(T\) fonctionne lorsque l’éclairage est stable, mais en microscopie numérique et en inspection de lames de sang, chaque échantillon présente un contraste différent — un seuil fixe échouerait d’une image à l’autre. La méthode d’Otsu résout ce problème en trouvant, de manière autonome, le seuil qui maximise la séparation statistique entre les deux classes de pixels, rendant la segmentation automatique et adaptative. Voir dans Figure 4.31 une simulation de cet EP.
Dimensions : Lire les entiers \(L\) (lignes) et \(C\) (colonnes).
Données : Lire les valeurs entières de la matrice originale ligne par ligne.
Histogramme : Construire l’histogramme \(h[i]\), \(i=0,\dots,255\), en comptant combien de pixels ont la valeur \(i\).
Recherche du seuil : Pour chaque candidat \(T\) de \(1\) à \(255\), calculer la variance inter-classes : \[ \sigma_B^2(T) = \frac{n_0 \cdot n_1}{N^2}\,(m_0 - m_1)^2 \] où \(n_0,n_1\) sont les quantités de pixels ayant une valeur \(<T\) et \(\geq T\), \(m_0,m_1\) sont leurs moyennes, et \(N=L\times C\).
Choix : Le seuil optimal \(T^*\) est celui qui maximise \(\sigma_B^2(T)\) (en cas d’égalité, conserver le premier trouvé).
Application : Binariser l’image en utilisant \(T^*\), en appliquant : \[ p' = \begin{cases} 255, & \text{si } p > T^* \\ 0, & \text{si } p \le T^* \end{cases} \]
cv2.THRESL_BINARY ; les pixels ayant une valeur exactement égale à \(T^*\) deviennent noirs.| Concept | Signification | Impact |
|---|---|---|
| \(\sigma_B^2(T)\) élevée | Classes bien séparées en \(T\) | \(T\) est un bon candidat comme seuil |
| Histogramme bimodal | Deux « pics » distincts | Otsu trouve le creux entre eux |
| Histogramme unimodal | Un seul « pic » | Otsu choisit toujours un \(T\), mais la segmentation est peu fiable |
Entrée :
Sortie :
| Entrée | Sortie | Observation |
|---|---|---|
| 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 |
Histogramme bimodal net : 12 et 200 |
| 1 2 10 250 |
0 250 | Deux valeurs seulement : \(T^*\) reste sur la plus grande |
👆 Clic gauche assombrit (−25) et clic droit éclaircit (+25) les pixels d'entrée. Observez le seuil optimal T* s'ajuster dynamiquement à l'histogramme.
T* = −
%%writefile EP04_02.cpp
// your solutionOverwriting EP04_02.cpp
TestSuite("EP04_02.cpp").run()✔️ EP04_02.cases existe déjà dans casos/
📋 5 cas chargé(s) depuis casos/EP04_02.cases
🔍 Test de C++ : EP04_02.cpp
⚠️ EP04_02.cpp : fichier vide (moins de 3 lignes). Tests ignorés.