Detección de bordes#
En clesperanto, se implementan múltiples filtros para la detección de bordes.
Ver también
import pyclesperanto_prototype as cle
from skimage.io import imread
import matplotlib.pyplot as plt
cle.select_device("RTX")
<gfx90c on Platform: AMD Accelerated Parallel Processing (2 refs)>
blobs = imread("../../data/blobs.tif")
blobs.shape
(254, 256)
cle.imshow(blobs)
Operador Sobel#
blobs_sobel = cle.sobel(blobs)
cle.imshow(blobs_sobel)
Operador Laplace#
blobs_laplace = cle.laplace_box(blobs)
cle.imshow(blobs_laplace)
Laplaciano de Gaussiana#
También conocido como el filtro del sombrero mexicano
blobs_laplacian_of_gaussian = cle.laplace_box(cle.gaussian_blur(blobs, sigma_x=1, sigma_y=1))
cle.imshow(blobs_laplacian_of_gaussian)
blobs_laplacian_of_gaussian = cle.laplace_box(cle.gaussian_blur(blobs, sigma_x=5, sigma_y=5))
cle.imshow(blobs_laplacian_of_gaussian)
Filtro de Varianza Local#
blobs_edges = cle.variance_box(blobs, radius_x=5, radius_y=5)
cle.imshow(blobs_edges)
Desviación estándar local#
… es simplemente la raíz cuadrada de la varianza local
blobs_edges = cle.standard_deviation_box(blobs, radius_x=5, radius_y=5)
cle.imshow(blobs_edges)
La detección de bordes no es mejora de bordes#
Intuitivamente, uno podría aplicar un filtro de detección de bordes para mejorar los bordes en imágenes que muestran bordes. Probemos con una imagen que muestra membranas. Es una imagen 3D, por cierto.
image = imread("../../data/EM_C_6_c0.tif")
image.shape
(256, 256, 256)
cle.imshow(image[60])
image_sobel = cle.sobel(image)
cle.imshow(image_sobel[60])
Al mirar con mucho cuidado, se puede observar que los bordes son un poco más gruesos en la segunda imagen. El filtro de detección de bordes detecta dos bordes, el lado de aumento de señal de la membrana y el lado de disminución de señal en el lado opuesto. Hagamos zoom:
fig, axs = plt.subplots(1, 2)
cle.imshow( image[60, 125:145, 135:155], plot=axs[0])
cle.imshow(cle.pull(image_sobel)[60, 125:145, 135:155], plot=axs[1])
Mejorando los bordes#
Por lo tanto, para mejorar los bordes en una imagen de membrana, otros filtros son más útiles. La mejora puede significar, por ejemplo, hacer las membranas más gruesas y potencialmente cerrar brechas.
Desviación estándar local#
image_std = cle.standard_deviation_box(image, radius_x=5, radius_y=5, radius_z=5)
cle.imshow(image_std[60])
Máximo local#
image_max = cle.maximum_box(image, radius_x=5, radius_y=5, radius_z=5)
cle.imshow(image_max[60])