python - 傅立叶变换逆傅立叶变换python

标签 python opencv signal-processing fft

我已经将狗的图片解构成其大小和相位分量。但是,当我将它们放回一起并尝试进行傅立叶逆变换时,我没有得到原始图像吗?

img1 = img1[:,:,2] 

plt.imshow(img1, cmap='gray')

plt.show()

dft = cv2.dft(np.float32(img1), flags = cv2.DFT_COMPLEX_OUTPUT)

print(dft)

dft_shift = np.fft.fftshift(dft)

print(dft_shift)

mag, ang = cv2.cartToPolar(dft_shift[:,:,0],dft_shift[:,:,1])

plt.imshow(20*np.log(mag), cmap='gray')

plt.show()

plt.imshow(ang, cmap='gray')

plt.show()

combined = np.multiply(mag, np.exp(1j*ang))

imgCombined = np.real(np.fft.ifft2(np.fft.ifftshift(combined)))

plt.imshow(imgCombined, cmap='gray')

plt.show()

固定!
def compute_mag_phase(toBeTransfromed):
    dft = np.fft.fft2(toBeTransfromed)
    dft_shift = np.fft.fftshift(dft)
    mag = np.abs(dft_shift)
    ang = np.angle(dft_shift)
    return mag, ang

def reconstruct(mag,ang):
    combined = np.multiply(mag, np.exp(1j*ang))
    fftx = np.fft.ifftshift(combined)
    ffty = np.fft.ifft2(fftx)
    imgCombined = np.abs(ffty)
    return imgCombined

大小:

Angular :

重建:

最佳答案

fftshift反转了dft_shift的第三维。
以下似乎有效

dft_real = np.fft.fftshift(dft[:, :, 0])
dft_imag = np.fft.fftshift(dft[:, :, 1])
mag, ang = cv2.cartToPolar(dft_real, dft_imag)

关于python - 傅立叶变换逆傅立叶变换python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59812522/

相关文章:

python - 用python求解线性规划

javascript - 网络音频 : Normalization filter?

delphi - 用于音频数据采样率转换的库?

python - 如果信号值大于信号平均值则画一条线

python - 使用列表中的索引值从大型数据帧创建较小的数据帧

python - 如何将 Python 包标记为仅限 Python 2?

python - 从数据库读取数据时如何避免 pandas 数据框列值中的尾随零?

python - Dlib 裁剪后的图像是蓝色的

opencv - Emgu CV(或 OpenCV)中多边形集的 Voronoi 图

Python 在 sudo 下运行时无法识别 cv2