用python实现中值滤波算法
时间: 2023-10-12 21:11:37 浏览: 134
Python 实现中值滤波、均值滤波的方法
5星 · 资源好评率100%
中值滤波是一种非线性滤波算法,它的基本思想是用滑动窗口将图像中的每个像素点替换成该窗口内像素值的中值。以下是用Python实现中值滤波的代码:
``` python
import cv2
import numpy as np
def median_filter(img, size):
# 获取图像的行数和列数
row, col = img.shape
# 计算滑动窗口的边长
border = (size - 1) // 2
# 创建一个全零的数组,用于存储处理后的图像
out_img = np.zeros((row, col), np.uint8)
# 遍历每个像素点
for i in range(border, row-border):
for j in range(border, col-border):
# 获取滑动窗口中的像素值
window = img[i-border:i+border+1, j-border:j+border+1]
# 将滑动窗口中的像素值排序
sort_window = np.sort(window.flatten())
# 取中间值作为该像素点的值
out_img[i, j] = sort_window[(size*size)//2]
return out_img
# 读取图像
img = cv2.imread('test.jpg', cv2.IMREAD_GRAYSCALE)
# 调用中值滤波函数
out_img = median_filter(img, 3)
# 显示原图和处理后的图像
cv2.imshow('Original Image', img)
cv2.imshow('Median Filter Image', out_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的代码中,`median_filter`函数实现了中值滤波算法。它接受两个参数:原始图像和滑动窗口的大小。函数内部首先计算了滑动窗口的边长,然后遍历每个像素点,获取对应的滑动窗口,将窗口内的像素值排序并取中间值作为该像素点的值,最后将处理后的像素值存储在输出图像中。最后,我们读取一张灰度图像,调用`median_filter`函数对其进行中值滤波处理,并显示原图和处理后的图像。
阅读全文