This question already has answers here:
scipy convolve2d outputs wrong values
(2个答案)
4年前关闭。
我目前对输出结果有些困惑
它是
我期望左上角的元素是
我以为这会将R ^ {7x7}中的矩阵图像\R ^ {9x9}扩展为R ^ {9x9},方法是在左侧/右侧和顶部/底部添加一个0。然后我认为
但是,它是
(2个答案)
4年前关闭。
我目前对输出结果有些困惑
#!/usr/bin/env python
import scipy.signal
image = [[1, 2, 3, 4, 5, 6, 7],
[8, 9, 10, 11, 12, 13, 14],
[15, 16, 17, 18, 19, 20, 21],
[22, 23, 24, 25, 26, 27, 28],
[29, 30, 31, 32, 33, 34, 35],
[36, 37, 38, 39, 40, 41, 42],
[43, 44, 45, 46, 47, 48, 49]]
filter_kernel = [[-1, 1, -1],
[-2, 3, 1],
[2, -6, 0]]
res = scipy.signal.convolve2d(image, filter_kernel,
mode='same', boundary='fill', fillvalue=0)
print(res)
它是
[[ -2 -8 -7 -6 -5 -4 28]
[ 3 -7 -10 -13 -16 -19 14]
[ -18 -28 -31 -34 -37 -40 0]
[ -39 -49 -52 -55 -58 -61 -14]
[ -60 -70 -73 -76 -79 -82 -28]
[ -81 -91 -94 -97 -100 -103 -42]
[-101 -61 -63 -65 -67 -69 -57]]
我期望左上角的元素是
3*1 + 1*2 + (-6) *8 + 0*9 = -43
(省略填充的零)。我以为这会将R ^ {7x7}中的矩阵图像\R ^ {9x9}扩展为R ^ {9x9},方法是在左侧/右侧和顶部/底部添加一个0。然后我认为
filter_kernel
将通过在image
上“滑动”来计算。在每个位置,将图像中的数字与内核中的数字逐点相乘。将这九种产品相加并写入res
。但是,它是
-2
。显然,情况有所不同。 最佳答案
卷积反转了它所作用的功能之一的方向。检查definition on Wikipedia:一个函数用τ设置参数,另一个函数用-τ设置参数。 2D卷积也是如此。
您需要镜像内核以获取预期的结果:
filter_kernel = [[0, -6, 2],
[1, 3, -2],
[-1, 1, -1]]
res = scipy.signal.convolve2d(image, filter_kernel,
mode='same', boundary='fill', fillvalue=0)
print(res[0, 0])
# -43
10-07 13:02