¿Cuáles son las diferentes técnicas de umbralización de imágenes y cómo implementarlas?

Estás leyendo la publicación: ¿Cuáles son las diferentes técnicas de umbralización de imágenes y cómo implementarlas?

El umbral de imágenes es un submódulo de segmentación de imágenes en el que ciertos valores de píxeles se modifican de acuerdo con un valor de umbral particular donde el valor de píxeles de se considera negro y el valor de píxel de 255 se considera blanco. Por lo tanto, el módulo OpenCV se utiliza para validar el valor de umbral en consecuencia, el valor de píxel inferior de 0 y el valor de píxel superior de 255 y, en consecuencia, facilitar la segmentación de la imagen según sea necesario. Este artículo informa sobre los diferentes tipos de técnicas de umbralización de imágenes con implementación utilizando el módulo OpenCV.

Tabla de contenido

  1. Introducción a la umbralización de imágenes
  2. Umbral simple usando OpenCV
  3. Umbral adaptativo usando OpenCV
  4. Umbral de Ostu usando OpenCV
  5. Resumen

Introducción a la umbralización de imágenes

La umbralización de imágenes es una técnica empleada para facilitar la segmentación de imágenes para diversas tareas de preprocesamiento de imágenes. Al considerar el procesamiento de imágenes, el módulo OpenCV tiene varias funciones incorporadas que se pueden usar para tareas relevantes. Así que aquí el módulo OpenCV se utiliza para la umbralización de imágenes, donde las diferentes técnicas de umbralización de imágenes que ofrece OpenCV se enumeran a continuación:

  • Umbral simple
  • Umbral adaptativo
  • Umbral de Ostu

Entonces, aquí el paquete OpenCV se usa como intermediario para hacer cumplir el umbral requerido para la comparación entre los valores de píxeles y segmentar cualquier límite requerido de una imagen. Entonces, en la siguiente sección del artículo, veamos cómo emplear cada uno de los tipos de umbrales posibles usando OpenCV.

¿Está buscando un repositorio completo de bibliotecas de Python utilizadas en ciencia de datos, echa un vistazo aquí.

Umbral simple usando OpenCV

La técnica de umbralización simple en OpenCV también se denomina umbralización binaria. En la técnica de umbralización simple, se establece un valor de umbral estándar y cada valor de píxel se compara con el valor de umbral. Si el valor del píxel es menor que el valor de umbral mencionado, entonces el valor se establece en 0 o, de lo contrario, se establece en el valor máximo.

Entonces, exploremos diferentes técnicas simples de umbralización.

Cargando la imagen al entorno de trabajo

Las imágenes se pueden cargar en el entorno de trabajo utilizando el Estoy leído() función del paquete OpenCV como se muestra a continuación.

img=cv2.imread(‘/content/drive/MyDrive/Colab notebooks/Técnicas de umbralización de imagen en opencv/img_thresh.jpeg’)

Ahora la imagen cargada se puede visualizar usando el immostrar() función de matplotlib como se muestra a continuación.

plt.imshow(img) plt.show()

Pero la función imshow() por defecto carga una escala de grises y la imagen original se puede obtener usando la función para convertir una imagen BGR a una imagen RGB llamada cv2.COLOR_BGR2RGB() como se muestra a continuación.

orig_img=cv2.cvtColor(img, cv2.COLOR_BGR2RGB) plt.imshow(orig_img) plt.show()

Sintaxis general de umbralización de imagen simple

cv2.threshold(fuente, valor de umbral, valor máximo, técnica de umbral)

cv2.THRESH_BINARIO

Esta es una de las técnicas simples de umbralización en las que si la intensidad del píxel es mayor que el umbral mencionado, la imagen se segmentará en una región blanca que está en el límite superior de 255 o, si la intensidad es menor que la imagen, se segmentará. al límite inferior 0 o la imagen se segmentará a la región más negra.

🔥 Recomendado:  Aprendizaje automático con doble sesgo para evaluación e inferencia

