我需要使用我构建的 DFT 函数(有效)计算灰度图像(二维数组)的一阶导数。不幸的是,结果似乎并不正确。
在傅立叶域中,导数 d/dx 为 F(u,v)* 2*pi*i/N * u,其中 u 是 x 轴变换,N 是矩阵维度之一的大小, v 是另一个。
附上代码。困扰我的是,我得到的结果与通过将 (1,-1) 或 (1,-1) 作为列向量的卷积进行微分不同。
def derivative(fourier_signal):
"""
Derivative in fourier domain is multiplying by u or v, and 2pi*i/N
:param fourier_signal:
:return:
"""
N = np.shape(fourier_signal)[ZERO]
M = np.shape(fourier_signal)[ONE]
u = np.arange(N)
v = np.arange(M)
du = fourier_signal * (u*TWO_PI*1j)/N
dv = fourier_signal * (v*TWO_PI*1j)/M
return du, dv
def fourier_der(im):
# Calculate DFT2
dft_image = DFT2(im)
# Function that Multiply by rows by u, columns by y
du, dv = derivative(dft_image)
shifted_du, shifted_dv = np.fft.fftshift(du), np.fft.fftshift(dv)
dx, dy = IDFT2(shifted_du), IDFT2(shifted_dv)
我不是在寻找关于如何做到这一点的简单答案,而是寻找关于为什么我的输出不正确的方向。