PDI+VC · Ejercicio de Programación

EP03_09 — 📡 Filtro de la Mediana 3×3

3.12.9 EP03_09 📡 Filtro de la Mediana 3×3

Las imágenes de radar de apertura sintética (SAR) utilizadas en monitoreo ambiental y militar sufren de un tipo específico de ruido llamado speckle, que posee características similares al ruido sal y pimienta. El filtro de la mediana es el método estándar para eliminar este ruido porque preserva los bordes de las estructuras mientras elimina los puntos espurios.

Ver en Figura 3.34 una simulación de este EP.

3.12.9.1 📋 Directrices de Implementación

  1. Dimensiones: Leer los enteros \(L\) (filas) y \(C\) (columnas).
  2. Datos: Leer la matriz de píxeles \(f\).
  3. Filtro de la Mediana 3×3: Para cada píxel interno \((i,j)\) con \(1 \le i < L-1\), \(1 \le j < C-1\):
    • Recolectar los 9 píxeles de la vecindad \(3 \times 3\): \(\{f(i+s, j+t) : s,t \in \{-1,0,1\}\}\).
    • Ordenar los 9 valores en orden creciente.
    • Asignar \(g(i,j)\) al valor central (posición índice 4, considerando índice 0).

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

  1. Borde: Copiar directamente: \(g(i,j) = f(i,j)\).
  2. Salida: Mostrar la matriz filtrada \(L \times C\).

3.12.9.2 📌 Restricciones Computacionales

  • Ventana: Siempre \(3 \times 3 = 9\) elementos.
  • Mediana: El elemento central de la secuencia ordenada (índice 4 de 0 a 8).
  • Sin recorte: La mediana de valores en \([0, 255]\) permanece en \([0, 255]\).
  • No lineal: El filtro de mediana no puede expresarse como convolución lineal.

3.12.9.3 🧠 Fundamentación Teórica

Ruido Filtro de Media Filtro de Mediana
Sal y pimienta (0 o 255) Dispersa el ruido Elimina sin distorsionar bordes
Gaussiano Reduce eficazmente Reduce parcialmente

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

Entrada:

  • Línea 1: Entero \(L\).
  • Línea 2: Entero \(C\).
  • Líneas siguientes: Elementos de la matriz.

Salida:

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

3.12.9.5 📌 Ejemplos

Entrada Salida Observación
3
3
100 100 100
100 0 100
100 100 100
100 100 100
100 100 100
100 100 100
Punto negro 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
Punto blanco (sal) eliminado
📉 Simulador EP03_09: Filtro de la Mediana 3×3 g = Mediana(Vecinos)

Inyecte ruido impulsivo (sal y pimienta) y pase el mouse sobre los píxeles internos del resultado para inspeccionar la ordenación del vector de vecindad y la eliminación del ruido.

Ruido de sal (255) y pimienta (0) — ~30% de los píxeles internos afectados
Imagen f — Con Ruido Sal (255) y pimienta (0) visibles
Resultado g — Sin Ruido Pase el mouse para inspeccionar
Vector de Vecindad 3×3 — Ordenado Pase el mouse sobre un píxel interno del resultado para visualizar
—
Leyenda:
Ventana 3×3
Píxel Central
Borde (Copiado)
Mediana
Ruido (Eliminado)
Pase el mouse sobre un píxel interno del resultado para ver el proceso de ordenación.
Figura 3.34: Simulador EP03_09: Filtro de la Mediana 3×3
%%writefile EP03_09.py
# Código Python
Overwriting EP03_09.py
TestSuite("EP03_09.py").run()
✔️ EP03_09.cases ya existe en casos/
📋 5 caso(s) cargado(s) de casos/EP03_09.cases

🔍 Probando Python: EP03_09.py
⚠️ EP03_09.py: archivo vacío (menos de 3 líneas). Pruebas omitidas.