Los pasos incluidos para emplear la función binaria de umbral del módulo OpenCV se muestran a continuación.

rect,umbral=cv2.umbral(orig_img,127,255,cv2.UMBRAL_BINARIO)

Posteriormente, el valor de umbral obtenido se puede utilizar para obtener gráficos y visualizar la funcionalidad como se muestra a continuación.

plt.imshow(umbral) plt.show()

Así que aquí podemos comparar la imagen original y la imagen segmentada de umbral binario por el módulo OpenCV. Así que ahora pasemos a la siguiente técnica.

cv2.THRESH_BINARY_INV

Es justo lo contrario de la función binaria de umbral donde los píxeles mayores que el umbral se segmentarán a la región negra o al valor 0 y para los píxeles inferiores al valor de umbral se asignarán los valores de píxeles más altos o el valor de 255 píxeles

Veamos cómo usar la función para visualizar la función para la segmentación de imágenes binarias de umbral inverso.

rect,umbral1=cv2.umbral(orig_img,127,255,cv2.UMBRAL_BINARIO_INV)

Entonces, ahora usemos el valor de umbral para obtener gráficos y visualizar cómo la función de umbral inversa ha segmentado los píxeles.

plt.imshow(umbral1) plt.show()

Así que ahora podemos comparar claramente cómo la función de umbral binario y el binario inverso de OpenCV segmentan la imagen de acuerdo con el valor del umbral. Para una mejor comprensión, se obtiene una subparcela para comprender claramente las diferencias de segmentación como se muestra a continuación.

plt.figure(figsize=(20,5)) plt_title=[‘Original Image’,’Binary thresholding of original image’,’Inverse Binary thresholding of original image’]
image_list=[orig_img,thresh,thresh1]

for i in range(3): plt.subplot(1,3,i+1) plt.imshow(image_list[i]) plt.título(plt_título[i]) #plt.tight_layout() plt.mostrar()

cv2.THRESH_TRUNC

Esta función del módulo OpenCV opera de tal forma que si el valor de intensidad de cada uno de los píxeles es mayor que el valor umbral se trunca al umbral o bien se trunca al valor más bajo del píxel o se segmenta hacia el negro. región. Los pasos necesarios para utilizar la función se muestran a continuación.

rect,umbral2=cv2.umbral(orig_img,127,255,cv2.THRESH_TRUNC)

Ahora podemos usar el valor de umbral para obtener gráficos para visualizar la imagen segmentada.

plt.imshow(umbral2) plt.show()

cv2.THRESH_TOZERO

Esta función de OpenCV funciona de tal manera que si la intensidad de los píxeles es menor que los valores de umbral, los valores de los píxeles se establecen en 0 o la imagen se segmenta en el lado más oscuro o hacia la región negra. Podemos usar esta función siguiendo los pasos que se mencionan a continuación.

rect,umbral3 = cv2.umbral(orig_img,127,255,cv2.UMBRAL_TOZERO)

Ahora los valores de umbral se pueden usar para obtener gráficos como se muestra a continuación para visualizar cómo la función ha segmentado la imagen en función de las intensidades de los píxeles.

plt.imshow(umbral3) plt.show()

cv2.THRESH_TOZERO_INV

Esta función es simplemente la inversa de la función anterior donde, si la intensidad de los píxeles es menor que el valor de los píxeles, se establecerá en el valor más alto o se segmentará hacia la región más blanca, mientras que el valor de los píxeles es más alto que el umbral. se segmentará al valor de píxel más bajo y la imagen se segmentaría hacia la región más oscura.

rect,umbral4 = cv2.umbral(orig_img,127,255,cv2.THRESH_TOZERO_INV)

Ahora, el valor de umbral se puede utilizar para visualizar cómo se han segmentado las imágenes originales en función de las intensidades de los píxeles, como se muestra a continuación.

plt.imshow(umbral4) plt.show()

Para una mejor comprensión de la imagen, la segmentación permite obtener una subparcela para comparar la técnica de umbralización individual en la imagen original.

