En morfología y procesamiento de imágenes digitales, las transformaciones top-hat y black-hat son operaciones que se utilizan para extraer pequeños elementos y detalles de imágenes dadas. Estos dos tipos de transformadas en las que, la transformada de sombrero de copa se define como la diferencia entre la imagen de entrada y su apertura por algún elemento estructurante, mientras que la transformada de sombrero negro se define como la diferencia entre la imagen de cierre y la de entrada. Estas transformaciones se utilizan para diversas tareas de procesamiento de imágenes, como la extracción de características, la ecualización de fondo, la mejora de imágenes y otras.
Aquí usaremos operaciones morfológicas de Apertura y Cierre .
Diferencia entre sombrero de copa y sombrero negro
El filtro de sombrero de copa se utiliza para resaltar objetos brillantes de interés en un fondo oscuro. La operación de sombrero negro se usa para hacer lo contrario, realzar objetos oscuros de interés en un fondo brillante.
Ejemplo 1: Transformación de sombrero de copa
Imagen utilizada:
# Importing OpenCV import cv2 # Getting the kernel to be used in Top-Hat filterSize =(3, 3) kernel = cv2.getStructuringElement(cv2.MORPH_RECT, filterSize) # Reading the image named 'input.jpg' input_image = cv2.imread("testing.jpg") input_image = cv2.cvtColor(input_image, cv2.COLOR_BGR2GRAY) # Applying the Top-Hat operation tophat_img = cv2.morphologyEx(input_image, cv2.MORPH_TOPHAT, kernel) cv2.imshow("original", input_image) cv2.imshow("tophat", tophat_img) cv2.waitKey(5000)
Producción:
Como puede observar en la imagen de arriba, los detalles muy pequeños se realzan y eliminan mediante la operación Top-Hat. Por lo tanto, es útil para observar los detalles menores de las entradas cuando están presentes como píxeles claros sobre un fondo oscuro.
Ejemplo 2: transformación Black Hat
Imagen de entrada:
# Importing OpenCV and numpy import cv2 # Defining the kernel to be used in Top-Hat filterSize =(3, 3) kernel = cv2.getStructuringElement(cv2.MORPH_RECT, filterSize) # Reading the image named 'input.jpg' input_image = cv2.imread("testing.jpg") input_image = cv2.cvtColor(input_image, cv2.COLOR_BGR2GRAY) # Applying the Black-Hat operation tophat_img = cv2.morphologyEx(input_image, cv2.MORPH_BLACKHAT, kernel) cv2.imshow("original", input_image) cv2.imshow("tophat", tophat_img) cv2.waitKey(5000)
Producción:
Aquí, en esta imagen, todos los objetos que son blancos sobre un fondo oscuro se resaltan debido a la transformación Black Hat aplicada a la imagen de entrada.