Ajusta los parámetros de contraste (α) y brillo (β) para aplicar la transformación puntual de intensidad y observa el truncamiento de saturación en el intervalo [0, 255].
2.12.1 EP02_01 ☀️ Ajuste de Brillo y Contraste
En esta actividad, el objetivo es implementar un operador de punto para transformación lineal de intensidad, aplicando el ajuste dinámico de brillo y contraste en una imagen digital.
2.12.1.1 📋 Directrices de Implementación
El algoritmo debe seguir el flujo de ejecución siguiente:
- Dimensiones: Leer los enteros \(L\) (filas) y \(C\) (columnas) de la matriz.
- Parámetros: Leer el valor real \(\alpha\) (factor de contraste) y el entero \(\beta\) (factor de brillo).
- Datos: Leer los valores enteros de la matriz original.
- Mapeo: Para cada píxel \(p\), calcular el nuevo valor \(p'\) mediante la ecuación:
\[p' = \text{clip}(\text{round}(\alpha \cdot p + \beta))\]
- Salida: Mostrar la matriz resultante con las dimensiones \(L \times C\).
2.12.1.2 📌 Restricciones Computacionales
- Redondeo (Round): Se aplica el redondeo matemático al entero más próximo antes de la conversión de tipo.
- Saturación (Clipping): Los valores deben limitarse al intervalo \([0, 255]\) para preservar el estándar de 8 bits:
\[\text{clip}(x) = \max(0, \min(255, x))\]
- Simulación: El efecto de los parámetros \(\alpha\) y \(\beta\) en la corrección histogramática puede observarse en la Figura 2.12.
2.12.1.3 🧠 Fundamentación Teórica
Las alteraciones modifican el histograma de la imagen para ajustar el perfil de iluminación y la distinción tonal.
| Parámetro | Función | Impacto Visual |
|---|---|---|
| \(\alpha\) (Alpha) | Escalar | Modula el Contraste. Si \(\alpha > 1\), expande el histograma; si \(0 \le \alpha < 1\), lo comprime. |
| \(\beta\) (Beta) | Aditiva | Modula el Brillo. Si es positivo, desplaza el histograma hacia la derecha; si es negativo, hacia la izquierda. |
| \(\text{clip}\) | Limitador | Restringe el rango dinámico, evitando errores de underflow y overflow. |
2.12.1.4 📦 Especificación de Entrada y Salida (VPL)
Entrada:
- Línea 1: Entero \(L\).
- Línea 2: Entero \(C\).
- Línea 3: Valores de
alpha(\(\alpha\)) ybeta(\(\beta\)). - Líneas siguientes: Elementos numéricos de la matriz original.
Salida:
- Matriz transformada estructurada en \(L\) filas y \(C\) columnas.
2.12.1.5 📌 Ejemplos
La tabla siguiente presenta un ejemplo práctico del comportamiento esperado del algoritmo, destacando la actuación de los operadores de redondeo y saturación.
| Entrada | Salida | Observación |
|---|---|---|
| 1 4 1.5 -30 0 100 180 255 |
0 120 240 255 | Nótese el efecto de saturación en el último píxel |
Ejecutando los Pruebas
Para evaluar las pruebas, ejecute TestSuite("EP02_01.extensión").run() en una nueva celda, reemplazando la extensión por la del lenguaje utilizado (.py, .java, .c, .cpp, .js o .r). El sistema descarga los casos de prueba desde GitHub, ejecuta el programa y calcula la nota automáticamente.