Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

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

Ecualización adaptativa

Ecualización adaptativa: Mejora de contraste en imágenes

Introducción

La ecualización adaptativa es una técnica potente para mejorar el contraste en imágenes. Diferencia a la ecualización global, que aplica un ajuste a toda la imagen, y a la ecualización local, que considera solo una ventanilla de pixels alrededor del pixel actual. La ecualización adaptativa combina ambos enfoques para obtener resultados más precisos y detallados.

Explicación principal

La ecualización adaptativa mapea las intensidades de los píxeles a otros valores basándose en la distribución de intensidades locales. Esto es especialmente útil cuando se trabaja con imágenes que tienen diferentes niveles de contraste en distintas áreas, ya que permite ajustar el histograma de cada área para mejorar su contraste sin afectar otras partes de la imagen.

Ejemplo

Para ilustrar cómo funciona la ecualización adaptativa, veamos un ejemplo sencillo. Imagina una imagen con dos regiones: una oscura y una más clara. La ecualización adaptativa ajustará los valores de contraste en cada región sin alterar las transiciones entre ellas.

import cv2
import numpy as np

# Cargar la imagen
img = cv2.imread('imagen.jpg', 0)

def adaptive_hist_equalization(image, block_size=31):
    # Crear una máscara para aplicar ecualización adaptativa
    equalized_image = cv2.adaptiveThreshold(
        image,
        maxValue=255,
        adaptiveMethod=cv2.ADAPTIVE_THRESH_MEAN_C,
        thresholdType=cv2.THRESH_TOZERO,
        blockSize=block_size,
        C=2
    )
    
    return equalized_image

# Aplicar la ecualización adaptativa a la imagen
equalized_img = adaptive_hist_equalization(img)

# Mostrar las imágenes original y resultante
cv2.imshow('Original Image', img)
cv2.imshow('Adaptive Histogram Equalization', equalized_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

En este código, cv2.adaptiveThreshold es una función que aplica la ecualización adaptativa a la imagen. El parámetro block_size define el tamaño del bloque sobre el cual se hace el cálculo de la media, y C ajusta el umbral.

Errores típicos / trampas

  1. Escogencia incorrecta del tamaño del bloque: Un tamaño de bloque muy grande puede hacer que los detalles locales sean perdidos, mientras que uno muy pequeño puede resultar en un contraste excesivo y pérdida de detalles globales.
  2. Uso inadecuado del tipo de adaptación: Se pueden usar dos tipos de adaptación: ADAPTIVE_THRESH_MEAN_C (media) o ADAPTIVE_THRESH_GAUSSIAN_C (gaussiana). Escoger el incorrecto puede afectar negativamente los resultados.
  3. Mal uso de las máscaras y canales: Si la imagen tiene más de un canal, asegúrate de aplicar la ecualización adaptativa a cada canal individualmente.

Checklist accionable

  1. Analiza la imagen original antes de comenzar cualquier proceso de ecualización.
  2. Elige el tamaño del bloque adecuado, considerando los detalles locales y globales en la imagen.
  3. Ajusta el parámetro C según sea necesario para evitar contraste excesivo o pérdida de detalles.
  4. Verifica si la ecualización adaptativa es más efectiva que global o local en tu caso específico, ya que no siempre será la mejor opción.
  5. Revisa los resultados y ajusta manualmente si se necesitan cambios significativos.

Cierre: Siguientes pasos

  • Explora la implementación de ecualización adaptativa en diferentes bloques y tamaños para entender cómo afectan a las imágenes.
  • Aplícalo a diversas tipos de imágenes (fotografías, scans, etc.) para observar los resultados y aprender a ajustarlo según sea necesario.
  • Combina la ecualización adaptativa con otros procesos, como suavizado o segmentación, para mejorar aún más el contraste en tus imágenes.

La ecualización adaptativa es una herramienta valiosa en el procesamiento digital de imágenes. Asegúrate de entender sus mecanismos y limitaciones para obtener los mejores resultados en tus proyectos.

Contacto

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