Here's my code:
from scipy.ndimage import filters
import numpy
a = numpy.array([[2,43,42,123,461],[453,12,111,123,55] ,[123,112,233,12,255]])
b = numpy.array([[0,2,2,3,0],[0,15,12,100,0],[0,45,32,22,0]])
ab = filters.convolve(a,b, mode='constant', cval=0)
af = numpy.fft.fftn(a)
bf = numpy.fft.fftn(b)
abf = af*bf
abif = numpy.fft.ifftn(abf)
print numpy.around(ab)
print numpy.around(abif)
The results are:
[[ 1599 2951 7153 13280 18311]
[ 8085 51478 13028 40239 30964]
[18192 32484 23527 36122 8726]]
[[ 37416.+0.j 32251.+0.j 46375.+0.j 32660.+0.j 23986.+0.j]
[ 30265.+0.j 33206.+0.j 62450.+0.j 19726.+0.j 17613.+0.j]
[ 40239.+0.j 38095.+0.j 24492.+0.j 51478.+0.j 13028.+0.j]]
How can I fix my way of doing convolution using FFT so to guarantee that it gives the same result as scipy.ndimage.filters.convolve
?
Thank you.
See Question&Answers more detail:os