Ajusta el factor de ganancia k, observa el pipeline completo de realce (desenfoque, máscara de alta frecuencia) y pasa el mouse sobre el resultado.
3.12.10 EP03_10 ✨ Unsharp Masking (USM)
En los sistemas de digitalización de documentos históricos y obras de arte, la nitidez de las imágenes es fundamental para la lectura de textos manuscritos y detalles ornamentales. El Unsharp Masking (USM) es el algoritmo de realce de nitidez estándar utilizado en escáneres profesionales y software como Adobe Photoshop, controlado por el parámetro \(k\) que determina la intensidad del realce.
Ver en la Figura 3.35 una simulación de este EP.
3.12.10.1 📋 Directrices de Implementación
- Dimensiones: Leer los enteros \(L\) (líneas) y \(C\) (columnas).
- Parámetro: Leer el valor real \(k\) (intensidad del realce, \(k \ge 0\)).
- Datos: Leer la matriz de píxeles \(f\).
- Suavizado: Calcular \(\bar{f}\) con el filtro de promedio \(3\times3\) (solo píxeles internos; bordes mantenidos):
\[\bar{f}(i,j) = \frac{1}{9} \sum_{s=-1}^{1} \sum_{t=-1}^{1} f(i+s, j+t)\]
- Máscara de alta frecuencia: \(m(i,j) = f(i,j) - \bar{f}(i,j)\).
- Realce USM: Para cada píxel interno:
\[g(i,j) = \text{clip}\left(\text{round}\left(f(i,j) + k \cdot m(i,j)\right)\right)\]
- Borde: \(g(i,j) = f(i,j)\) (copia directa).
- Salida: Mostrar la matriz realzada \(L \times C\).
3.12.10.2 📌 Restricciones Computacionales
- Redondeo: Aplicar
roundantes del clip. - Saturación: \(\text{clip}(x) = \max(0, \min(255, x))\).
- Operaciones en float: Calcular \(\bar{f}\) y \(m\) en punto flotante antes de redondear el resultado final.
- \(k = 0\): Sin realce — la salida es idéntica a la entrada (excepto en los bordes).
3.12.10.3 🧠 Fundamentación Teórica
| Etapa | Operación | Descripción |
|---|---|---|
| 1 | \(\bar{f} = f * \frac{1}{9}\mathbf{1}_{3\times3}\) | Suavizado (bajas frecuencias) |
| 2 | \(m = f - \bar{f}\) | Máscara (altas frecuencias) |
| 3 | \(g = \text{clip}(\text{round}(f + k \cdot m))\) | Realce ponderado |
3.12.10.4 📦 Especificación de Entrada y Salida (VPL)
Entrada:
- Línea 1: Entero \(L\).
- Línea 2: Entero \(C\).
- Línea 3: Real \(k\).
- Líneas siguientes: Elementos de la matriz original.
Salida:
- Matriz realzada \(L \times C\).
3.12.10.5 📌 Ejemplos
| Entrada | Salida | Observación |
|---|---|---|
| 3 3 0.0 100 100 100 100 100 100 100 100 100 |
100 100 100 100 100 100 100 100 100 |
k=0: sin realce |
| 3 3 1.0 50 50 50 50 200 50 50 50 50 |
50 50 50 50 255 50 50 50 50 |
k=1: píxel central realzado y saturado |
✨ Simulador EP03_10: Enmascaramiento Unsharp (USM)
g = f + k · m
Factor de ganancia k:
k = 1.0
① Imagen Original f
Matriz 5×5 píxeles
② Desenfocado f̄
Promedio 3 × 3
③ Máscara m
m = f − f̄ (Altas Frecuencias)
④ Resultado g = f + 1.0·m
Pasa el mouse para inspeccionar
Leyenda:
Vecindario 3×3
Píxel Central
Borde (Copiado)
Máscara Positiva/Negativa
Pasa el mouse sobre un píxel interno del resultado para rastrear el pipeline completo.
%%writefile EP03_10.py
# Código PythonOverwriting EP03_10.py
TestSuite("EP03_10.py").run()✔️ EP03_10.cases ya existe en casos/
📋 5 caso(s) cargado(s) de casos/EP03_10.cases
🔍 Probando Python: EP03_10.py
⚠️ EP03_10.py: archivo vacío (menos de 3 líneas). Pruebas omitidas.