TNI+VO · Exercice de Programmation

EP08_10 — 🔴 Contraste Faible et Séparation d’Objets Thèmes ( Watershed / Distance)

8.14.10 EP08_10 🔴 Contraste Faible et Séparation d’Objets Thèmes (Watershed / Distance)

Dans cet exercice, certains objets géométriques sont légèrement en contact (superposés sur les bords). La simple extraction des contours traiterait deux objets comme s’ils n’en formaient qu’un seul.

8.14.10.1 📋 Directives d’Implémentation

  1. Entrée : matrice \(H \times W\) en niveaux de gris avec des objets d’intensité \(110\dots140\) sur un fond \(0\), avec bruit et une paire d’objets tangents.
  2. Prétraitement et Séparation :
  • Application du seuillage.
  • Application de la Transformée de Distance (mm.dist).
  • Obtention des pics de distance pour servir de marqueurs dans la Transformée Watershed (mm.watershed), séparant physiquement les objets en contact dans le masque. Astuce : utiliser mm.regmax() pour obtenir les maxima locaux, puis les étiqueter avec mm.label0.
  • Après le watershed, appliquer à nouveau le seuillage avec mm.threshold(water,0)//255.
  1. Analyse des Composants Connectés : mesurer chaque région isolée après le Watershed.
  2. Sortie : imprimer les composants triés par (bbox[0], bbox[1]) avec leurs métriques individuelles de surface, centroïde et solidité.
    • Pour trier, utiliser medidas.sort(key=lambda m: (m['bbox'][1], m['bbox'][0])), avec medidas = mm.measure(img, precision=0.02).

8.14.10.2 📌 Exemples

Entrée Sortie
16 16
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
…
(image binaire contenant deux carrés)
id area perimeter cx cy x y w h solidity
1 16.0 16.0 5.0 5.0 3 3 5 5 1.000
2 16.0 16.0 11.0 5.0 9 3 5 5 1.000
🧮 Simulateur EP08_10 : Séparation de Disques Tangents (Transformée L2 & Watershed) mm.dist L2 → mm.watershed → Mesure
ÉTAPE DU TRAITEMENT MORPHOLOGIQUE
VISUALISATION DE LA MATRICE DE PIXELS
TABLEAU DES MESURES DES DISQUES APRÈS LA COUPE DU WATERSHED
id aire périmètre cx cy x y w h circularité solidité sommets
Figure 8.24: Simulateur EP08_10: Séparation de Disques Tangents via Transformée de Distance L2 et Watershed
%%writefile EP08_10.py
# Code Python
Overwriting EP08_10.py
TestSuite("EP08_10.py").run()
✔️ EP08_10.cases existe déjà dans casos/
📋 3 cas chargé(s) depuis casos/EP08_10.cases

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