PDI+VC · Exercício de Programação

EP08_10 — 🔴 Contraste Baixo e Separação de Objetos Tópicos ( Watershed / Distância)

8.14.10 EP08_10 🔴 Contraste Baixo e Separação de Objetos Tópicos (Watershed / Distância)

Neste exercício, alguns objetos geométricos estão levemente encostados (sobrepostos nas bordas). A simples extração de contornos trataria dois objetos como um só.

8.14.10.1 📋 Diretrizes de Implementação

  1. Entrada: matriz \(H \times W\) em níveis de cinza com objetos de intensidade \(110\dots140\) sobre fundo \(0\), com ruído e par de objetos tangentes.
  2. Pré-processamento e Separação:
  • Aplicação da Limiarização.
  • Aplicação da Transformada de Distância (mm.dist).
  • Obtenção dos picos de distância para servirem de marcadores na Transformada Watershed (mm.watershed), separando fisicamente os objetos encostados na máscara. Dica: usar mm.regmax() para obter os máximos locais e em seguida rotular com mm.label0.
  • Após o watershed, aplicar a limiarização novamente com mm.threshold(water,0)//255.
  1. Análise de Componentes Conectados: medir cada região isolada pós-Watershed.
  2. Saída: imprimir os componentes ordenados por (bbox[0], bbox[1]) com suas métricas individuais de área, centroide e solidez.
    • Para ordenar, usar medidas.sort(key=lambda m: (m['bbox'][1], m['bbox'][0])), com medidas = mm.measure(img, precision=0.02).

8.14.10.2 📌 Exemplos

Entrada Saída
16 16
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
…
(imagem binária contendo dois quadrados)
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: Separação de Discos Tangentes (Transformada L2 & Watershed) mm.dist L2 → mm.watershed → Medição
ETAPA DO PROCESSAMENTO MORFOLÓGICO
VISUALIZAÇÃO DA MATRIZ DE PÍXEIS
TABELA DE MEDIÇÕES DOS DISCOS APÓS O CORTE DO WATERSHED
id area perimeter cx cy x y w h circularity solidity vertices
Figura 8.24: Simulador EP08_10: Separação de Discos Tangentes via Transformada de Distância L2 e Watershed
%%writefile EP08_10.py
# Código Python
Writing EP08_10.py
TestSuite("EP08_10.py").run()
✔️ EP08_10.cases já existe em casos/
📋 3 caso(s) carregado(s) de casos/EP08_10.cases

🔍 Testando Python: EP08_10.py
⚠️ EP08_10.py: Arquivo sem conteúdo (menos de 3 linhas). Testes ignorados.