PDI+VC · Ejercicio de Programación

EP02_01 — ☀️ Ajuste de Brillo y Contraste

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:

  1. Dimensiones: Leer los enteros \(L\) (filas) y \(C\) (columnas) de la matriz.
  2. Parámetros: Leer el valor real \(\alpha\) (factor de contraste) y el entero \(\beta\) (factor de brillo).
  3. Datos: Leer los valores enteros de la matriz original.
  4. Mapeo: Para cada píxel \(p\), calcular el nuevo valor \(p'\) mediante la ecuación:

\[p' = \text{clip}(\text{round}(\alpha \cdot p + \beta))\]

  1. 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\)) y beta (\(\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.

☀️ Simulador EP02_01: Ajuste de Brilho y Contraste Lineal p' = clip(α·p + β)

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].

1.0
0
Entrada Original (p)
Resultado Transformado (p')
Fórmula aplicada: clip( round(1.0 · p + (0)) )
Figura 2.12: Simulador EP02_01: Ajuste de Brilho y Contraste Lineal (p’ = αp + β)