EP08_11 — 🔴 Classificação e Validação de Objetos com Gabarito de Bounding Box
8.14.11 EP08_11 🔴 Classificação e Validação de Objetos com Gabarito de Bounding Box
Neste exercício, o objetivo é processar uma imagem em tons de cinza contendo múltiplos objetos geométricos, extrair suas propriedades com mm.measure e validar as caixas delimitadoras (bounding boxes) detectadas em relação a um gabarito real (Ground Truth - GT) fornecido na entrada, utilizando a métrica IoU (Intersection over Union).
8.14.11.1 📋 Diretrizes de Implementação
Leitura da Imagem: Ler as dimensões \(H \times W\) e a matriz \(H \times W\) de pixels da imagem em tons de cinza.
Pipeline Morfológico: Binarizar a imagem via método de Otsu (mm.threshold) e renderizar a máscara binarizada resultante utilizando mm.drawImg.
Leitura do Gabarito Real (Ground Truth):
Ler a quantidade \(G\) de caixas delimitadoras do gabarito.
Se \(G > 0\), ler \(G\) linhas contendo 5 valores cada: id xmin_norm ymin_norm xmax_norm ymax_norm.
Conversão de Coordenadas: As coordenadas do gabarito estão normalizadas na faixa \([0.0, 1.0]\). Para converter para pixels na grade da imagem:
\[x_{\min} = \lfloor \text{xmin\_norm} \times W \rfloor, \quad y_{\min} = \lfloor \text{ymin\_norm} \times H \rfloor\]
\[w = \lfloor \text{xmax\_norm} \times W \rfloor - x_{\min}, \quad h = \lfloor \text{ymax\_norm} \times H \rfloor - y_{\min}\]
Extração de Métricas e Cálculo de IoU:
Extrair as propriedades das instâncias com mm.measure(img_bin, precision=0.02).
Para cada bounding box detectada \((x, y, w, h)\), calcular a sobreposição IoU em relação às caixas do gabarito e definir hits = 1 se existir algum match com \(\text{IoU} \ge 0.50\), ou hits = 0 caso contrário.
Saída: Ordenar as instâncias por posição (bbox[0], bbox[1]) e imprimir a tabela CSV com a coluna adicional hits.
Para ordenar, usar medidas.sort(key=lambda m: (m['bbox'][1], m['bbox'][0])), com medidas = mm.measure(img).
8.14.11.2 🧠 Fundamentação Teórica e Conversão
Conceito
Fórmula / Operação
Descrição
BBox Detectada
\((x, y, w, h)\) via mm.measure
Caixa delimitadora calculada na grade discreta em pixels inteiros.
BBox Gabarito (GT)
\((x_{\min}, y_{\min}, w, h)\) convertidos
Caixa real fornecida na entrada em coordenadas relativas \([0.0, 1.0]\).
Avalia a taxa de sobreposição das caixas. É considerada válida se \(\text{IoU} \ge 0.50\).
Status de Validação (hits)
\(1\) se \(\max(\text{IoU}) \ge 0.50\), senão \(0\)
Indicador binário de acerto do detector em relação ao gabarito.
8.14.11.3 📦 Especificação de Entrada e Saída (VPL)
Entrada:
Linha 1: Inteiros \(H\) e \(W\) (dimensões da matriz).
Próximas \(H\) linhas:\(W\) inteiros (\(0\) a \(255\)) representando a imagem em tons de cinza.
Linha \(H + 2\): Inteiro \(G\) (quantidade de caixas do gabarito verdadeiro).
Próximas \(G\) linhas: 5 valores numéricos por linha: id xmin_norm ymin_norm xmax_norm ymax_norm (onde as coordenadas são valores flutuantes entre \(0.0\) e \(1.0\)).
Saída:
Matriz binarizada renderizada via mm.drawImg(img_bin).
🧮 Simulador EP08_11: Bounding Boxes e Comparação de IoU com Controles IndependentesValidação BBox GT vs DET
MODO DE EXIBIÇÃO
EXIBIÇÃO DAS BOUNDING BOXES
LEGENDA DAS BBOXES:
Gabarito Real (GT)
Detecção Aceita (IoU ≥ 0.5)
Detecção Rejeitada (IoU < 0.5)
Sobreposição de BBoxes
VISUALIZAÇÃO DA MATRIZ DE PÍXEIS
MEDIDAS, CLASSIFICAÇÃO GEOMÉTRICA E COMPARAÇÃO IOU COM GABARITO
id
classe
area
solidity
vertices
bbox det (x,y,w,h)
bbox gt (x,y,w,h)
IoU
status (IoU ≥ 0.5)
Figura 8.25: Simulador EP08_11: Classificação Geométrica com Controles Independentes de Overlays BBox (GT e DET)
%%writefile EP08_11.py# Código Python
Writing EP08_11.py
TestSuite("EP08_11.py").run()
✔️ EP08_11.cases já existe em casos/
📋 3 caso(s) carregado(s) de casos/EP08_11.cases
🔍 Testando Python: EP08_11.py
⚠️ EP08_11.py: Arquivo sem conteúdo (menos de 3 linhas). Testes ignorados.