python 能否帮我写一个中值滤波函数 核大小可以自己设定 该函数支持float64 类型
时间: 2024-02-09 13:12:51 浏览: 52
当然可以,以下是一个自定义中值滤波函数的示例代码,支持float64类型:
```python
import numpy as np
def median_filter(img, kernel_size):
"""
自定义中值滤波函数
:param img: 输入的图像
:param kernel_size: 滤波核大小,必须为奇数
:return: 中值滤波后的图像
"""
# 检查滤波核大小是否为奇数
if kernel_size % 2 == 0:
kernel_size += 1
# 获取图像的行数和列数
rows, cols = img.shape
# 初始化输出图像
result = np.zeros_like(img)
# 对每个像素进行中值滤波
for i in range(rows):
for j in range(cols):
# 获取滤波窗口
row_min = max(i - kernel_size // 2, 0)
row_max = min(i + kernel_size // 2 + 1, rows)
col_min = max(j - kernel_size // 2, 0)
col_max = min(j + kernel_size // 2 + 1, cols)
window = img[row_min:row_max, col_min:col_max]
# 计算中值并赋值给输出图像
result[i, j] = np.median(window)
return result
# example
img = np.random.rand(512, 512)
result = median_filter(img, 5)
```
该函数的实现过程是先检查滤波核大小是否为奇数,然后遍历输入图像的每个像素,对每个像素获取滤波窗口,计算中值并赋值给输出图像。需要注意的是,该函数只支持单通道的图像,如果输入图像是多通道的,需要对每个通道分别进行中值滤波。
阅读全文