Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

OpenCV con Python, Unidad 7 — Segmentación y morfología, 7.1 — Umbralización ·

Umbral adaptativo

Umbral adaptativo

Introducción

La umbralización es un paso fundamental en la visión por computador, donde se convierten los valores de píxel de una imagen en binarios (0 o 255) para facilitar el procesamiento posterior. En OpenCV, hay varios métodos para umbralizar imágenes, entre ellos el umbral adaptativo, que es especialmente útil cuando la iluminación varía en diferentes áreas de la imagen.

Explicación principal

El umbral adaptativo ajusta automáticamente los umbrales basados en las características del subconjunto local de la imagen. Esto lo hace más robusto para imágenes con variaciones de luminosidad.

En OpenCV, el método cv2.threshold se puede usar tanto para umbral fijo como adaptativo. Para umbral adaptativo, utiliza cv2.adaptiveThreshold. Este método toma varios parámetros:

  • src: La imagen a procesar.
  • maxValue: Valor máximo que puede tomar la salida (por defecto es 255).
  • adaptiveMethod: Método de adaptación utilizado. Los valores posibles son ADAPTIVE_THRESH_MEAN_C y ADAPTIVE_THRESH_GAUSSIAN_C.
  • thresholdType: Tipo de umbralización, generalmente THRESH_BINARY.
  • blockSize: Tamaño del bloque sobre el que se aplica la adaptación (usualmente un valor impar).
  • C: Constante substraída de la media o suma ponderada.

Ejemplo práctico

A continuación, se muestra cómo aplicar umbral adaptativo en OpenCV. Supongamos una imagen con variaciones de luminosidad:

import cv2
import numpy as np
import matplotlib.pyplot as plt

# Cargar la imagen
imagen = cv2.imread('ejemplo.jpg', 0)  # Carga como escala de grises

# Aplicar umbral adaptativo
umbral_adaptativo = cv2.adaptiveThreshold(imagen, 255,
                                         cv2.ADAPTIVE_THRESH_MEAN_C,
                                         cv2.THRESH_BINARY,
                                         blockSize=11,  # Tamaño del bloque
                                         C=2)           # Constante

# Mostrar la imagen original y el resultado
plt.subplot(1, 2, 1), plt.imshow(imagen, cmap='gray')
plt.title('Imagen Original'), plt.xticks([]), plt.yticks([])
plt.subplot(1, 2, 2), plt.imshow(umbral_adaptativo, cmap='gray')
plt.title('Umbral Adaptativo'), plt.xticks([]), plt.yticks([])
plt.show()

Errores típicos / trampas

  1. Bloque no adecuado: La elección del tamaño de bloque es crucial. Un bloque demasiado pequeño puede capturar variaciones locales, mientras que uno muy grande promediará el ruido. Generalmente, se recomienda un valor entre 3 y 25.
  1. Constante incorrecta: La constante C debe ser ajustada según la imagen. Si es positiva, disminuye el umbral; si negativa, aumenta el umbral. Un valor incorrecto puede desnaturalizar los resultados.
  1. Tipo de adaptación equivocado: Utilizar el método erróneo (ADAPTIVE_THRESH_MEAN_C en lugar de ADAPTIVE_THRESH_GAUSSIAN_C, o viceversa) puede dar resultados inesperados, especialmente con imagenes complejas.

Checklist accionable

  • Verifica que la imagen esté en escala de grises.
  • Ajusta el tamaño del bloque (blockSize) según las características de tu imagen.
  • Experimenta con diferentes valores de constante C para obtener los mejores resultados.
  • Prueba ambos métodos adaptativos (ADAPTIVE_THRESH_MEAN_C y ADAPTIVE_THRESH_GAUSSIAN_C) y selecciona el más adecuado.

Siguientes pasos

  1. Practica con diferentes imágenes: Aplica umbral adaptativo a varias imágenes para entender mejor cómo funciona en situaciones distintas.
  2. Explora otros métodos de umbralización: Aprende sobre umbral fijo y otros tipos de adaptación, como cv2.ADAPTIVE_THRESH_GAUSSIAN_C.
  3. Combina con otras técnicas: Integrar umbral adaptativo con segmentación o detección de contornos puede mejorar el rendimiento del sistema.
  4. Visualiza los resultados intermedios: Utiliza herramientas de visualización para entender mejor cómo se comportan diferentes parámetros en tu aplicación.

Siguiendo estos pasos, podrás dominar la técnica del umbral adaptativo y aplicarla con efectividad en tus proyectos de visión por computador.

Contacto

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