中值滤波的python代码实现
时间: 2023-10-21 12:05:00 浏览: 186
中值滤波是一种常用的图像处理方法,可以有效地去除图像噪声。以下是Python实现中值滤波的代码示例:
```python
import numpy as np
import cv2
# 定义中值滤波函数
def median_filter(img, kernel_size):
# 获取图像的行数和列数
rows, cols = img.shape
# 定义输出图像
output = np.zeros((rows, cols), dtype=np.uint8)
# 计算需要填充的边缘大小
pad_size = kernel_size // 2
# 填充边缘
img_pad = cv2.copyMakeBorder(img, pad_size, pad_size, pad_size, pad_size, cv2.BORDER_REPLICATE)
# 循环遍历图像
for i in range(pad_size, rows + pad_size):
for j in range(pad_size, cols + pad_size):
# 获取当前像素点的邻域
neighbors = img_pad[i - pad_size:i + pad_size + 1, j - pad_size:j + pad_size + 1]
# 计算邻域的中值
median_value = np.median(neighbors)
# 将中值赋值给输出图像对应位置
output[i - pad_size, j - pad_size] = median_value
# 返回输出图像
return output
# 读取图像
img = cv2.imread('test.jpg', 0)
# 中值滤波
result = median_filter(img, 3)
# 显示原图像和处理后的图像
cv2.imshow('Original Image', img)
cv2.imshow('Median Filtered Image', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的代码中,`median_filter`函数接收两个参数:需要进行中值滤波的图像和卷积核大小。函数首先计算需要填充的边缘大小,然后使用`cv2.copyMakeBorder`函数对图像进行边缘填充。接着,函数循环遍历图像的每一个像素点,获取当前像素点的邻域,计算邻域的中值,并将中值赋值给输出图像对应位置。最后,函数返回输出图像。
阅读全文