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

Math 如何通过傅里叶域计算函数的导数?,math,image-processing,fft,convolution,derivative,Math,Image Processing,Fft,Convolution,Derivative,我目前正在做一个项目,我必须通过求解泊松方程,从梯度重建图像,我们在傅里叶域中求解 该解决方案涉及图像的傅立叶变换和离散导数滤波器的乘积。在傅里叶域中,这被定义为两者的坐标乘积 我了解如何计算图像的傅立叶变换,但是我很难理解应该如何计算滤波器的傅立叶变换,因为水平差是[0-1 1]。我应该使用与图像相同的公式吗?这对我来说似乎很奇怪,因为在与图像的FT相乘后,我只保留FT的两个分量。为了计算通过傅里叶域的卷积,首先用零填充核,使其与图像大小相同,然后计算图像和填充核的FFT,然后将这两个频谱相乘

我目前正在做一个项目,我必须通过求解泊松方程,从梯度重建图像,我们在傅里叶域中求解

该解决方案涉及图像的傅立叶变换和离散导数滤波器的乘积。在傅里叶域中,这被定义为两者的坐标乘积


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

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

但是,要计算导数,您不希望这样做。相反,使用空间域中的导数与jω相乘的方法

[1,0,-1]
过滤器(或
[0,1,-1]
或您想要使用的任何过滤器)是导数的离散近似值。如果你通过傅里叶域,你也可以计算出精确的导数

例如,在MATLAB中,您可以执行以下操作:

a=imread('cameran.tif');
A=fft2(A);
N=尺寸(A,2);%我们在这里计算x-导数,即MATLAB中的维数2
w=ifftshift((0:N-1)-楼层(N/2))*(pi/N);
B=A.*(1i*w);%对于MATLAB R2016a及更早版本,请在此处使用bsxfun
b=实际值(ifft2(b));

我对您的问题进行了一些编辑,如果我误解了您的问题,请回复我的更改或进一步。谢谢!我理解填充,但我不确定如何在我的情况下使用精确的导数。我使用的是本文(等式29)中解释的解决方案,其中它们除以运算符的FT@bathal:在第4节中,它已经在使用我在此建议的解决方案。i2πs与jω相同(s从-0.5到0.5,ω从-π到π)*s*x是x坐标频率,*s*y是y坐标频率。