如何通过傅立叶域计算函数的导数?

How to compute the derivative of a function through the Fourier domain?

我目前正在开展一个项目,我必须通过求解泊松方程从其梯度重建图像,我们在傅立叶域中求解该方程。

解决方案涉及图像的FT与离散推导滤波器的乘积。在傅立叶域中,这被定义为两者的坐标乘积。

我了解图像的 FT 是如何计算的,但是我很难理解我应该如何计算过滤器的 FT,因为 [0 -1 1] 用于水平差异。我应该使用与图像相同的公式吗?这对我来说似乎很奇怪,因为在将它与图像的 FT 相乘后,我只会保留 FT 的 2 个分量。

要计算通过傅里叶域的卷积,首先用零填充内核以使其具有与图像相同的大小,然后计算图像和填充后的内核的 FFT,然后将这两个频谱相乘.填充时将内核的原点放在正确的位置很重要。有关如何正确填充的详细信息,请参阅

但是,要计算导数,您不想这样做。相反,使用 Fourier property 空间域中的导数是与 .

的乘积

[1,0,-1] 过滤器(或 [0,1,-1] 或您要使用的任何一个)是导数的离散 近似值 。如果你通过傅立叶域,你还不如计算 exact 导数。

例如,在 MATLAB 中你会这样做:

a = imread('cameraman.tif');
A = fft2(a);
N = size(A,2); % we're computing the x-derivative here, that is dimension 2 in MATLAB
w = ifftshift((0:N-1)-floor(N/2)) * (pi / N);
B = A .* (1i * w); % for MATLAB R2016a and older, use bsxfun here
b = real(ifft2(B));