我正在寻找一个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中有选项吗?
nmpmafwu1#
np.average不是你想要的,但也许你正在寻找scipy.signal.convolve?
np.average
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',大概是因为您可以通过修剪一些元素来获得其他值。
mode='valid'
mode='same'
mode='full'
a
1条答案
按热度按时间nmpmafwu1#
np.average
不是你想要的,但也许你正在寻找scipy.signal.convolve?mode='valid'
得到一个3x 3的数组(如果你希望所有的平均值都来自输入数组,那么你在每个轴上都会丢失两个元素)。mode='same'
得到一个5x 5数组(第一/最后一列/行中的元素在平均值中包含一个或多个零)。mode='full'
得到一个7 x7的数组(输出的左上角元素将是a
左上角元素与8个零的平均值,等等)。默认值是
mode='full'
,大概是因为您可以通过修剪一些元素来获得其他值。