Mahotas - 二维拉普拉斯滤波器



拉普拉斯滤波器用于检测图像中的边缘和强度变化。在数学上,拉普拉斯滤波器定义为图像在x和y方向上二阶导数的和。

二阶导数提供关于每个像素强度变化率的信息。

拉普拉斯滤波器强调图像中强度快速变化的区域,例如边缘和角点。它的工作原理是从中心像素中减去周围像素的平均值,这给出了强度二阶导数的度量。

在二维情况下,拉普拉斯滤波器通常由一个方形矩阵表示,通常为3×3或5×5。这是一个3×3拉普拉斯滤波器的示例:

0  1  0
1 -4  1
0  1  0

Mahotas中的二维拉普拉斯滤波器

为了在Mahotas中应用二维拉普拉斯滤波器,我们可以使用`mahotas.laplacian_2D()`函数。以下是Mahotas中二维拉普拉斯滤波器工作原理概述:

输入图像

  • 该滤波器采用灰度输入图像。

卷积

  • 拉普拉斯滤波器使用卷积核对输入图像进行卷积运算。卷积核决定了卷积过程中应用于相邻像素的权重。

  • 卷积运算包括在整个图像上滑动卷积核。在每个像素位置,拉普拉斯滤波器将对应的卷积核权重与邻域中的像素值相乘并计算总和。

拉普拉斯响应

  • 拉普拉斯响应是通过将拉普拉斯算子应用于图像获得的。

    它表示图像中的强度变化或不连续性,这些与边缘相关。

`mahotas.laplacian_2D()`函数

`mahotas.laplacian_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)
# Applying a laplacian filter
filtered_image = mh.laplacian_2D(image)
# Displaying the original image
fig, axes = mtplt.subplots(1, 2, figsize=(9, 4))
axes[0].imshow(image, cmap='gray')
axes[0].set_title('Original Image')
axes[0].axis('off')
# Displaying the laplacian filtered featured image
axes[1].imshow(filtered_image, cmap='gray')
axes[1].set_title('Laplacian Filtered')
axes[1].axis('off')
mtplt.show()
输出

执行上述代码后,我们将得到以下输出:

2D Laplacian Filter

缩放拉普拉斯响应

通过改变alpha参数,我们可以控制拉普拉斯响应的尺度。较小的alpha值,例如0.2,会产生相对细微的响应,突出显示更精细的细节和边缘。

另一方面,较大的alpha值,例如0.8,会放大响应,使其更加明显,并强调更突出的边缘和结构。

因此,我们可以在拉普拉斯滤波器中使用不同的alpha值来反映边缘检测的变化。

示例

在这里,我们使用拉普拉斯滤波器中的不同alpha值来反映边缘检测的变化:

import mahotas as mh
import matplotlib.pyplot as plt
# Load an example image
image = mh.imread('pic.jpg', as_grey=True)
# Apply the Laplacian filter with different alpha values
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)
# Display the original and filtered images with different scales
fig, axes = 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 Laplacian Filter1

使用随机生成的数组

我们也可以对随机生成的数组应用拉普拉斯滤波器。为此,我们首先需要创建一个随机的二维数组。我们可以使用NumPy库的`np.random.rand()`函数创建数组。

此函数生成0到1之间的值,表示数组的像素强度。

接下来,我们将随机生成的数组传递给`mahotas.laplacian_2D()`函数。此函数将拉普拉斯滤波器应用于输入数组并返回已滤波的数组。

示例

现在,我们尝试将拉普拉斯滤波器应用于随机生成的数组:

import mahotas as mh
import numpy as np
import matplotlib.pyplot as plt
# Generate a random 2D array
array = np.random.rand(100, 100)
# Apply the Laplacian filter
filtered_array = mh.laplacian_2D(array)
# Display the original and filtered arrays
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()

输出

上述代码的输出如下:

Randomly Generated Array
广告