Détection de contours#
Dans clesperanto, plusieurs filtres pour la détection de contours sont implémentés.
Voir aussi
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)
Opérateur de Sobel#
blobs_sobel = cle.sobel(blobs)
cle.imshow(blobs_sobel)
Opérateur de Laplace#
blobs_laplace = cle.laplace_box(blobs)
cle.imshow(blobs_laplace)
Laplacien de Gaussien#
Également connu sous le nom de filtre chapeau mexicain
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)
Filtre de variance locale#
blobs_edges = cle.variance_box(blobs, radius_x=5, radius_y=5)
cle.imshow(blobs_edges)
Écart-type local#
… n’est que la racine carrée de la variance locale
blobs_edges = cle.standard_deviation_box(blobs, radius_x=5, radius_y=5)
cle.imshow(blobs_edges)
La détection de contours n’est pas l’amélioration de contours#
Intuitivement, on pourrait appliquer un filtre de détection de contours pour améliorer les contours dans les images montrant des contours. Essayons avec une image montrant des membranes. C’est une image 3D, soit dit en passant.
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])
En regardant très attentivement, vous pourrez observer que les contours sont un peu plus épais dans la deuxième image. Le filtre de détection de contours détecte deux contours, le côté croissant du signal de la membrane et le côté décroissant du signal du côté opposé. Faisons un 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])
Amélioration des contours#
Ainsi, pour améliorer les contours dans une image de membrane, d’autres filtres sont plus utiles. L’amélioration peut par exemple signifier épaissir les membranes et potentiellement combler les lacunes.
Écart-type local#
image_std = cle.standard_deviation_box(image, radius_x=5, radius_y=5, radius_z=5)
cle.imshow(image_std[60])
Maximum local#
image_max = cle.maximum_box(image, radius_x=5, radius_y=5, radius_z=5)
cle.imshow(image_max[60])