欢迎访问宙启技术站
智能推送

使用skimage.filters模块进行图像中值滤波处理

发布时间:2023-12-16 15:12:59

skimage.filters模块是scikit-image库中用于图像处理的一个子模块,它包含了一系列用于滤波和卷积的函数。其中之一是中值滤波函数。

中值滤波是一种常用的非线性滤波方法,它将图像中每个像素的灰度值替换为该像素邻域窗口中灰度值的中值。中值滤波主要用于去除图像中的椒盐噪声或其他类型的噪声。

下面是一个使用skimage.filters模块进行图像中值滤波处理的例子:

import numpy as np
import matplotlib.pyplot as plt
from skimage import data
from skimage.filters import median

# 读取示例图像
image = data.camera()

# 添加椒盐噪声
noisy_image = np.copy(image)
salt_pepper = np.random.rand(image.shape[0], image.shape[1])
noisy_image[salt_pepper < 0.02] = 0
noisy_image[salt_pepper > 0.98] = 255

# 进行中值滤波处理
filtered_image = median(noisy_image, selem=np.ones((5, 5)))

# 显示原始图像、带噪声图像和滤波后的图像
fig, axes = plt.subplots(1, 3, figsize=(12, 4))
ax0, ax1, ax2 = axes.ravel()

ax0.imshow(image, cmap=plt.cm.gray)
ax0.set_title('Original Image')

ax1.imshow(noisy_image, cmap=plt.cm.gray)
ax1.set_title('Image with Salt & Pepper Noise')

ax2.imshow(filtered_image, cmap=plt.cm.gray)
ax2.set_title('Filtered Image')

plt.tight_layout()
plt.show()

在上述代码中,首先我们从skimage库中导入必要的模块和函数。然后我们使用data.camera()函数读取了一个示例图像。接下来,我们通过将图像中的随机像素点的灰度值设置为0或255来添加椒盐噪声。然后,我们使用median()函数对带噪声的图像进行中值滤波处理,其中selem=np.ones((5, 5))表示采用一个大小为5x5的窗口进行滤波。最后,我们使用matplotlib.pyplot模块显示原始图像、带噪声图像和滤波后的图像。

运行上述代码,可以观察到原始图像、带噪声图像和滤波后的图像。中值滤波能够有效地去除图像中的椒盐噪声,保留了图像的细节和边缘信息。

除了中值滤波,skimage.filters模块还提供了其他一些滤波函数,例如高斯滤波、均值滤波、Sobel滤波等,可以根据具体的应用需求选择合适的滤波方法。通过对图像进行滤波处理,可以改善图像质量、去除噪声、增强边缘等,从而更好地进行后续图像处理或分析任务。