题目
- (3 分)另一种中值滤波的做法是:首先按行对图像做一维中值滤波(1 × 3),然后对结果再按列做一维中值滤波(3 × 1)。这种做法与直接做3 × 3中值滤波的结果是一样的吗?请解释,并举例说明。
代码
import random
import numpy as np
import scipy.signal as signal
x = np.array([[46, 31, 78, 53],
[67, 14, 56, 23],
[65, 44, 3, 29],
[60, 49, 36, 12]])
x1 = []
for i in range(4):
a = signal.medfilt(x[i], 3)
x1.append(a)
x1 = np.array(x1)
x2 = []
for i in range(4):
a = signal.medfilt(x1[:, i], 3)
x2.append(a)
x2 = np.array(x2).T
x3 = signal.medfilt(x,(3,3))
随机生成的矩阵如下:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/db8d026a7e3655386c1122f56b4c5034.png)
首先按行对图像做一维中值滤波(1 × 3),然后对结果再按列做一维中值滤波(3 × 1)。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7c6262706f0013540192fca93a1b0b82.png)
直接做3 × 3中值滤波的结果
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e5346a3e77ab2f8a2835b87f3b1d359b.png)
其中,边界滤波时默认补0
可见结果是不一样的