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

EP05_02 — 🟡 Filtro Notch : Removendo Picos Periódicos

5.13.2 EP05_02 🟡 Filtro Notch: Removendo Picos Periódicos

Uma câmera de inspeção industrial captura imagens de placas de circuito, mas a fonte de alimentação da linha de produção introduz uma interferência elétrica periódica — um padrão de listras quase imperceptível a olho nu, mas que aparece no espectro de Fourier como pares de picos brilhantes simetricamente posicionados em torno do centro. A equipe de visão computacional não pode reprocessar a captura: precisa localizar e apagar cirurgicamente esses pares de picos no espectro, preservando todo o resto da informação útil da imagem.

Esse é o papel do filtro rejeita-banda notch: diferente do passa-baixa (que afeta uma região contínua), ele ataca pontos específicos e seus simétricos, deixando o restante do espectro intocado.

5.13.2.1 📋 Diretrizes de Implementação

  1. Dimensões: Ler os inteiros \(L\) (linhas) e \(C\) (colunas) do espectro de magnitude centrado.
  2. Dados: Ler os valores inteiros da matriz de magnitude, linha a linha.
  3. Picos: Ler o inteiro \(K\) (quantidade de pares de picos a remover).
  4. Para cada um dos \(K\) picos: ler três inteiros \(\Delta v\), \(\Delta u\), \(r\) — deslocamento vertical, deslocamento horizontal e raio do notch.
  5. Centro do espectro: \((c_y, c_x) = (L \mathbin{//} 2,\; C \mathbin{//} 2)\).
  6. Supressão simétrica: para cada pico, zerar todas as posições \((u,v)\) tais que a distância ao ponto \((c_y+\Delta v,\, c_x+\Delta u)\) for \(\le r\), e também todas as posições com distância \(\le r\) ao ponto simétrico \((c_y-\Delta v,\, c_x-\Delta u)\).
  7. Saída: Exibir a matriz resultante com dimensões \(L \times C\).

5.13.2.2 📌 Restrições Computacionais

  • Simetria obrigatória: cada pico informado gera dois discos zerados (o ponto e seu simétrico em relação ao centro) — esquecer o simétrico é o erro mais comum.
  • Sobreposição: se dois discos se sobrepõem, a posição permanece zerada (não há “soma” ou restauração).
  • Comparação não estrita: uma posição é zerada se \(\text{distância} \le r\).
  • Ordem de leitura: os \(K\) picos devem ser processados na ordem em que aparecem na entrada, mas o resultado final independe da ordem (operações de zerar são comutativas).

5.13.2.3 🧠 Fundamentação Teórica

Conceito Papel no filtro notch
Pico em \((\Delta v, \Delta u)\) Frequência da interferência periódica detectada visualmente no espectro
Ponto simétrico \((-\Delta v,-\Delta u)\) Toda DFT de sinal real é hermitiana: picos sempre aparecem em pares simétricos ao centro
Raio \(r\) Controla a “largura” da rejeição — \(r\) grande remove mais energia ao redor do pico, mas também informação útil

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

Entrada:

  • Linha 1: Inteiro \(L\).
  • Linha 2: Inteiro \(C\).
  • Linhas seguintes: Elementos inteiros da matriz de magnitude (centrada), \(L\) linhas.
  • Próxima linha: Inteiro \(K\).
  • \(K\) linhas seguintes: três inteiros \(\Delta v\), \(\Delta u\), \(r\) (separados por espaço).

Saída:

  • Matriz resultante em \(L\) linhas e \(C\) colunas, separados por espaço.

5.13.2.5 📌 Exemplos

Entrada Saída Observação
5
5
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
1
1 1 0
1 2 3 4 5
6 0 8 9 10
11 12 13 14 15
16 17 18 0 20
21 22 23 24 25
Centro \((c_y, c_x) = (2, 2)\). Pico informado \((\Delta v, \Delta u) = (1, 1)\) gera o ponto \((3, 3)\) (valor 19) e seu simétrico \((1, 1)\) (valor 7), ambos zerados com \(r=0\) (apenas os pontos exatos).
🎮 Simulador EP05_02: Filtro Notch Par Simétrico
1
1
0
Mova Δv e Δu para escolher o pico — observe que o par simétrico também é filtrado.
Espectro 5×5 (Vermelho = Removido pelo Filtro)
–
Figura 5.33: Simulador EP05_02: Filtro Notch
%%writefile EP05_02.py
# Código Python
Writing EP05_02.py
TestSuite("EP05_02.py").run()
✔️ EP05_02.cases já existe em casos/
📋 5 caso(s) carregado(s) de casos/EP05_02.cases

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