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

问题描述 投票:-1回答:1

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

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

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

math image-processing fft convolution derivative
1个回答
0
投票

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

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

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

例如,在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));
© www.soinside.com 2019 - 2024. All rights reserved.