如何不调用函数,用python较为底层地写均值滤波器和中值滤波器
时间: 2024-03-07 21:49:11 浏览: 51
对于均值滤波器,可以通过使用嵌套的循环和列表切片来实现。假设输入的图像为一个二维列表,滤波器大小为3x3,代码如下:
```python
def mean_filter(img):
m, n = len(img), len(img[0])
filtered_img = [[0] * n for i in range(m)]
for i in range(1, m-1):
for j in range(1, n-1):
avg = sum(sum(img[i-1:i+2], [])) / 9
filtered_img[i][j] = int(avg)
return filtered_img
```
对于中值滤波器,可以使用类似的嵌套循环和列表切片方法,但是需要用到排序和取中位数的操作。同样假设输入的图像为一个二维列表,滤波器大小为3x3,代码如下:
```python
def median_filter(img):
m, n = len(img), len(img[0])
filtered_img = [[0] * n for i in range(m)]
for i in range(1, m-1):
for j in range(1, n-1):
neighbors = sorted([img[x][y] for x in range(i-1, i+2) for y in range(j-1, j+2)])
median = neighbors[4]
filtered_img[i][j] = median
return filtered_img
```
需要注意的是,在边界处,由于没有足够的像素点,无法进行滤波操作,因此需要在代码中进行特判。
阅读全文