TNI+VO · Exercice de Programmation

EP04_01 — 🎚️ Seuillage global par seuil fixe

4.9.1 EP04_01 🎚️ Seuillage global par seuil fixe

Dans les scanners de documents et les systèmes de lecture de codes-barres, la première étape du traitement consiste toujours à séparer ce qui est « objet » (encre, texte, barres) de ce qui est « fond » (papier, emballage). Le seuillage global fait exactement cela : il compare chaque pixel à un seuil unique \(T\) et décide, en temps réel, s’il appartient à la classe claire ou à la classe sombre. C’est l’opérateur de segmentation le plus simple — et pourtant, il est à l’origine d’une grande partie des pipelines industriels d’inspection visuelle. Voir la simulation de cet EP dans Figure 4.30.

4.9.1.1 📋 Directives d’implémentation

  1. Dimensions : Lire les entiers \(L\) (lignes) et \(C\) (colonnes).
  2. Seuil : Lire l’entier \(T\) (seuil de décision).
  3. Données : Lire les valeurs entières de la matrice originale ligne par ligne.
  4. Mappage : Pour chaque pixel \(p\), calculer la nouvelle valeur à l’aide de l’équation :

\[ p' = \begin{cases} 255, & \text{si } p > T \\ 0, & \text{si } p \le T \end{cases} \] 5. Sortie : Afficher la matrice binarisée avec les dimensions \(L \times C\).

4.9.1.2 📌 Contraintes computationnelles

  • Binarisation : La sortie contient uniquement les valeurs \(0\) ou \(255\).
  • Comparaison stricte : Le critère utilise \(> T\) (les pixels égaux à \(T\) deviennent du fond).
  • Type : Le résultat final doit être entier.
  • Remarque : Cet EP suit la convention d’OpenCV (cv2.THRESL_BINARY) : seuls les pixels avec une valeur supérieure à \(T\) deviennent blancs (255) ; les pixels avec une valeur égale à \(T\) restent noirs (0).

4.9.1.3 🧠 Fondement théorique

Paramètre Type Impact visuel
\(T\) petit Entier La plupart des pixels deviennent blancs
\(T\) grand Entier La plupart des pixels deviennent noirs
\(T\) bien choisi Entier Sépare nettement l’objet et le fond

4.9.1.4 📦 Spécification d’entrée et de sortie (VPL)

Entrée :

  • Ligne 1 : Entier \(L\).
  • Ligne 2 : Entier \(C\).
  • Ligne 3 : Entier \(T\).
  • Lignes suivantes : Éléments entiers de la matrice originale.

Sortie :

  • Matrice binarisée en \(L\) lignes et \(C\) colonnes, valeurs \(0\) ou \(255\) séparées par des espaces.

4.9.1.5 📌 Exemples

Entrée Sortie Remarque
2
4
100
0 99 100 180
255 30 120 80
0 0 0 255
255 0 255 0
\(T=100\) : seuls les pixels avec une valeur supérieure à 100 deviennent blancs ;
par conséquent, 99 et 100 deviennent noirs.
1
3
0
0 50 255
0 255 255 \(T=0\) : seuls les pixels avec une valeur strictement supérieure à 0 deviennent blancs.
🎚️ Simulateur EP04_01 : Seuillage global p' = (p > T) ? 255 : 0

👆 Cliquez sur une cellule de la Entrée originale pour assombrir le pixel (−30) et cliquez avec le bouton droit pour éclaircir (+30). Ajustez le seuil T pour la binarisation.

128
Entrée originale (cliquable)
Résultat binarisé (p')
Formule appliquée : (p > 128) ? 255 : 0
Figure 4.30: Simulateur EP04_01 : Seuillage global par seuil fixe (p’ = (p > T) ? 255 : 0)
%%writefile EP04_01.cpp
// your solution
Overwriting EP04_01.cpp
TestSuite("EP04_01.cpp").run()
✔️ EP04_01.cases existe déjà dans casos/
📋 7 cas chargé(s) depuis casos/EP04_01.cases

🔍 Test de C++ : EP04_01.cpp
⚠️ EP04_01.cpp : fichier vide (moins de 3 lignes). Tests ignorés.