i wrote a function which performs 2d-convolution in the fourier domain. However, when i compare the output of my function to the output of the scipy.ndimage.convolve function without transfering the image and the kernel into the fourier domain the result is completely different. For a test convolution i chose a kernel which i expected would blur my test image, instead my test image just got significantly darker and the edges are highlighted. Using the scipy.ndimage.convolve function, yields the exected result. Does someone know what i do wrong in my function?
def fourier_conv(img:np.ndarray, kernel:np.ndarray) -> np.ndarray:
#perform 2d discrete fourier transform on image and kernel
#convolute image and kernel (maybe kernel padding necessary so image and kernel have same size)
#perform inverse DTF to bring image back to spatial domain
img_2ddft = np.fft.fft2(img)
kernel_2ddft = np.fft.fft2(kernel)
conv_img_fd = ndimage.convolve(img_2ddft, kernel_2ddft, mode='constant', cval=0, origin=0)
conv_img = abs(np.fft.ifft2(conv_img_fd))
return conv_img
Thanks for your help!