🔥 Recomendado:  ¿Cómo hacer que la clasificación de texto sea explicable con el clasificador SS3?

plt.figure(figsize=(20,5)) plt_title=[‘Original Image’,’Zero thresholding of original image’,’Inverse Zero thresholding of original image’]
image_list=[orig_img,thresh3,thresh4]

for i in range(3): plt.subplot(1,3,i+1) plt.imshow(image_list[i]) plt.título(plt_título[i]) #plt.tight_layout() plt.mostrar()

plt.figure(figsize=(20,5))

Así que ahora echemos un vistazo a la siguiente técnica de umbralización de imágenes denominada umbralización adaptativa.

Umbral adaptativo usando OpenCV

La umbralización adaptativa es más o menos similar a la umbralización simple, pero si se observa de cerca en la umbralización simple, se usa un valor global del umbral para comparar las intensidades de los píxeles, pero aquí, en la técnica de umbralización adaptativa, el valor del umbral se calcula para regiones más pequeñas que representan varios valores de umbral para diferentes regiones y tienden a producir un rendimiento fenomenal en condiciones de poca iluminación.

Así que echemos un vistazo a las diferentes técnicas de umbralización de imagen que ofrecen las técnicas de umbralización adaptativa. Pero primero, veamos la sintaxis general de la técnica de umbral adaptativo.

La sintaxis para la umbralización adaptativa

cv2.adaptiveThreshold(fuente, maxVal, adaptiveMethod, tipo de umbral, tamaño de bloque, constante)

Entonces, la técnica de umbralización adaptativa tiene dos tipos de funciones incorporadas. Ellos son

  • Umbral adaptativo medio
  • Umbral gaussiano

Pero antes de aplicar la técnica de umbralización adaptativa, la imagen debe convertirse a escala de grises para la implementación de las técnicas de umbralización adaptativa. Los pasos incluidos en la conversión de la imagen original a una imagen en escala de grises se muestran a continuación.

img_gris = cv2.cvtColor(orig_img, cv2.COLOR_BGR2GRAY)

Ahora usemos la imagen convertida en escala de grises para aplicar las técnicas de umbral adaptativo.

cv2.ADAPTIVE_THRESH_MEAN_C

Esta técnica de establecimiento de umbrales calcula las medias de los bloques de los valores de los píxeles con respecto a una constante, en la que el valor constante se resta de la media de los píxeles. Los pasos a seguir para implementar esta función son los siguientes.

umbral5 = cv2.umbral adaptativo(img_grey,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,11,2)

Entonces, el valor de umbral obtenido se puede visualizar a través de un gráfico como se muestra a continuación.

plt.imshow(umbral5) plt.show()

plt.imshow(umbral5)

plt.mostrar()

cv2.ADAPTIVE_THRESH_GAUSSIAN_C

Similar a la técnica de umbral medio, esta técnica de umbral calcula los pesos gaussianos de los píxeles vecinos con respecto a un valor constante en el que el valor constante se restará de los pesos gaussianos para la segmentación de la imagen. Los pasos a seguir para implementar esta técnica se muestran a continuación.

thresh6 = cv2.adaptiveThreshold(img_grey,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2) Los valores de umbral obtenidos se pueden visualizar utilizando gráficos como se muestra a continuación para comprender mejor cómo los pesos gaussianos han segmentado cada uno de los valores de píxel. . plt.imshow(thresh6) plt.show()

Para una mejor comprensión, se obtuvo una subparcela para comprender cómo ocurre la segmentación de la imagen en la imagen original con respecto al umbral de imagen adaptativo.

plt.figure(figsize=(20,5)) plt_titles=[‘Original Image’,’Adaptive Mean Thresholding Image’,’Gaussian Thresholding Image’]
imgs=[orig_img,thresh5,thresh6]

para i en rango(3): plt.subplot(1,3,i+1) plt.imshow(imgs[i]) plt.title(plt_titles[i]) plt.tight_layout() plt.mostrar()

