我正在寻找具有 3x3 窗口的 2D 均值滤波器。我尝试过 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 中有选项吗?
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'
为您提供一个 3x3 数组(与 3x3 数组进行卷积会丢失每个轴上的两个元素)。
mode='same'
为您提供一个 5x5 数组(第一/最后一列/行中的元素在平均值中包含一个或多个零)。
mode='full'
为您提供一个 7x7 数组(输出的左上元素将是 a
的左上元素与八个零等的平均值)。