PDI+VC · Ejercicio de Programación

EP08_10 — 🔴 Contraste Bajo y Separación de Objetos Tópicos ( Watershed / Distancia)

8.14.10 EP08_10 🔴 Contraste Bajo y Separación de Objetos Tópicos (Watershed / Distancia)

En este ejercicio, algunos objetos geométricos están ligeramente en contacto (superpuestos en los bordes). La simple extracción de contornos trataría dos objetos como uno solo.

8.14.10.1 📋 Directrices de Implementación

  1. Entrada: matriz \(H \times W\) en niveles de gris con objetos de intensidad \(110\dots140\) sobre fondo \(0\), con ruido y pares de objetos tangentes.
  2. Preprocesamiento y Separación:
  • Aplicación de la umbralización.
  • Aplicación de la Transformada de Distancia (mm.dist).
  • Obtención de los picos de distancia para que sirvan como marcadores en la Transformada Watershed (mm.watershed), separando físicamente los objetos en contacto en la máscara. Consejo: usar mm.regmax() para obtener los máximos locales y luego etiquetar con mm.label0.
  • Después del watershed, aplicar nuevamente la umbralización con mm.threshold(water,0)//255.
  1. Análisis de Componentes Conectados: medir cada región aislada después del Watershed.
  2. Salida: imprimir los componentes ordenados por (bbox[0], bbox[1]) con sus métricas individuales de área, centroide y solidez.
    • Para ordenar, usar medidas.sort(key=lambda m: (m['bbox'][1], m['bbox'][0])), con medidas = mm.measure(img, precision=0.02).

8.14.10.2 📌 Ejemplos

Entrada Salida
16 16
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
…
(imagen binaria que contiene dos cuadrados)
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
🧮 Simulador EP08_10: Separación de Discos Tangentes (Transformada L2 & Watershed) mm.dist L2 → mm.watershed → Medición
ETAPA DEL PROCESAMIENTO MORFOLÓGICO
VISUALIZACIÓN DE LA MATRIZ DE PÍXELES
TABLA DE MEDICIONES DE LOS DISCOS DESPUÉS DEL CORTE DEL WATERSHED
id área perímetro cx cy x y w h circularidad solidez vértices
Figura 8.24: Simulador EP08_10: Separación de Discos Tangentes mediante la Transformada de Distancia L2 y Watershed

[req 961564] Traduce este Markdown de portugués a español:

%%writefile EP08_10.py
# Código Python
Overwriting EP08_10.py
TestSuite("EP08_10.py").run()
✔️ EP08_10.cases ya existe en casos/
📋 3 caso(s) cargado(s) de casos/EP08_10.cases

🔍 Probando Python: EP08_10.py
⚠️ EP08_10.py: archivo vacío (menos de 3 líneas). Pruebas omitidas.