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

EP08_07 — 🟡 Remoção de Ruído Sal e Pimenta e Medição de Objetos

8.14.7 EP08_07 🟡 Remoção de Ruído Sal e Pimenta e Medição de Objetos

Neste exercício, você aplicará filtragem morfológica para limpar uma imagem binária corrompida por ruído do tipo sal e pimenta (pixels isolados de valor 1 no fundo e 0 no interior dos objetos). Após a limpeza, o programa deve extrair as medições geométricas dos componentes conectados remanescentes, ordená-los e exibir a tabela final de métricas.

8.14.7.1 📋 Diretrizes de Implementação

  1. Entrada: ler dois inteiros \(H\) e \(W\) (altura e largura da imagem) na primeira linha e, em seguida, as \(H\) linhas com a matriz binária contendo pixels 0 e 1 separados por espaço.

  2. Filtragem Morfológica: aplicar encadeamento de Abertura (para eliminar o ruído sal no fundo) seguido de Fechamento (para preencher o ruído pimenta dentro dos objetos) com elemento estruturante \(3 \times 3\).

  3. Impressão da Imagem Limpa: imprimir a matriz resultante em valores 0 e 1 separados por espaço.

  4. Medição Geométricas: para cada objeto identificado na matriz limpa, extrair:

  • id: identificador numérico sequencial (reatribuído após a ordenação);

  • area: área calculada via contorno (cv2.contourArea);

  • perimeter: perímetro do contorno (cv2.arcLength);

  • cx, cy: centro de massa (centroide via cv2.moments);

  • x, y, w, h: coordenadas do retângulo delimitador (cv2.boundingRect);

  • circularity: circularidade dada por \(\frac{4 \pi \cdot \text{área}}{\text{perímetro}^2}\);

  • solidity: solidez dada pela razão \(\frac{\text{área}}{\text{área do fecho convexo}}\);

  • vertices: número de vértices aproximado do polígono (cv2.approxPolyDP com \(\epsilon = 0.02 \times \text{perímetro}\)).

  1. Ordenação e Saída: ordenar os objetos em ordem crescente pela posição \(X\) do retângulo delimitador (bbox[0]); em caso de empate, usar a posição \(Y\) (bbox[1]). Reatribuir os ids de \(1\) a \(N\) e imprimir a tabela formatada.
    • Para ordenar, usar medidas.sort(key=lambda m: (m['bbox'][1], m['bbox'][0])), com medidas = mm.measure(img).

8.14.7.2 📌 Restrições e Regras de Ordenação

  • Regra de Ordenação dos Objetos:
medidas.sort(key=lambda m: (m['bbox'][0], m['bbox'][1]))
  • Diferença de Área: A área calculada pelo OpenCV (cv2.contourArea) mede a área do polígono contínuo delimitado pelos centros dos pixels de borda, resultando em valores numéricos menores do que a simples contagem discreta de pixels 1 (np.sum).

8.14.7.3 🧠 Fundamentação Teórica

Operação / Métrica Função na Filtragem e Caracterização
Abertura Morfológica (\(\circ\)) Erosão seguida de dilatação: remove ruídos brilhantes isolados (sal).
Fechamento Morfológico (\(\bullet\)) Dilatação seguida de erosão: preenche pequenos buracos escuros no interior dos objetos (pimenta).
cv2.boundingRect Retorna \((x, y, w, h)\), o menor retângulo alinhado aos eixos que envolve o objeto.
Circularidade e Solidez Descrevem a compactação e a convexidade geométrica do componente.

8.14.7.4 📌 Exemplos

Entrada Saída
8 9
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 1 0 0
0 0 0 1 1 1 1 0 0
0 0 0 1 1 1 1 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 1
0 0 0 0 0 0 0 1 1
0 0 0 0 0 0 0 0 0
id area perimeter cx cy x y w h circularity solidity vertices
1 9.0 12.0 3.5 2.0 3 1 4 3 0.79 1.000 4
2 4.0 8.0 7.5 5.5 7 5 2 2 0.79 1.000 4
🧮 Simulador EP08_07: Morfologia Comutável (4-C / 8-C) & Métricas OpenCV Sal + Pimenta → Abertura → Fechamento → Medição
ETAPA DO PROCESSAMENTO MORFOLÓGICO
ELEMENTO ESTRUTURANTE
EXIBIÇÃO DOS PÍXEIS
VISUALIZAÇÃO DA MATRIZ DE PÍXEIS DE ENTRADA / PROCESSADA
TABELA DE MEDIÇÕES DOS OBJETOS (CALCULADO APÓS ABERTURA E FECHAMENTO)
id area perimeter cx cy x y w h circularity solidity vertices
Figura 8.21: Simulador EP08_07: Morfologia com Conectividade Configurável e Medição
%%writefile EP08_07.py
# Código Python
Writing EP08_07.py
TestSuite("EP08_07.py").run()
✔️ EP08_07.cases já existe em casos/
📋 4 caso(s) carregado(s) de casos/EP08_07.cases

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