hace 2 años
La umbralización es una técnica fundamental en el procesamiento de imágenes que simplifica una imagen en escala de grises a una imagen binaria. Esto se logra estableciendo un valor umbral; los píxeles con valores superiores al umbral se convierten en blanco (o el valor máximo), mientras que los inferiores se convierten en negro (o cero). Si bien es una herramienta simple, es crucial para diversas tareas de visión artificial como la segmentación de objetos, la detección de bordes y la preparación de imágenes para el reconocimiento óptico de caracteres (OCR).
Umbralización global vs. adaptativa
La umbralización global utiliza un único valor umbral para toda la imagen. Si bien es computacionalmente eficiente, falla en imágenes con iluminación desigual o contrastes variables. En estas situaciones, algunas regiones pueden quedar subexpuesta u sobreexpuesta, perdiendo detalles importantes. Por ejemplo, en una imagen médica, un umbral global podría resultar en la pérdida de información crítica para el diagnóstico.

En contraste, la umbralización adaptativa calcula el umbral para regiones más pequeñas de la imagen. Esto permite que el algoritmo se ajuste dinámicamente a las intensidades de los píxeles locales, manejando eficazmente imágenes con condiciones de iluminación variables. Esencialmente, proporciona un "ajuste personalizado" a cada región de la imagen, a diferencia del enfoque "talla única" de la umbralización global.
cvadaptiveThreshold: la función de OpenCV
En OpenCV, la función cvadaptiveThresholdimplementa la umbralización adaptativa. Esta función ofrece una flexibilidad considerable gracias a sus parámetros:
src: Imagen de entrada en escala de grises.dst: Imagen de salida binaria.maxValue: Valor máximo asignado a los píxeles que superan el umbral (generalmente 255).adaptiveMethod: Método para calcular el umbral. OpenCV proporciona dos opciones principales:-
cv.ADAPTIVE_THRESH_MEAN_C: El umbral es la media de los píxeles en la vecindad menos una constanteC. -
cv.ADAPTIVE_THRESH_GAUSSIAN_C: El umbral es una suma ponderada por una gaussiana de los píxeles en la vecindad menos una constanteC. thresholdType: Tipo de umbralización. Generalmente se utilizacv.THRESH_BINARYpara obtener una imagen binaria.blockSize: Tamaño de la vecindad (un valor impar, por ejemplo, 11, 21, etc.). Define el tamaño de la región local para el cálculo del umbral. Valores más grandes consideran una región mayor, haciendo el algoritmo menos sensible a variaciones locales, pero también perdiendo detalles finos.C: Constante que se resta de la media o la suma ponderada. Afecta el contraste de la imagen binaria resultante.
Ejemplos de uso de cvadaptiveThreshold
Consideremos un fragmento de código que ilustra el uso de cvadaptiveThreshold:
import cv2 as cvimport numpy as np# Cargar la imagen en escala de grisesimg = cv.imread('imagen.jpg', cv.IMREAD_GRAYSCALE)# Aplicar umbralización adaptativa con el método MEAN_Cth1 = cv.adaptiveThreshold(img, 255, cv.ADAPTIVE_THRESH_MEAN_C, cv.THRESH_BINARY, 11, 2)# Aplicar umbralización adaptativa con el método GAUSSIAN_Cth2 = cv.adaptiveThreshold(img, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 11, 2)# Mostrar las imágenescv.imshow('Original', img)cv.imshow('Adaptive Mean', th1)cv.imshow('Adaptive Gaussian', th2)cv.waitKey(0)cv.destroyAllWindows()Este código carga una imagen, aplica umbralización adaptativa utilizando tanto cv.ADAPTIVE_THRESH_MEAN_Ccomo cv.ADAPTIVE_THRESH_GAUSSIAN_C, y luego muestra las imágenes resultantes para comparar. La elección del método y los parámetros blockSizey Cdependerá de la imagen específica y la tarea en cuestión.
Comparación entre métodos de umbralización
| Método | Descripción | Ventajas | Desventajas |
|---|---|---|---|
| Umbralización global | Utiliza un único valor umbral para toda la imagen. | Simple y rápido. | Insensible a variaciones de iluminación. Puede perder detalles en regiones con contrastes variables. |
| Umbralización adaptativa (MEAN_C) | Calcula el umbral como la media de una vecindad menos una constante. | Robusto a variaciones locales de iluminación. Mejor preservación de detalles. | Más lento que la umbralización global. La elección de blockSize y C influye en el resultado. |
| Umbralización adaptativa (GAUSSIAN_C) | Calcula el umbral como una suma ponderada gaussiana de una vecindad menos una constante. | Robusto a variaciones locales de iluminación. Mejor preservación de detalles en comparación con MEAN_C. Más efectivo con ruido gaussiano. | Más lento que la umbralización global y MEAN_C. La elección de blockSize y C influye en el resultado. |
| Umbralización de Otsu | Determina automáticamente el umbral óptimo a partir del histograma de la imagen. | Automático, no requiere ajuste de parámetros. | Solo efectivo para imágenes bimodales (con dos picos en el histograma). Puede fallar en imágenes con ruido significativo. |
Consideraciones adicionales
La elección del método de umbralización adaptativa y el ajuste de los parámetros blockSizey Cson cruciales para obtener resultados óptimos. Experimentar con diferentes valores de estos parámetros es fundamental para encontrar la mejor configuración para una imagen específica.
Además, el preprocesamiento de la imagen, como la eliminación de ruido, puede mejorar significativamente la efectividad de la umbralización adaptativa. Un filtro gaussiano puede ser particularmente útil para reducir el ruido gaussiano presente en la imagen antes de aplicar la umbralización.

La umbralización adaptativa, implementada a través de cvadaptiveThresholden OpenCV, es una herramienta poderosa y flexible para el procesamiento de imágenes. Su capacidad para adaptarse a las variaciones locales de iluminación la convierte en una opción superior a la umbralización global en muchas aplicaciones de visión artificial.
