我提前道歉,我可能只是不理解卷积。
我正在努力使scipy.ndimage.convolve的结果与我试图手工做的结果相一致。
以documentation为例:
import numpy as np
a = np.array([[1, 2, 0, 0],
[5, 3, 0, 4],
[0, 0, 0, 7],
[9, 3, 0, 0]])
k = np.array([[1,1,1],[1,1,0],[1,0,0]])
from scipy import ndimage
ndimage.convolve(a, k, mode='constant', cval=0.0)
array([[11, 10, 7, 4],
[10, 3, 11, 11],
[15, 12, 14, 7],
[12, 3, 7, 0]])
然而,我希望结果是:
([[1, 8, 5, 0],
[8, 11, 5, 4],
[8, 17, 10, 11],
[9, 12, 10, 7]])
例如,对于左上角的值:
1×0 (extended beyond the input)
1×0 (extended beyond the input)
1×0 (extended beyond the input)
1×0 (extended beyond the input)
1×1
0×2
1×0 (extended beyond the input)
0×5
0×3
___
=1
我看不出它怎么会是11
我对卷积,数组,或者scipy在这里做什么有什么误解?
1条答案
按热度按时间svujldwt1#
您手动执行的操作是互相关,而不是卷积。卷积的过程类似,但“翻转”了内核。你可以证明你的预期结果可以通过首先翻转你的内核来获得,然后在卷积过程中取消翻转:
这里有更多的信息:https://cs.stackexchange.com/questions/11591/2d-convolution-flipping-the-kernel