python实现一个中值滤波器
时间: 2023-09-27 19:06:01 浏览: 106
中值滤波是一种常用的信号处理方法,可以去除图像中的噪声。下面是 Python 实现中值滤波器的示例代码:
```python
import numpy as np
import cv2
def median_filter(img, kernel_size):
"""中值滤波器"""
kernel_half = kernel_size // 2
img_median = np.zeros_like(img)
# 对每个像素进行中值滤波
for i in range(kernel_half, img.shape[0] - kernel_half):
for j in range(kernel_half, img.shape[1] - kernel_half):
# 获取当前像素周围的像素值
neighbors = img[
i - kernel_half : i + kernel_half + 1,
j - kernel_half : j + kernel_half + 1
]
# 对这些像素值进行排序
sorted_neighbors = np.sort(neighbors.flatten())
# 取中间的值作为当前像素的值
img_median[i, j] = sorted_neighbors[kernel_half]
return img_median
# 加载图像
img = cv2.imread('lena.png', cv2.IMREAD_GRAYSCALE)
# 进行中值滤波
img_median = median_filter(img, kernel_size=3)
# 显示原始图像和中值滤波之后的图像
cv2.imshow('Original Image', img)
cv2.imshow('Median Filtered Image', img_median)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
上面代码中,`median_filter` 函数接受两个参数:原始图像 `img` 和卷积核大小 `kernel_size`。函数首先创建一个和原始图像相同大小的数组 `img_median`,用于存储中值滤波之后的图像。然后对于原始图像中的每个像素,函数都获取其周围 `kernel_size x kernel_size` 个像素的值,并进行排序,最后取其中间的值作为当前像素的值。最后返回中值滤波之后的图像。
阅读全文