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_CyADAPTIVE_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
- 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.
- Constante incorrecta: La constante
Cdebe ser ajustada según la imagen. Si es positiva, disminuye el umbral; si negativa, aumenta el umbral. Un valor incorrecto puede desnaturalizar los resultados.
- Tipo de adaptación equivocado: Utilizar el método erróneo (
ADAPTIVE_THRESH_MEAN_Cen lugar deADAPTIVE_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
Cpara obtener los mejores resultados. - Prueba ambos métodos adaptativos (
ADAPTIVE_THRESH_MEAN_CyADAPTIVE_THRESH_GAUSSIAN_C) y selecciona el más adecuado.
Siguientes pasos
- Practica con diferentes imágenes: Aplica umbral adaptativo a varias imágenes para entender mejor cómo funciona en situaciones distintas.
- Explora otros métodos de umbralización: Aprende sobre umbral fijo y otros tipos de adaptación, como
cv2.ADAPTIVE_THRESH_GAUSSIAN_C. - Combina con otras técnicas: Integrar umbral adaptativo con segmentación o detección de contornos puede mejorar el rendimiento del sistema.
- 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.