gpt4 book ai didi

python - 撤销np.fft.fft2得到原始图像

转载 作者:行者123 更新时间:2023-12-02 23:08:09 29 4
gpt4 key购买 nike

我刚刚开始了解图像频域。

我有这个功能:

def fourier_transform(img):
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
magnitude_spectrum = 20*np.log(np.abs(fshift))

return magnitude_spectrum

我想实现这个功能:

def inverse_fourier_transform(magnitude_spectrum):

return img

但我不知道如何。

我的想法是使用magnitude_spectrum来获取原始img

我该怎么做?

最佳答案

您在这里失去了阶段:np.abs(fshift)

np.abs 仅采用数据的真实部分。您可以通过以下方式分离幅度和相位:

abs = fshift.real
ph = fshift.imag

理论上,您可以处理abs,然后将它们与相位结合在一起,并通过np.fft.ifft2进行反向FFT。

编辑:您可以尝试这种方法:

import numpy as np
import matplotlib.pyplot as plt

# single chanel image
img = np.random.random((100, 100))
img = plt.imread(r'path/to/color/img.jpg')[:,:,0]

# should be only width and height
print(img.shape)

# do the 2D fourier transform
fft_img = np.fft.fft2(img)

# shift FFT to the center
fft_img_shift = np.fft.fftshift(fft_img)

# extract real and phases
real = fft_img_shift.real
phases = fft_img_shift.imag

# modify real part, put your modification here
real_mod = real/3

# create an empty complex array with the shape of the input image
fft_img_shift_mod = np.empty(real.shape, dtype=complex)

# insert real and phases to the new file
fft_img_shift_mod.real = real_mod
fft_img_shift_mod.imag = phases

# reverse shift
fft_img_mod = np.fft.ifftshift(fft_img_shift_mod)

# reverse the 2D fourier transform
img_mod = np.fft.ifft2(fft_img_mod)

# using np.abs gives the scalar value of the complex number
# with img_mod.real gives only real part. Not sure which is proper
img_mod = np.abs(img_mod)

# show differences
plt.subplot(121)
plt.imshow(img, cmap='gray')
plt.subplot(122)
plt.imshow(img_mod, cmap='gray')
plt.show()

关于python - 撤销np.fft.fft2得到原始图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59179262/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com