均值滤波是一种常用的图像处理方法,可以用来平滑图像、去除噪声。在Python中,我们可以使用PIL库来实现对图片的均值滤波。
一、加载和显示图片
首先,我们需要加载一张图片,然后显示出来。在Python中,可以使用PIL库的Image类来进行图片的加载和显示。
from PIL import Image # 加载图片 image = Image.open('image.jpg') # 显示图片 image.show()
二、实现均值滤波
接下来,我们将使用一个双重循环来实现均值滤波。具体步骤如下:
- 获取图片的像素矩阵。
- 对每个像素点的周围领域进行计算均值,并更新像素点的值。
- 将更新后的像素矩阵保存为一张新的图片。
import numpy as np # 获取图片的像素矩阵 pixels = np.array(image) # 获取图片的宽和高 width, height = image.size # 定义滤波器的大小 filter_size = 3 # 定义滤波器 filter = np.ones((filter_size, filter_size)) / (filter_size * filter_size) # 对每个像素点进行均值滤波 for i in range(filter_size//2, width-filter_size//2): for j in range(filter_size//2, height-filter_size//2): # 获取当前像素点的领域 neighborhood = pixels[i-filter_size//2:i+filter_size//2+1, j-filter_size//2:j+filter_size//2+1] # 计算均值 average_value = np.sum(neighborhood * filter) # 更新像素值 pixels[i][j] = average_value # 创建新的图片对象 new_image = Image.fromarray(pixels) # 显示新的图片 new_image.show() # 保存新的图片 new_image.save('filtered_image.jpg')
三、效果展示
下面是应用均值滤波后的图片效果对比:
通过对比可以看出,经过均值滤波后的图片更加平滑,噪声明显减少。