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

EP03_09 — 📡 Filtro da Mediana 3×3

3.12.9 EP03_09 📡 Filtro da Mediana 3×3

Imagens de radar de abertura sintética (SAR) usadas em monitoramento ambiental e militar sofrem de um tipo específico de ruído chamado speckle, que possui características similares ao ruído sal e pimenta. O filtro da mediana é o método padrão de remoção desse ruído porque preserva as bordas das estruturas enquanto elimina os pontos espúrios.

Ver na Figura 3.34 uma simulação deste EP.

3.12.9.1 📋 Diretrizes de Implementação

  1. Dimensões: Ler os inteiros \(L\) (linhas) e \(C\) (colunas).
  2. Dados: Ler a matriz de pixels \(f\).
  3. Filtro da Mediana 3×3: Para cada pixel interno \((i,j)\) com \(1 \le i < L-1\), \(1 \le j < C-1\):
    • Coletar os 9 pixels da vizinhança \(3 \times 3\): \(\{f(i+s, j+t) : s,t \in \{-1,0,1\}\}\).
    • Ordenar os 9 valores em ordem crescente.
    • Atribuir \(g(i,j)\) ao valor central (posição índice 4, considerando índice 0).

\[g(i,j) = \text{mediana}\{f(i+s, j+t) : s,t \in \{-1,0,1\}\}\]

  1. Borda: Copiar diretamente: \(g(i,j) = f(i,j)\).
  2. Saída: Exibir a matriz filtrada \(L \times C\).

3.12.9.2 📌 Restrições Computacionais

  • Janela: Sempre \(3 \times 3 = 9\) elementos.
  • Mediana: O elemento central da sequência ordenada (índice 4 de 0 a 8).
  • Sem clipping: A mediana de valores em \([0, 255]\) permanece em \([0, 255]\).
  • Não linear: O filtro mediana não pode ser expresso como convolução linear.

3.12.9.3 🧠 Fundamentação Teórica

Ruído Filtro de Média Filtro de Mediana
Sal e pimenta (0 ou 255) Espalha o ruído Remove sem distorcer bordas
Gaussiano Reduz eficazmente Reduz parcialmente

3.12.9.4 📦 Especificação de Entrada e Saída (VPL)

Entrada:

  • Linha 1: Inteiro \(L\).
  • Linha 2: Inteiro \(C\).
  • Linhas seguintes: Elementos da matriz.

Saída:

  • Matriz filtrada \(L \times C\).

3.12.9.5 📌 Exemplos

Entrada Saída Observação
3
3
100 100 100
100 0 100
100 100 100
100 100 100
100 100 100
100 100 100
Ponto preto eliminado: mediana de 8×100+1×0 = 100
3
3
50 50 50
50 255 50
50 50 50
50 50 50
50 50 50
50 50 50
Ponto branco (sal) eliminado
📉 Simulador EP03_09: Filtro da Mediana 3×3 g = Mediana(Vizinhos)

Injete ruído impulsivo (sal e pimenta) e passe o mouse sobre os pixels internos do resultado para inspecionar a ordenação do vetor de vizinhança e a eliminação do ruído.

Ruído sal (255) e pimenta (0) — ~30% dos pixels internos afetados
Imagem f — Com Ruído Sal (255) e pimenta (0) visíveis
Resultado g — Sem Ruído Passe o mouse para inspecionar
Vetor de Vizinhança 3×3 — Ordenado Passe o mouse num píxel interno do resultado para visualizar
—
Legenda:
Janela 3×3
Pixel Central
Borda (Copiada)
Mediana
Ruído (Eliminado)
Passe o mouse sobre um píxel interno do resultado para ver o processo de ordenação.
Figura 3.34: Simulador EP03_09: Filtro da Mediana 3×3
%%writefile EP03_09.cpp
// sua solução
Overwriting EP03_09.cpp
TestSuite("EP03_09.cpp").run()
✔️ EP03_09.cases já existe em casos/
📋 5 caso(s) carregado(s) de casos/EP03_09.cases

🔍 Testando C++: EP03_09.cpp
⚠️ EP03_09.cpp: Arquivo sem conteúdo (menos de 3 linhas). Testes ignorados.