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

EP05_01 — 🟢 Filtro Passa-Baixa Ideal por Distância no Espectro

5.13.1 EP05_01 🟢 Filtro Passa-Baixa Ideal por Distância no Espectro

Em um scanner de documentos antigo, o sensor capta papel amassado e textura de fibra junto com o texto — ruído de alta frequência que “polui” o espectro nas bordas. O técnico de manutenção não tem acesso à imagem original, apenas ao espectro de magnitude já calculado pelo software do scanner. Seu trabalho é simples e cirúrgico: manter apenas o círculo central de baixas frequências (a estrutura global do documento) e apagar tudo que estiver fora do raio \(D_0\), eliminando a textura fina sem nem precisar tocar na imagem espacial.

Este é o Filtro Passa-Baixa Ideal (LPFI): a operação espectral mais direta do capítulo, mas também a que melhor revela a anatomia de um espectro centrado.

5.13.1.1 📋 Diretrizes de Implementação

  1. Dimensões: Ler os inteiros \(L\) (linhas) e \(C\) (colunas) do espectro de magnitude — já fornecido centrado (equivalente à saída de np.fft.fftshift).
  2. Frequência de corte: Ler o inteiro \(D_0\).
  3. Dados: Ler os valores inteiros da matriz de magnitude, linha a linha.
  4. Centro do espectro: Calcular \((c_y, c_x) = (L \mathbin{//} 2,\; C \mathbin{//} 2)\).
  5. Distância: Para cada posição \((u,v)\), calcular \[ D(u,v) = \sqrt{(u-c_y)^2 + (v-c_x)^2} \]
  6. Máscara ideal: Aplicar \[ H(u,v) = \begin{cases} 1, & D(u,v) \le D_0 \\ 0, & D(u,v) > D_0 \end{cases} \]
  7. Filtragem: O valor de saída é \(\text{mag}'(u,v) = \text{mag}(u,v) \cdot H(u,v)\).
  8. Saída: Exibir a matriz filtrada com dimensões \(L \times C\).

5.13.1.2 📌 Restrições Computacionais

  • Comparação não estrita: o critério usa \(D(u,v) \le D_0\) (a fronteira pertence ao filtro, ou seja, é mantida).
  • Tipo: todos os valores de entrada e saída são inteiros; a distância é calculada em ponto flutuante apenas internamente.
  • Sem arredondamento de magnitude: como a entrada já é inteira e a máscara é binária (0 ou 1), a saída nunca precisa de arredondamento.

5.13.1.3 🧠 Fundamentação Teórica

Região Distância ao centro Efeito do filtro
Centro (\(D \le D_0\)) Baixas frequências Preservadas — estrutura global mantida
Bordas (\(D > D_0\)) Altas frequências Zeradas — textura e ruído removidos
\(D_0\) pequeno — Imagem reconstruída ficaria muito borrada
\(D_0\) grande — Pouca filtragem; quase toda energia preservada

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

Entrada:

  • Linha 1: Inteiro \(L\).
  • Linha 2: Inteiro \(C\).
  • Linha 3: Inteiro \(D_0\).
  • Linhas seguintes: Elementos inteiros da matriz de magnitude (centrada).

Saída:

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

5.13.1.5 📌 Exemplos

Entrada Saída Observação
3
3
1
10 20 30
40 50 60
70 80 90
0 20 0
40 50 60
0 80 0
Centro \((1,1)\). Cantos têm \(D=\sqrt{2}\approx1.41 > 1\), logo são zerados; vizinhos ortogonais têm \(D=1 \le 1\) e são mantidos.
1
3
0
5 9 7
0 9 0 \(L=1, C=3\): centro em \((0,1)\). Apenas a própria posição central (\(D=0\)) sobrevive a \(D_0=0\).
🎮 Simulador EP05_01: Filtro Passa-Baixa Ideal H = (D ≤ D₀) ? 1 : 0
Ajuste D₀ e observe quais posições do espectro 5×5 sobrevivem ao filtro.
Espectro Original (Magnitude)
Resultado Filtrado
–
Figura 5.32: Simulador EP05_01: Filtro Passa-Baixa Ideal no Espectro
%%writefile EP05_01.py
# Código Python
Writing EP05_01.py
TestSuite("EP05_01.py").run()
✔️ EP05_01.cases já existe em casos/
📋 5 caso(s) carregado(s) de casos/EP05_01.cases

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