Umbral adaptativo usando OpenCV

Sahil Bhosale 15 febrero 2024
  1. Umbral adaptativo usando OpenCV
  2. Conclusión
Umbral adaptativo usando OpenCV

OpenCV tiene dos tipos de umbralización, umbralización simple y umbralización adaptativa. En este artículo, veremos en detalle qué es el umbral adaptativo y cómo implementarlo utilizando la biblioteca OpenCV.

Umbral adaptativo usando OpenCV

En OpenCV, el umbral adaptativo es el proceso en el que se calcula un valor de umbral diferente para cada región de la imagen. A diferencia del umbral simple, se utiliza el mismo valor de umbral para todos los demás píxeles de la imagen.

Si un píxel tiene un valor menor que el umbral, se establece 0; si el píxel tiene un valor superior al umbral, se establece 255.

El umbral adaptativo utiliza dos métodos: umbral medio adaptativo y gaussiano. A continuación se muestra la sintaxis para el umbral adaptativo.

Sintaxis:

cv2.adaptiveThreshold(
    inputImage,
    maximumValue,
    thresholdMethod,
    typeOfthreshold,
    sizeOfBlock,
    constantValue,
)

A continuación se muestran los parámetros pasados al método adaptiveThreshold().

  1. imagen de entrada: la fuente es la imagen de entrada.
  2. maximumValue: Valor máximo que se le puede asignar a un píxel. Esto no es más que el valor de umbral máximo. Como máximo, puede tomar 255.
  3. adaptiveMethod: el método adaptativo determina cómo se calculará el valor del umbral. Hay dos métodos adaptativos para el umbral adaptativo.
  4. cv2.ADAPTIVE_THRESH_MEAN_C: Toma la media de los valores del área de vecindad restada por el valor constante, es decir, la media del tamaño de bloque multiplicado por el tamaño de bloque vecindad de un punto menos el valor constante.
  5. cv2.ADAPTIVE_THRESH_GAUSSIAN_C: Toma la suma ponderada Gaussiana de los valores de vecindad restada por el valor constante, es decir, toma la suma ponderada del tamaño de bloque multiplicado por el tamaño de bloque vecindad de un punto menos el valor constante.
  6. typeOfthreshold: El tipo de umbralización a aplicar.
  7. sizeOfBlock es el tamaño del área vecina.
  8. constantValue: Un valor constante deducido de la suma promedio o ponderada de los píxeles cercanos.

Ahora que hemos repasado la sintaxis y los parámetros del método adaptiveThreshold(), tomemos un ejemplo y veamos cómo funciona en la práctica el umbral adaptativo.

Primero, asegúrese de tener la biblioteca OpenCV instalada en su sistema. Después de eso, debe importar la biblioteca OpenCV, como se muestra en el ejemplo a continuación.

El método de umbral adaptativo espera que la imagen de origen sea una imagen en escala de grises. Entonces, mientras leemos la imagen con el método imread(), tenemos que pasar 0 como segundo argumento para obtener una imagen en escala de grises y luego almacenar esa imagen dentro de la variable imagen.

Fragmento de código:

import cv2

image = cv2.imread("text.jpg", 0)

mean = cv2.adaptiveThreshold(
    image, 250, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 25, 15
)

gaussian = cv2.adaptiveThreshold(
    image, 250, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 25, 15
)

cv2.imshow("Adaptive Thresholding Mean", mean)
cv2.imshow("Adaptive Thresholding Gaussian", gaussian)

cv2.waitKey(0)

La imagen contiene texto de un libro. Ahora aplicaremos ambas técnicas de umbral adaptativo a la imagen de arriba y pasaremos los mismos parámetros a ambas técnicas y veremos la diferencia en las imágenes de salida.

Primero pasaremos la imagen y luego como segundo parámetro, pasaremos 255 (blanco) y el método adaptativo ADAPTIVE_THRESH_MEAN_C y ADAPTIVE_THRESH_GAUSSIAN_C respectivamente, como tercer parámetro.

Para el tipo de umbral, pasaremos el THRESH_BINARY, que realizará un umbral básico en la imagen. Luego debe especificar el tamaño del área vecina; en este caso, hemos pasado 25 como tamaño de bloque.

Ahora, pasaremos un valor constante como último parámetro al método adaptiveThreshold() y luego almacenaremos los resultados de ambas operaciones dentro de las variables mean y gaussian, respectivamente.

Al final, puede imprimir estas imágenes resultantes en la ventana de salida usando el método imshow() y especificar nombres para las pestañas. Así es como se ve la salida tanto de la media como de la gaussiana.

Producción:

umbral adaptativo

Conclusión

Hay dos tipos de umbrales en OpenCV: simple y adaptativo. En el umbral simple, se aplica el mismo valor de umbral a todos los demás píxeles de la imagen.

Este tipo de umbralización puede funcionar bien para algunas imágenes en las que las condiciones de iluminación no varían. Pero en la mayoría de las imágenes, la iluminación varía bastante.

En tales casos, el uso de esta técnica de umbralización podría no ser un buen enfoque.

Por lo tanto, la biblioteca OpenCV también tiene otra técnica de umbral llamada umbral adaptativo. En el umbral adaptativo, para cada región, se calcula un valor de umbral diferente, lo que proporciona mejores resultados.

Sahil Bhosale avatar Sahil Bhosale avatar

Sahil is a full-stack developer who loves to build software. He likes to share his knowledge by writing technical articles and helping clients by working with them as freelance software engineer and technical writer on Upwork.

LinkedIn