使用Numpy、SciPy或Scikit-image对2D阵列进行均值滤波

ekqde3dh  于 8个月前  发布在  其他
关注(0)|答案(1)|浏览(69)

我正在寻找一个2D均值滤波器与3x 3窗口。我试了一下NumPy:

a = np.arange(25).reshape(5, 5)
b = np.average(a, axis=(0, 1), weights=np.ones((3, 3)))

但它失败了:

TypeError: 1D weights expected when shapes of a and weights differ.

NumPy中是否支持2D均值过滤器?SciPy或Scikit-image中有选项吗?

nmpmafwu

nmpmafwu1#

np.average不是你想要的,但也许你正在寻找scipy.signal.convolve

a = np.arange(25).reshape(5, 5)
b = scipy.signal.convolve(a, np.ones((3,3))/9, mode='valid')

mode='valid'得到一个3x 3的数组(如果你希望所有的平均值都来自输入数组,那么你在每个轴上都会丢失两个元素)。
mode='same'得到一个5x 5数组(第一/最后一列/行中的元素在平均值中包含一个或多个零)。
mode='full'得到一个7 x7的数组(输出的左上角元素将是a左上角元素与8个零的平均值,等等)。
默认值是mode='full',大概是因为您可以通过修剪一些元素来获得其他值。

相关问题