Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Procesamiento digital de imágenes, Unidad 4 — Histogramas de imagen, 4.2 — Ecualización de histograma ·

Mejora de contraste

Mejora de contraste

Introducción

El contraste es una característica fundamental de las imágenes que afecta a su claridad y visualización. Un alto contraste puede hacer que la imagen sea más legible, mientras que un bajo contraste puede ocasionar confusión o dificultad para distinguir entre diferentes elementos. La ecualización del histograma es una técnica potente para mejorar el contraste de las imágenes. En este artículo, exploraremos cómo funciona esta técnica y cómo aplicarla efectivamente en la práctica.

Explicación principal

La ecualización de histograma consiste en redistribuir los píxeles de una imagen para expandir o equilibrar su distribución de intensidades. Esto se logra mediante la construcción y aplicación de una función de transferencia que reasigna los valores de los píxeles de manera óptima.

Función de ecualización del histograma

La ecualización del histograma puede ser descrita matemáticamente como sigue:

\[ s = c \cdot \frac{f(x)}{\max(f)} \]

Donde:

  • \( s \) es el nuevo valor de píxel.
  • \( f(x) \) es la frecuencia de ocurrencia del valor original \( x \).
  • \( c \) es una constante que se ajusta para normalizar los valores.

Ejemplo práctico

Vamos a aplicar esta técnica utilizando el módulo skimage en Python. Primero, asegúrate de instalar la biblioteca:

!pip install scikit-image

A continuación, vamos a realizar una ecualización del histograma en una imagen:

import matplotlib.pyplot as plt
from skimage import io, exposure

# Cargar la imagen
image = io.imread('ruta/a/tu/imagen.jpg', as_gray=True)

# Aplicar ecualización del histograma
ecualizada = exposure.equalize_hist(image)

# Mostrar las imágenes antes y después de la ecualización
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(10, 5))

ax1.imshow(image, cmap='gray')
ax1.set_title('Imagen original')
ax1.axis('off')

ax2.imshow(ecualizada, cmap='gray')
ax2.set_title('Imagen ecualizada')
ax2.axis('off')

plt.show()

Errores típicos / trampas

Aunque la ecualización del histograma es una técnica poderosa, hay varios errores y trampas que puedes encontrarte:

  1. Contraste excesivo: A veces, la ecualización puede generar un contraste extremo, lo que puede hacer que los detalles se vean demasiado claros o demasiado oscuros.
  1. Perdida de detalle: Si aplicas la ecualización a una imagen con muchos píxeles en los mismos valores intensivos, puedes perder detalles importantes.
  1. Efecto sobre las sombras: La ecualización puede distorsionar el contraste de las sombras y luces, lo que no siempre es deseable.

Checklist accionable

Para asegurarte de aplicar la ecualización del histograma correctamente:

  1. Analiza la imagen original: Comprueba si hay detalles perdidos o partes de la imagen que son difíciles de distinguir.
  2. Aplica ecualización global: Utiliza exposure.equalize_hist para mejorar el contraste general.
  3. Verifica los resultados: Analiza visualmente y con herramientas como histogramas la mejoría en el contraste.
  4. Ajusta manualmente: Si es necesario, ajusta los valores de píxel a mano o aplica técnicas adicionales.
  5. Evita overfitting: No sobre-aplique la ecualización para evitar distorsiones innecesarias.

Cierre

Siguientes pasos

  • Explora más técnicas de mejora del contraste: Aprende a usar transformaciones logarítmicas y potenciales.
  • Prueba diferentes modelos de color: La ecualización puede variar dependiendo del modelo de color utilizado (RGB, Lab).
  • Automatiza el proceso: Crea scripts o pipelines para aplicar automáticamente la ecualización en múltiples imágenes.

La ecualización del histograma es una herramienta fundamental en el procesamiento digital de imágenes. Conocer cómo funciona y cómo aplicarlo adecuadamente te permitirá mejorar significativamente la calidad visual de las imágenes, lo que es crucial tanto para la presentación como para el análisis automatizado.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).