FFT卷积为相同尺寸

时间:2019-12-24 12:04:32

标签: scipy fft crop convolution

对于我的教育,我想知道一种转换方法,可以使转换从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相同

Test

FFT裁剪

Test_crop

但是,如果我进行卷积:

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相同

Test_2

FFT裁剪

Test_2_crop

我认为中心的这种位移与由于第二实例的奇数尺寸导致中心点的舍入无效有关。

有人可以建议解决此问题的方法吗?

最亲切的问候!

0 个答案:

没有答案