Mahotas - 2D 拉普拉斯滤波器
拉普拉斯滤波器用于检测图像中的边缘和强度变化。从数学上讲,拉普拉斯滤波器定义为图像在 x 和 y 方向上的二阶导数之和。
二阶导数提供有关每个像素强度变化率的信息。
拉普拉斯滤波器强调图像中强度变化迅速的区域,例如边缘和角落。它的工作原理是从中心像素中减去周围像素的平均值,从而得出强度的二阶导数的度量。
在 2D 中,拉普拉斯滤波器通常由方阵表示,通常为 3×3 或 5×5。以下是 3×3 拉普拉斯滤波器的示例−
0 1 0 1 -4 1 0 1 0
Mahotas 中的 2D 拉普拉斯滤波器
要在 mahotas 中应用 2D 拉普拉斯滤波器,我们可以使用 mahotas.laplacian_2D() 函数。以下是 Mahotas 中 2D 拉普拉斯滤波器的工作原理概述 −
输入图像
滤波器采用灰度输入图像。
卷积
拉普拉斯滤波器使用内核对输入图像应用卷积运算。内核确定卷积期间应用于相邻像素的权重。
卷积运算涉及将内核滑动到整个图像上。在每个像素位置,拉普拉斯滤波器将相应的核权重与邻域中的像素值相乘并计算总和。
拉普拉斯响应
通过将拉普拉斯算子应用于图像可获得拉普拉斯响应。
它表示与边缘相关的图像中的强度变化或不连续性。
mahotas.laplacian_2D() 函数
mahotas.laplacian_2D() 函数以灰度图像作为输入并对其执行 2D 拉普拉斯运算。生成的图像突出显示强度变化迅速的区域,例如边缘。
语法
以下是 mahotas 中 laplacian_2D() 函数的基本语法 −
mahotas.laplacian_2D(array, alpha=0.2)
其中,
array − 是输入图像。
alpha(可选) − 是 0 到 1 之间的标量值,用于控制拉普拉斯滤波器的形状。alpha 值越大,拉普拉斯滤波器对边缘的敏感度就越高。默认值为 0.2。
示例
以下是使用 laplacian_2D() 函数检测图像中的边缘的基本示例 −
import mahotas as mh import numpy as np import matplotlib.pyplot as mtplt image = mh.imread('picture.jpg', as_grey = True) # 应用拉普拉斯滤波器 filtered_image = mh.laplacian_2D(image) # 显示原始图像 fig, axis = mtplt.subplots(1, 2, figsize=(9, 4)) axes[0].imshow(image, cmap='gray') axes[0].set_title('Original Image') axes[0].axis('off') # 显示拉普拉斯滤波后的特色图像 axes[1].imshow(filtered_image, cmap='gray') axes[1].set_title('Laplacian Filtered') axes[1].axis('off') mtplt.show()
输出
执行上述代码后,我们得到以下输出 −

缩放拉普拉斯响应
通过改变 alpha 参数,我们可以控制拉普拉斯响应的尺度。较小的 alpha 值(例如 0.2)会产生相对微妙的响应,突出显示更精细的细节和边缘。
另一方面,较大的 alpha 值(例如 0.8)会放大响应,使其更加明显并强调更突出的边缘和结构。
因此,我们可以在拉普拉斯滤波器中使用不同的 alpha 值来反映边缘检测的变化。
示例
在这里,我们在拉普拉斯滤波器中使用不同的 alpha 值来反映边缘检测的变化 −
import mahotas as mh import matplotlib.pyplot as plt # 加载示例图像 image = mh.imread('pic.jpg', as_grey=True) # 应用具有不同 alpha 值的拉普拉斯滤波器 filtered_image_1 = mh.laplacian_2D(image, alpha=0) filtered_image_2 = mh.laplacian_2D(image, alpha=0.5) filtered_image_3 = mh.laplacian_2D(image, alpha=1) # 以不同的比例显示原始图像和滤波后的图像 fig, axis = plt.subplots(1, 4, figsize=(12, 3)) axes[0].imshow(image, cmap='gray') axes[0].set_title('Original Image') axes[0].axis('off') axes[1].imshow(filtered_image_1, cmap='gray') axes[1].set_title('Filtered Image (alpha=0)') axes[1].axis('off') axes[2].imshow(filtered_image_2, cmap='gray') axes[2].set_title('Filtered Image (alpha=0.5)') axes[2].axis('off') axes[3].imshow(filtered_image_3, cmap='gray') axes[3].set_title('Filtered Image (alpha=1)') axes[3].axis('off') plt.show()
输出
以下是上述代码的输出 −

使用随机生成的数组
我们也可以在随机生成的数组上应用拉普拉斯滤波器。为此,首先我们需要创建一个随机的 2D 数组。我们可以使用 NumPy 库的 np.random.rand() 函数创建该数组。
此函数生成 0 到 1 之间的值,表示数组的像素强度。
接下来,我们将随机生成的数组传递给 mahotas.laplacian_2D() 函数。此函数将拉普拉斯滤波器应用于输入数组并返回过滤后的数组。
示例
现在,我们尝试将拉普拉斯滤波器应用于随机生成的数组 −
import mahotas as mh import numpy as np import matplotlib.pyplot as plt # 生成一个随机二维数组 array = np.random.rand(100, 100) # 应用拉普拉斯滤波器 filtered_array = mh.laplacian_2D(array) # 显示原始数组和滤波后的数组 plt.figure(figsize=(10, 5)) plt.subplot(1, 2, 1) plt.imshow(array, cmap='gray') plt.title('Original Array') plt.axis('off') plt.subplot(1, 2, 2) plt.imshow(filtered_array, cmap='gray') plt.title('Filtered Array') plt.axis('off') plt.show()
输出
上述代码的输出如下 −
