python完成图像的傅里叶变换并显示图像傅里叶变换谱。1、快速图像傅里叶变换函数2、图像频谱中心化处理3、显示频谱图像4、对图像频谱做傅里叶反变换,并显示反变换后的图像具体代码
时间: 2024-10-14 09:10:38 浏览: 65
在Python中,我们可以使用`numpy`库来进行图像的傅里叶变换,以及`matplotlib`库来展示结果。这里是一个简单的例子:
1. 快速图像傅里叶变换(FFT)函数:
```python
import numpy as np
from scipy import ndimage
def apply_fft(image):
# 对图像进行二维离散傅立叶变换(DFT)
fourier_transform = np.fft.fft2(image)
return fourier_transform
```
2. 图像频谱中心化处理(通常为了更好地观察高频成分):
```python
def center_freq(fourier_transform):
# 计算频域的尺寸
height, width = fourier_transform.shape
# 获取频率轴
freq_y, freq_x = np.mgrid[:height//2, :width//2] + 0.5
# 中心化处理
centered_fft = np.fft.fftshift(fourier_transform)
return centered_fft, freq_y, freq_x
```
3. 显示频谱图像:
```python
import matplotlib.pyplot as plt
def plot_spectrum(centered_fft, freq_y, freq_x):
plt.imshow(np.abs(centered_fft), cmap='gray', extent=[freq_x.min(), freq_x.max(), freq_y.min(), freq_y.max()])
plt.title('Image Fourier Spectrum')
plt.xlabel('Frequency (x)')
plt.ylabel('Frequency (y)')
plt.colorbar()
plt.show()
```
4. 傅里叶逆变换和显示反变换后的图像:
```python
def ifft_and_reconstruct(image, centered_fft):
# 反向四次傅立叶变换(IFFT),注意需要实部加虚部
inverse_fft = np.fft.ifftshift(centered_fft).real
# 将大小调整回原图
inverse_fft = np.fft.ifft2(inverse_fft)
reconstructed_image = np.abs(inverse_fft)
return reconstructed_image
# 使用这些函数
image = ... # 加载或生成你的图像
fft_img = apply_fft(image)
centered_fft, _, _ = center_freq(fft_img)
plot_spectrum(centered_fft)
reconstructed_image = ifft_and_reconstruct(image, centered_fft)
plt.figure()
plt.imshow(reconstructed_image, cmap='gray')
plt.title('Reconstructed Image after IFFT')
plt.show()
```
阅读全文