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

EP08_09 — 🟠 Gradiente de Iluminação e Limiarização Adaptativa

8.14.9 EP08_09 🟠 Gradiente de Iluminação e Limiarização Adaptativa

Nesta variação, os objetos estão imersos em um fundo com iluminação não uniforme (gradiente suave de iluminação). A limiarização simples por valor único falha, exigindo pré-processamento mais robusto.

8.14.9.1 📋 Diretrizes de Implementation

  1. Entrada: imagem em níveis de cinza \(H \times W\) com variação de fundo de \(20\) a \(180\).
  2. Pré-processamento:
  • Aplicar Limiarização Adaptativa (ex.: cv2.adaptiveThreshold com janela gaussiana de \(15 \times 15\) e constante \(C = 3\)) para isolar os objetos independente da variação do fundo.

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

    ksize e C são lidos após a imagem.

  • Operação morfológica de Fechamento (\(3 \times 3\)) para selar eventuais falhas nos contornos.

  1. Medição e Classificação: extrair as medidas.

  2. Ordenação e Saída: ordenar por (bbox[0], bbox[1]) e imprimir a tabela incluindo a coluna class.

    • Para ordenar, usar medidas.sort(key=lambda m: (m['bbox'][1], m['bbox'][0])), com medidas = mm.measure(img, precision=0.02).

8.14.9.2 📌 Exemplos

Entrada Saída
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
🧮 Simulador EP08_09: Gradiente de Iluminação e Limiar Adaptativo & Medição OpenCV Adaptativo vs Global → Medição
ETAPA DO PROCESSAMENTO
VISUALIZAÇÃO DA MATRIZ DE PÍXEIS
TABELA DE MEDIÇÕES DOS OBJETOS (CALCULADO NO LIMIAR ADAPTATIVO OK)
id area perimeter cx cy x y w h circularity solidity vertices
Figura 8.23: Simulador EP08_09: Gradiente de Iluminação, Limiar Adaptativo e Medição OpenCV
%%writefile EP08_09.py
# Código Python
Writing EP08_09.py
TestSuite("EP08_09.py").run()
✔️ EP08_09.cases já existe em casos/
📋 3 caso(s) carregado(s) de casos/EP08_09.cases

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