Búsqueda de sitios web

Transformación de sombrero de copa y sombrero negro usando OpenCV Python


Transformaciones de sombrero de copa y sombrero negro son operaciones de transformaciones morfológicas en imágenes binarias. Generalmente, las operaciones morfológicas procesan la imagen en función de la morfología, estructura o forma.

Transformación de sombrero de copa es una operación que abre una imagen y luego la resta de la imagen original (sombrero de copa=imagen - apertura). Se utiliza para extraer pequeños elementos y detalles de imágenes determinadas, lo que no es más que extracción de características, mejora de imágenes y otras operaciones.

Mientras que la operación Black Hat Transform no es más que la diferencia entre el cierre de una imagen y la imagen de entrada en sí (black hat=cierre - imagen). Cierra la imagen antes de restarla de la imagen original. La imagen resultante contiene objetos más oscuros y más pequeños que su entorno y el elemento estructurante.

OpenCV proporciona una función cv2.morphologyEx(), que implementa directamente estas operaciones de transformación en una imagen.

La función cv2.morphologyEx()

La función realiza estas transformaciones morfológicas avanzadas utilizando operaciones básicas de erosión y dilatación.

Sintaxis

cv.morphologyEx(src, op, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])

Parámetros

  • Src: Imagen fuente, con cualquier número de canales. La profundidad debe ser una de CV_8U, CV_16U, CV_16S, CV_32F o CV_64F.

  • Op: Especifica qué tipo de operación morfológica se debe aplicar.

    • MORPH_OPEN – una operación de apertura

    • MORPH_CLOSE – una operación de cierre

    • MORPH_GRADIENT – un gradiente morfológico

    • MORPH_TOPHAT: “sombrero de copa”

    • MORPH_BLACKHAT: “sombrero negro”

  • Núcleo: Elemento estructurante cuyo origen está definido por el ancla. Se puede crear utilizando getStructuringElement.

  • Ancla: posición del ancla con el kernel, por defecto (-1,-1). Los valores negativos especifican que el ancla está en el centro del núcleo.

  • Dst: Imagen de destino.

  • Iteraciones: especifica el número de veces que se aplican la erosión y la dilatación.

  • borderType y borderValue: son útiles para rellenar la imagen para tener en cuenta los píxeles del límite o si la imagen tiene una forma no regular.

Transformación de sombrero de copa

La transformación de sombrero de copa no es más que la diferencia entre la imagen original y su apertura.

Ejemplo

Tomemos una imagen y hagamos la transformación del sombrero de copa usando el método cv2.morphologyEx().

import cv2
import numpy as np
img = cv2.imread('Images/Dog.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
Kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (13, 5))
tophat = cv2.morphologyEx(gray, cv2.MORPH_TOPHAT, Kernel)
cv2.imshow("Original", img)
cv2.imshow("TopHat", tophat)
cv2.waitKey(0)

Imagen de entrada

Imagen de salida

Ejemplo

En este ejemplo, implementaremos la operación Top Hat manualmente buscando primero la apertura de la imagen y luego restándola de la imagen original.

import cv2
import numpy as np
img = cv2.imread('Images/Dog.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (13, 5))
opening = cv2.morphologyEx(gray, cv2.MORPH_OPEN, Kernel)
tophat_manual = np.subtract(gray, opening)

cv2.imshow("Original", img)
cv2.imshow("TopHat_manual approach", tophat_manual)
cv2.waitKey(0)

Producción

A continuación se muestran imágenes de entrada y salida del programa anterior:

Transformación de sombrero negro

La transformación de sombrero negro no es más que la diferencia entre la imagen de cierre y la imagen original.

Ejemplo

Hagamos la operación de transformación de sombrero negro especificando el parámetro MorphType cv2.MORPH_BLACKHAT en el método cv2.morphologyEx().

import cv2
import numpy as np
img = cv2.imread('Images/Dog.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
Kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (13, 5))
blackhat = cv2.morphologyEx(gray, cv2.MORPH_BLACKHAT, Kernel)
cv2.imshow("Original", img)
cv2.imshow("BlackHat", blackhat)
cv2.waitKey(0)

Imagen de entrada

Imagen de salida

Ejemplo

En este ejemplo, implementaremos la operación de transformación Black Hat manualmente restando la imagen original de su cierre.

import cv2
import numpy as np
img = cv2.imread('Images/Dog.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (13, 5))
closing = cv2.morphologyEx(gray, cv2.MORPH_CLOSE, Kernel)
blackhat_manual = np.subtract(closing, gray)

cv2.imshow("Original", img)
cv2.imshow("BlackHat_manual approach", blackhat_manual)
cv2.waitKey(0)

Producción

Aquí hemos discutido la operación de transformación Top-hat y Black hat usando openCV python.

Artículos relacionados: