边缘检测#

在clesperanto中,实现了多种边缘检测滤波器。

另请参阅

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)
../_images/697332ed931701bd777704b279b47e121b548544b81f7a635c3783b21c04fb53.png

Sobel算子#

另请参阅

blobs_sobel = cle.sobel(blobs)
cle.imshow(blobs_sobel)
../_images/6f78a059d541f817ce00965d380f7561c27cd8d61a9c1d0cd261392d819f8164.png

拉普拉斯算子#

另请参阅

blobs_laplace = cle.laplace_box(blobs)
cle.imshow(blobs_laplace)
../_images/97b9899f717c757b0ddca2c1bad676aaf671f2fa3697d9eb8cebc46be9099e88.png

高斯拉普拉斯算子#

也被称为墨西哥帽滤波器

blobs_laplacian_of_gaussian = cle.laplace_box(cle.gaussian_blur(blobs, sigma_x=1, sigma_y=1))
cle.imshow(blobs_laplacian_of_gaussian)
../_images/4039d3563c2a36f9db4b9be7e26ded824be8eda4d4037357dfcb945cf44ecf2e.png
blobs_laplacian_of_gaussian = cle.laplace_box(cle.gaussian_blur(blobs, sigma_x=5, sigma_y=5))
cle.imshow(blobs_laplacian_of_gaussian)
../_images/9bd4cce450e487d9177d0a1ecf7113bf18e721495aeb5da88645442a0d7ee226.png

局部方差滤波器#

blobs_edges = cle.variance_box(blobs, radius_x=5, radius_y=5)
cle.imshow(blobs_edges)
../_images/3c75eedc70e388d2225c1cca24088c11ced4c7a4b45aee2b9c122af42578e3f4.png

局部标准差#

…只是局部方差的平方根

blobs_edges = cle.standard_deviation_box(blobs, radius_x=5, radius_y=5)
cle.imshow(blobs_edges)
../_images/39b5a73b96057262d6fab7a9d85d9f36478cb83ec7d58fdc22a773b40ac86f9e.png

边缘检测不等同于边缘增强#

直观上,人们可能会应用边缘检测滤波器来增强显示边缘的图像中的边缘。让我们尝试对一张显示膜的图像进行处理。顺便说一下,这是一张3D图像。

image = imread("../../data/EM_C_6_c0.tif")
image.shape
(256, 256, 256)
cle.imshow(image[60])
../_images/756fcdd11282e04ef342228a2a2fd94ed9875e723db8d3b7c1515358353a0ddc.png
image_sobel = cle.sobel(image)
cle.imshow(image_sobel[60])
../_images/105c5d8c02a5c62db015972a88654442b975ce4cfaeadb386cd35ccb857bf86b.png

仔细观察,你可能会发现第二张图像中的边缘稍微厚一些。边缘检测滤波器检测到两个边缘,即膜的信号增加侧和对侧信号减少侧。让我们放大看看:

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])
../_images/d3fed6be6e92aa6bfb9b673f0b6147e393226ec22a5e933e2fdb494cfdd4402c.png

增强边缘#

因此,要增强膜图像中的边缘,其他滤波器可能更有用。增强可能意味着使膜变厚并可能填补间隙。

局部标准差#

image_std = cle.standard_deviation_box(image, radius_x=5, radius_y=5, radius_z=5)
cle.imshow(image_std[60])
../_images/b6e7b76ab9326c710c8a16b5244ff6f9bb497bc3294d2f85f4f0d2b36dac296b.png

局部最大值#

image_max = cle.maximum_box(image, radius_x=5, radius_y=5, radius_z=5)
cle.imshow(image_max[60])
../_images/61ca117a376d1a7f27388d3ad6474e499ccbcb215e05b5c7a24922d4af457597.png