PDI+VC · Ejercicio de Programación

EP05_01 — 🟢 Filtro Pasa-Bajas Ideal por Distancia en el Espectro

5.13.1 EP05_01 🟢 Filtro Pasa-Bajas Ideal por Distancia en el Espectro

En un escáner de documentos antiguo, el sensor capta papel arrugado y textura de fibra junto con el texto — ruido de alta frecuencia que “contamina” el espectro en los bordes. El técnico de mantenimiento no tiene acceso a la imagen original, solo al espectro de magnitud ya calculado por el software del escáner. Su trabajo es simple y quirúrgico: mantener únicamente el círculo central de bajas frecuencias (la estructura global del documento) y borrar todo lo que esté fuera del radio \(D_0\), eliminando la textura fina sin siquiera tocar la imagen espacial.

Este es el Filtro Pasa-Bajas Ideal (LPFI): la operación espectral más directa del capítulo, pero también la que mejor revela la anatomía de un espectro centrado.

5.13.1.1 📋 Directrices de Implementación

  1. Dimensiones: Leer los enteros \(L\) (filas) y \(C\) (columnas) del espectro de magnitud — ya proporcionado centrado (equivalente a la salida de np.fft.fftshift).
  2. Frecuencia de corte: Leer el entero \(D_0\).
  3. Datos: Leer los valores enteros de la matriz de magnitud, fila por fila.
  4. Centro del espectro: Calcular \((c_y, c_x) = (L \mathbin{//} 2,\; C \mathbin{//} 2)\).
  5. Distancia: Para cada posición \((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. Filtrado: El valor de salida es \(\text{mag}'(u,v) = \text{mag}(u,v) \cdot H(u,v)\).
  8. Salida: Mostrar la matriz filtrada con dimensiones \(L \times C\).

5.13.1.2 📌 Restricciones Computacionales

  • Comparación no estricta: el criterio usa \(D(u,v) \le D_0\) (la frontera pertenece al filtro, es decir, se mantiene).
  • Tipo: todos los valores de entrada y salida son enteros; la distancia se calcula en punto flotante solo internamente.
  • Sin redondeo de magnitud: como la entrada ya es entera y la máscara es binaria (0 o 1), la salida nunca necesita redondeo.

5.13.1.3 🧠 Fundamentación Teórica

Región Distancia al centro Efecto del filtro
Centro (\(D \le D_0\)) Bajas frecuencias Preservadas — estructura global mantenida
Bordes (\(D > D_0\)) Altas frecuencias Puestas a cero — textura y ruido eliminados
\(D_0\) pequeño — Imagen reconstruida quedaría muy borrosa
\(D_0\) grande — Poca filtración; casi toda la energía preservada

5.13.1.4 📦 Especificación de Entrada y Salida (VPL)

Entrada:

  • Línea 1: Entero \(L\).
  • Línea 2: Entero \(C\).
  • Línea 3: Entero \(D_0\).
  • Líneas siguientes: Elementos enteros de la matriz de magnitud (centrada).

Salida:

  • Matriz filtrada en \(L\) filas y \(C\) columnas, separados por espacio.

5.13.1.5 📌 Ejemplos

Entrada Salida Observación
3
3
1
10 20 30
40 50 60
70 80 90
0 20 0
40 50 60
0 80 0
Centro \((1,1)\). Las esquinas tienen \(D=\sqrt{2}\approx1.41 > 1\), por lo que se ponen a cero; los vecinos ortogonales tienen \(D=1 \le 1\) y se mantienen.
1
3
0
5 9 7
0 9 0 \(L=1, C=3\): centro en \((0,1)\). Solo la propia posición central (\(D=0\)) sobrevive a \(D_0=0\).
🎮 Simulador EP05_01: Filtro Pasa-Baja Ideal H = (D ≤ D₀) ? 1 : 0
Ajusta D₀ y observa qué posiciones del espectro 5×5 sobreviven al filtro.
Espectro Original (Magnitud)
Resultado Filtrado
–
Figura 5.32: Simulador EP05_01: Filtro Pasabajas Ideal en el Espectro
%%writefile EP05_01.cpp
// your solution
Overwriting EP05_01.cpp
TestSuite("EP05_01.cpp").run()
✔️ EP05_01.cases ya existe en casos/
📋 5 caso(s) cargado(s) de casos/EP05_01.cases

🔍 Probando C++: EP05_01.cpp
⚠️ EP05_01.cpp: archivo vacío (menos de 3 líneas). Pruebas omitidas.