TNI+VO · Exercice de Programmation

EP08_09 — 🟠 Gradient d’éclairage et seuillage adaptatif

8.14.9 EP08_09 🟠 Gradient d’éclairage et seuillage adaptatif

Dans cette variante, les objets sont immergés dans un fond avec un éclairage non uniforme (gradient doux d’éclairage). Le seuillage simple par valeur unique échoue, nécessitant un prétraitement plus robuste.

8.14.9.1 📋 Directives d’implémentation

  1. Entrée : image en niveaux de gris \(H \times W\) avec une variation de fond de \(20\) à \(180\).
  2. Prétraitement :
  • Appliquer un seuillage adaptatif (ex. : cv2.adaptiveThreshold avec une fenêtre gaussienne de \(15 \times 15\) et une constante \(C = 3\)) pour isoler les objets indépendamment de la variation du fond.

    cv2.adaptiveThreshold(img_gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, ksize, C) // 255

    ksize et C sont lus après l’image.

  • Opération morphologique de fermeture (\(3 \times 3\)) pour sceller d’éventuelles défaillances dans les contours.

  1. Mesure et classification : extraire les mesures.

  2. Tri et sortie : trier par (bbox[0], bbox[1]) et imprimer le tableau incluant la colonne class.

    • Pour trier, utiliser medidas.sort(key=lambda m: (m['bbox'][1], m['bbox'][0])), avec medidas = mm.measure(img, precision=0.02).

8.14.9.2 📌 Exemples

Entrée Sortie
16 32
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
…
k 20
id area perimeter cx cy x y w h circularity solidity vertices
1 9.0 12.0 10.0 5.0 8 3 5 5 0.79 1.000 4
2 28.3 18.8 25.0 12.0 22 9 7 7 1.00 1.000 3
🧮 Simulateur EP08_09 : Gradient d'éclairage et seuil adaptatif & Mesure OpenCV Adaptatif vs Global → Mesure
ÉTAPE DU TRAITEMENT
VISUALISATION DE LA MATRICE DE PIXELS
TABLEAU DES MESURES DES OBJETS (CALCULÉ AU SEUIL ADAPTATIF OK)
id aire périmètre cx cy x y w h circularité solidité sommets
Figure 8.23: Simulateur EP08_09 : Gradient d’éclairage, seuil adaptatif et mesure OpenCV
%%writefile EP08_09.py
# Code Python
Overwriting EP08_09.py
TestSuite("EP08_09.py").run()
✔️ EP08_09.cases existe déjà dans casos/
📋 3 cas chargé(s) depuis casos/EP08_09.cases

🔍 Test de Python : EP08_09.py
⚠️ EP08_09.py : fichier vide (moins de 3 lignes). Tests ignorés.