高斯滤波与中值滤波python代码,不用opencv
时间: 2023-09-21 21:10:34 浏览: 247
高斯滤波(Gaussian Filter)和中值滤波(Median Filter)是两种常用的图像滤波方法,可以用于去除图像中的噪声。以下是Python实现的示例代码:
1. 高斯滤波
```python
import numpy as np
from scipy import signal
def gaussian_filter(image, sigma=1):
"""
高斯滤波函数
:param image: 待滤波的图像,要求为二维数组
:param sigma: 高斯核函数的标准差
:return: 滤波后的图像,类型与输入图像相同
"""
# 构造高斯核函数
size = int(np.ceil(3 * sigma)) * 2 + 1 # 核的大小
x, y = np.meshgrid(np.arange(-size // 2 + 1, size // 2 + 1),
np.arange(-size // 2 + 1, size // 2 + 1))
kernel = np.exp(-(x ** 2 + y ** 2) / (2 * sigma ** 2)) / (2 * np.pi * sigma ** 2)
kernel = kernel / np.sum(kernel) # 归一化核函数
# 对图像进行卷积操作
filtered_image = signal.convolve2d(image, kernel, mode='same', boundary='symm')
return filtered_image.astype(image.dtype)
```
2. 中值滤波
```python
def median_filter(image, size=3):
"""
中值滤波函数
:param image: 待滤波的图像,要求为二维数组
:param size: 滤波窗口的大小,要求为奇数
:return: 滤波后的图像,类型与输入图像相同
"""
# 对图像进行补边操作,以便于处理边界情况
pad_width = size // 2
padded_image = np.pad(image, pad_width, mode='edge')
# 对图像进行滤波操作
filtered_image = np.zeros_like(image)
for i in range(image.shape[0]):
for j in range(image.shape[1]):
filtered_image[i, j] = np.median(padded_image[i:i + size, j:j + size])
return filtered_image
```
以上代码使用了NumPy和SciPy库中的函数,可以直接在Python环境中运行。
阅读全文