Umbralización de Ostu usando OpenCV

La técnica de umbralización de Ostu es una técnica de umbralización de imágenes en la que el valor umbral se determina automáticamente para la imagen que se pasa para la segmentación. Esto elimina los problemas asociados con la segmentación incorrecta de la imagen durante diversas condiciones de iluminación. La técnica binaria de Ostu es más adecuada e interpretable para imágenes con ruido, ya que para las imágenes con ruido, la selección manual de los valores de umbral a veces puede salir mal. Entonces, en primer lugar, para implementar la técnica de umbralización de Ostu, debe convertirse en una imagen en escala de grises como se muestra a continuación.

🔥 Recomendado:  Los 15 mejores trabajos que no son de 9 a 5 y que pueden brindarle libertad y excelente remuneración

ruido_img_gris = cv2.cvtColor(orig_nosie_img, cv2.COLOR_BGR2GRAY)

Umbral de Ostu normal

La técnica normal de umbralización de Ostu funciona en la imagen convertida en escala de grises y selecciona automáticamente el umbral para la imagen con ruido convertida en escala de grises. A continuación se muestran los pasos necesarios para implementar esta técnica.

rect1,umbral7=cv2.umbral(ruido_img_gris,0,255,cv2.UMBRAL_BINARIO+cv2.UMBRAL_OTSU)

Posteriormente, estos valores de umbral se pueden utilizar para visualizar la segmentación de la imagen con ruido en función del valor de umbral seleccionado automáticamente.

plt.imshow(thresh7) plt.show()

Umbralización de Ostu basada en filtro gaussiano

Para implementar esta técnica, la imagen en escala de grises debe desenfocarse principalmente utilizando el filtro gaussiano, como se muestra a continuación.

blur_noise_img=cv2.GaussianBlur(noise_img_grey,ksize=(7,7),sigmaX=0)

Nota:-

El parámetro ksize siempre debe ser impar ya que especifica la altura y el ancho de la imagen y sigmaX, que es la desviación estándar a lo largo del eje x y se puede declarar como 0. Ahora veamos cómo obtener el valor de umbral usando el filtro gaussiano. para la umbralización de Ostu.

rect,umbral8 = cv2.umbral(blur_noise_img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

Ahora usemos este valor de umbral obtenido y obtengamos un gráfico para visualizar el mismo.

plt.imshow(thresh8) plt.show()

Obtengamos una trama secundaria para una mejor comprensión de cómo funciona la técnica de umbralización de Ostu para la umbralización de imágenes.

plt.figure(figsize=(20,5)) plt_titles=[‘Original Noisy Image’,’Grayscale image’,’Ostus threshold image’,’Guassian blurred image’,’Ostus thresholding image with gaussian filtering’]
img_list=[orig_nosie_img,noise_img_grey,thresh7,blur_noise_img,thresh8]

para i en rango(5): plt.subplot(1,5,i+1) plt.imshow(img_list[i]) plt.title(plt_titles[i]) plt.tight_layout() plt.show() image’,’Imagen de umbral de Ostus con filtrado gaussiano’]

img_list=[orig_nosie_img,noise_img_grey,thresh7,blur_noise_img,thresh8]

para i en el rango (5):

plt.subplot(1,5,i+1)

plt.imshow(lista_img[i])

plt.title(plt_titles[i])

plt.tight_layout()

plt.mostrar()

Resumen

En resumen, las técnicas de umbralización de imágenes son una de las partes integrales de la segmentación de imágenes, donde la imagen se segmenta en función de los valores de intensidad de píxeles y los valores de umbral considerados. La selección del valor umbral varía de una técnica a otra y la técnica de segmentación de imagen correspondiente será responsable de la segmentación de imagen apropiada. Por lo tanto, este artículo nos brinda una descripción general completa de cómo se pueden aplicar diferentes técnicas de umbralización de imágenes utilizando OpenCV y cómo se segmentan las imágenes en función de los valores de intensidad de píxeles y los valores de umbral que se están considerando.

Referencias