对于我的教育,我想知道一种转换方法,可以使转换从scipy.signal.fftconvolve(A, B)
到scipy.signal.fftconvolve(A, B, "same")
。
我试图解决的问题:
我对图像进行n维中央裁剪的解决方案如下:
def cropND(conv, orig_shape):
start = tuple(map(lambda a, da: (a//2-da//2), conv.shape, orig_shape))
end = tuple(map(operator.add, start, orig_shape))
slices = tuple(map(slice, start, end))
return conv[slices]
但是,当原始卷积具有奇数维时,这会引起问题。
例如,如果我执行卷积:
kernel=np.random.rand(4,4)
array=np.random.rand(6,6)
test1 = signal.fftconvolve(array, kernel, "same")
test2 = signal.fftconvolve(array, kernel)
test2=cropND(test2, array.shape)
FFT相同
FFT裁剪
但是,如果我进行卷积:
kernel=np.random.rand(4,4)
array=np.random.rand(6,5)
test1 = signal.fftconvolve(array, kernel, "same")
test2 = signal.fftconvolve(array, kernel)
test2=cropND(test2, array.shape)
FFT相同
FFT裁剪
我认为中心的这种位移与由于第二实例的奇数尺寸导致中心点的舍入无效有关。
有人可以建议解决此问题的方法吗?
最亲切的问候!