Seleccione el tamaño del kernel y pase el mouse sobre los píxeles del resultado para inspeccionar la vecindad y el cálculo de la media aritmética.
3.12.6 EP03_06 🌫️ Filtro de Media con Kernel N×N
En cámaras de vehículos autónomos, las imágenes capturadas bajo lluvia o niebla presentan ruido gaussiano. El filtro de media se utiliza ampliamente para su reducción en tiempo real, implementándose directamente en el ISP (Image Signal Processor) de los sensores CMOS (Complementary Metal-Oxide-Semiconductor).
Los sensores CMOS son los sensores de imagen utilizados en la mayoría de las cámaras modernas (smartphones, webcams, cámaras automotrices, etc.). Convierten la luz en señales eléctricas, y el ISP procesa estas señales en tiempo real — aplicando operaciones como reducción de ruido, balance de blancos y otros ajustes de imagen.
Ver en la Figura 3.31 una simulación de este EP.
3.12.6.1 📋 Directrices de Implementación
- Dimensiones: Leer los enteros \(L\) (filas), \(C\) (columnas) y \(N\) (tamaño del kernel, siempre impar).
- Datos: Leer la matriz de píxeles \(f\).
- Filtro de Media: Para cada píxel \((i,j)\) interno (sin bordes), calcular:
\[g(i,j) = \text{round}\left(\frac{1}{N^2} \sum_{s=-(r)}^{r} \sum_{t=-(r)}^{r} f(i+s,\, j+t)\right), \quad r = \lfloor N/2 \rfloor\]
- Tratamiento de Bordes: Los píxeles en el borde (donde la ventana \(N \times N\) sobrepasa los límites) deben copiarse directamente del original sin modificación.
- Salida: Mostrar la matriz resultante \(L \times C\).
3.12.6.2 📌 Restricciones Computacionales
- Radio: \(r = \lfloor N/2 \rfloor\) (mitad del kernel, entero).
- Píxeles internos: \((i,j)\) con \(r \le i < L-r\) y \(r \le j < C-r\).
- Redondeo: Usar redondeo matemático antes de convertir a entero.
- Sin clipping: El promedio de valores \(\in [0,255]\) permanece en \([0,255]\).
3.12.6.3 🧠 Fundamentación Teórica
| Tamaño \(N\) | Coeficiente | Píxeles en la ventana | Efecto |
|---|---|---|---|
| 3 | \(1/9 \approx 0.111\) | 9 | Suave |
| 5 | \(1/25 = 0.04\) | 25 | Medio |
| 7 | \(1/49 \approx 0.020\) | 49 | Fuerte |
3.12.6.4 📦 Especificación de Entrada y Salida (VPL)
Entrada:
- Línea 1: Entero \(L\).
- Línea 2: Entero \(C\).
- Línea 3: Entero \(N\) (impar, \(N \ge 3\)).
- Líneas siguientes: Elementos de la matriz original.
Salida:
- Matriz filtrada \(L \times C\).
3.12.6.5 📌 Ejemplos
| Entrada | Salida | Observación |
|---|---|---|
| 3 3 3 10 20 30 40 50 60 70 80 90 |
10 20 30 40 50 60 70 80 90 |
Solo borde (3×3 = borde total) |
| 5 5 3 0 0 0 0 0 0 0 0 0 0 0 0 100 0 0 0 0 0 0 0 0 0 0 0 0 |
0 0 0 0 0 0 11 11 11 0 0 11 11 11 0 0 11 11 11 0 0 0 0 0 0 |
Píxel aislado: todos los 9 píxeles internos cuya ventana 3×3 incluye el valor 100 reciben round(100/9)=11 |
%%writefile EP03_06.py
# Código PythonOverwriting EP03_06.py
TestSuite("EP03_06.py").run()✔️ EP03_06.cases ya existe en casos/
📋 5 caso(s) cargado(s) de casos/EP03_06.cases
🔍 Probando Python: EP03_06.py
⚠️ EP03_06.py: archivo vacío (menos de 3 líneas). Pruebas omitidas.