FFT重构python
时间: 2023-11-08 11:05:29 浏览: 165
FFT是一种快速傅里叶变换算法,可以将时域信号转换为频域信号。在Python中,可以使用NumPy库中的fft函数进行FFT计算。下面是一个简单的FFT重构Python代码示例:
```python
import numpy as np
import matplotlib.pyplot as plt
# 采样时间和采样点数
L = 1.0
N = 128
# 采样频率和采样时间间隔
Fs = N / L
T = 1 / Fs
# 生成信号
t = np.linspace(0, L, N)
y = np.cos(np.pi * t)
# 进行FFT计算
Y = np.fft.fft(y)
# 计算频率轴
freqs = np.fft.fftfreq(N, T)
# 绘制频谱图
plt.plot(freqs, np.abs(Y))
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude')
plt.show()
```
该代码首先生成一个长度为128的余弦信号,然后使用NumPy库中的fft函数进行FFT计算,最后绘制出频谱图。需要注意的是,频率轴的单位是Hz,而不是弧度。
相关问题
FFT,FFT逆变换图像处理python代码
### Python FFT 和逆FFT用于图像处理的代码示例
对于图像处理中的快速傅里叶变换 (FFT) 及其逆变换,可以利用 `numpy` 库来实现。下面是一个完整的例子,展示了如何应用这些技术于二维数组表示的灰度图像上。
```python
import numpy as np
from scipy import fftpack
import matplotlib.pyplot as plt
from PIL import Image
# 加载并转换成灰度模式的图片
image = Image.open('path_to_image').convert('L')
np_gray_img = np.array(image)
def apply_fft_and_inverse(GrayImage):
# 执行离散傅立叶变换
freq_domain = fftpack.fftshift(fftpack.fft2(GrayImage))
# 显示频域图谱
magnitude_spectrum = 20 * np.log(np.abs(freq_domain))
fig, ax = plt.subplots(nrows=1, ncols=3, figsize=(15, 5))
ax[0].imshow(GrayImage, cmap='gray')
ax[0].set_title('Original Gray Scale Image')
ax[1].imshow(magnitude_spectrum, cmap='gray')
ax[1].set_title('Magnitude Spectrum after FFT')
# 对频率域数据执行反向操作得到空间域重建后的图像
reconstructed_spatial_data = fftpack.ifft2(fftpack.ifftshift(freq_domain)).real
ax[2].imshow(reconstructed_spatial_data, cmap='gray')
ax[2].set_title('Reconstructed Image via Inverse FFT')
plt.show()
apply_fft_and_inverse(np_gray_img)
```
这段代码首先加载一张图片,并将其转化为灰度形式以便简化处理过程[^1]。接着定义了一个函数 `apply_fft_and_inverse()` 来接收一个灰度图像作为输入参数,在该函数内部实现了从原始图像到频域再返回至重构图像的过程。通过调用此方法即可观察到原图与其对应的幅度谱以及最终恢复出来的图像之间的关系。
使用python代码对图像进行傅里叶变换,并重构
可以使用Python中的NumPy和OpenCV库来进行图像的傅里叶变换和逆变换。
示例代码如下:
```python
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 读入图像
img = cv2.imread('lena.jpg', 0)
# 进行傅里叶变换
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
magnitude_spectrum = 20 * np.log(np.abs(fshift))
# 显示原图和频谱图
plt.subplot(121), plt.imshow(img, cmap='gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(magnitude_spectrum, cmap='gray')
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
plt.show()
# 进行逆变换并重构图像
f_ishift = np.fft.ifftshift(fshift)
img_back = np.fft.ifft2(f_ishift)
img_back = np.abs(img_back)
# 显示重构图像
plt.imshow(img_back, cmap='gray')
plt.title('Image after Inverse Fourier Transform'), plt.xticks([]), plt.yticks([])
plt.show()
```
上述代码中,我们首先读入了一张灰度图像`lena.jpg`,然后对其进行傅里叶变换,并计算出频谱图。接着,我们对频谱图进行逆变换,得到重构的图像。最后,我们分别显示了原图、频谱图和重构图像。
运行上述代码,即可看到图像的傅里叶变换和重构的效果。
阅读全文