EP08_08 — 🟡 Imagem em Níveis de Cinza e Limiarização Dinâmica
8.14.8 EP08_08 🟡 Imagem em Níveis de Cinza e Limiarização Dinâmica
Neste exercício, a imagem de entrada deixa de ser estritamente binária (0/1) e passa a ser uma imagem em níveis de cinza (\(8\) bits, \(0\dots255\)), onde os objetos possuem intensidade média intermediária sobre um fundo escuro (\(0\)), além de ruído do tipo sal e pimenta espalhado por toda a imagem.
8.14.8.1 📋 Diretrizes de Implementação
Entrada: ler \(H\) e \(W\) na primeira linha, seguidos das \(H\) linhas com valores inteiros de \(0\) a \(255\) em matriz \(H \times W\).
Pré-processamento:
Aplicar filtro de Mediana (\(3 \times 3\)) para remover o ruído sal e pimenta mantendo as bordas nítidas.
Aplicar Limiarização de Otsu (ou limiar fixo \(T = 60\)) para binarizar a imagem limpa.
Medição e Saída: extrair o contorno dos objetos, calcular as métricas geométricas (area, perimeter, cx, cy, x, y, w, h, circularity, solidity) e ordenar os objetos por bbox[0] (e bbox[1] como desempate). Reatribuir id de \(1\) a \(N\) e imprimir a tabela.
Para ordenar, usar medidas.sort(key=lambda m: (m['bbox'][1], m['bbox'][0])), com medidas = mm.measure(img).
id area perimeter cx cy x y w h circularity solidity vertices
1 16.0 16.0 8.0 8.0 6 6 5 5 0.79 1.000 4
2 28.3 18.8 22.5 8.0 19 5 7 7 1.00 1.000 8
🧮 Simulador EP08_08: Ruído Sal e Pimenta em Tons de Cinza & Medição OpenCVMediana 3x3 → Binarização → Medição
ETAPA DO PROCESSAMENTO
VISUALIZAÇÃO DA MATRIZ DE PÍXEIS
TABELA DE MEDIÇÕES DOS OBJETOS (ORDENADOS POR BBOX_X, BBOX_Y)
id
area
perimeter
cx
cy
x
y
w
h
circularity
solidity
vertices
Figura 8.22: Simulador EP08_08: Filtragem de Mediana em Tons de Cinza e Medição de Objetos OpenCV
%%writefile EP08_08.py# Código Python
Writing EP08_08.py
TestSuite("EP08_08.py").run()
✔️ EP08_08.cases já existe em casos/
📋 3 caso(s) carregado(s) de casos/EP08_08.cases
🔍 Testando Python: EP08_08.py
⚠️ EP08_08.py: Arquivo sem conteúdo (menos de 3 linhas). Testes ignorados.