El umbral adaptativo es una técnica crucial de procesamiento de imágenes para transformar imágenes en escala de grises en imágenes binarias (blanco y negro). A diferencia del umbral simple, que emplea un único valor de umbral para toda la imagen, el umbral adaptativo calcula dinámicamente un umbral para diferentes regiones de la imagen. Esta adaptabilidad es particularmente ventajosa cuando se trabaja con imágenes que presentan una iluminación desigual, donde un umbral global podría no separar con precisión el primer plano del fondo.
El principio fundamental del umbral adaptativo consiste en considerar las características locales de la imagen al determinar el umbral. En lugar de un valor determinado globalmente, el algoritmo divide la imagen en regiones más pequeñas (bloques o mosaicos). Para cada región, se calcula un umbral en función de las intensidades de los píxeles dentro de esa región. Este enfoque localizado compensa eficazmente las variaciones de iluminación en la imagen. Los métodos comunes para calcular el umbral local incluyen el promedio de las intensidades de los píxeles dentro de la región o el uso de un promedio ponderado (gaussiano).
Función de umbral adaptativo de OpenCV
OpenCV, una potente biblioteca de visión artificial, simplifica el umbral adaptativo con su función cv2.adaptiveThreshold()
. Esta función acepta varios parámetros clave:
src
: La imagen en escala de grises de entrada.maxValue
: El valor máximo asignado a los píxeles que superan el umbral (normalmente 255 para blanco).adaptiveMethod
: El método para calcular el umbral. Las opciones incluyen:cv2.ADAPTIVE_THRESH_MEAN_C
: Utiliza la media de la vecindad como umbral.cv2.ADAPTIVE_THRESH_GAUSSIAN_C
: Utiliza un promedio ponderado (gaussiano) de la vecindad como umbral.
thresholdType
: El tipo de umbral.cv2.THRESH_BINARY
es común, estableciendo los píxeles por encima del umbral enmaxValue
y los que están por debajo en 0 (negro).blockSize
: El tamaño de la vecindad (región) utilizada para el cálculo del umbral. Debe ser un número impar.C
: Una constante que se resta de la media o la media ponderada, ajustando el umbral.
Implementación práctica con Python
Aquí hay un ejemplo de Python usando OpenCV:
import cv2
import numpy as np
# Cargar la imagen en escala de grises
img = cv2.imread('input.jpg', cv2.IMREAD_GRAYSCALE)
# Aplicar umbral adaptativo
thresh = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
# Mostrar los resultados
cv2.imshow('Original', img)
cv2.imshow('Umbral Adaptativo', thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()
Este código carga una imagen en escala de grises, aplica el umbral adaptativo utilizando el método gaussiano (cv2.ADAPTIVE_THRESH_GAUSSIAN_C
), un tamaño de bloque de 11 y una constante de 2. Luego muestra las imágenes original y umbralizada. La experimentación con blockSize
y C
es crucial para obtener resultados óptimos, al igual que la selección del adaptiveMethod
adecuado en función de las características de la imagen.
Elegir los parámetros correctos
La eficacia del umbral adaptativo depende de la selección de parámetros. Un blockSize
mayor considera una vecindad más amplia, lo que produce transiciones más suaves pero que potencialmente pierden detalles más finos. Por el contrario, un blockSize
menor es más sensible a las variaciones locales, pero puede introducir ruido. La constante C
ayuda a ajustar la sensibilidad del umbral; un C
mayor produce un umbral más alto.
La elección entre cv2.ADAPTIVE_THRESH_MEAN_C
y cv2.ADAPTIVE_THRESH_GAUSSIAN_C
depende de las características de ruido de la imagen. cv2.ADAPTIVE_THRESH_GAUSSIAN_C
se prefiere generalmente para imágenes con ruido significativo, ya que la ponderación gaussiana reduce la influencia de los valores atípicos.
Conclusión
El umbral adaptativo proporciona una solución robusta para binarizar imágenes con iluminación desigual, mejorando significativamente la precisión con respecto al umbral simple. La eficiente función cv2.adaptiveThreshold()
de OpenCV permite a los usuarios implementar fácilmente esta técnica, logrando resultados óptimos ajustando cuidadosamente los parámetros y eligiendo el método adaptativo adecuado. Su flexibilidad y eficacia la convierten en una herramienta indispensable en diversas aplicaciones de visión artificial.
Tabla de contenido