用Python实现中点滤波器
时间: 2024-03-28 22:11:33 浏览: 76
利用matlab编写的中值滤波程序
5星 · 资源好评率100%
中点滤波器是一种非线性滤波器,可以用于图像降噪。它的原理是在滤波窗口内取中间值作为输出值,因此可以有效地消除椒盐噪声。下面是用Python实现中点滤波器的示例代码:
```python
import cv2
import numpy as np
def median_filter(img, kernel_size):
# 获取图像的行数和列数
rows, cols = img.shape[:2]
# 定义输出图像
output = np.zeros_like(img)
# 计算滤波窗口的半径
r = kernel_size // 2
# 对每个像素进行中点滤波
for i in range(rows):
for j in range(cols):
# 计算滤波窗口的左上角和右下角坐标
x1 = max(0, i-r)
y1 = max(0, j-r)
x2 = min(rows-1, i+r)
y2 = min(cols-1, j+r)
# 取出滤波窗口内的像素值
window = img[x1:x2+1, y1:y2+1]
# 计算中间值
median = np.median(window)
# 将中间值赋给输出图像的当前像素
output[i, j] = median
return output
# 读取图像
img = cv2.imread('lena.png', cv2.IMREAD_GRAYSCALE)
# 应用中点滤波
filtered_img = median_filter(img, 3)
# 显示原图和中点滤波后的图像
cv2.imshow('Original', img)
cv2.imshow('Median Filtered', filtered_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个例子中,我们使用了OpenCV库读取和显示图像。可以通过修改`kernel_size`参数调整滤波窗口的大小。注意,滤波窗口的大小应该为奇数,这样才能确保滤波窗口的中心是一个像素。
阅读全文