图像的快速傅里叶变换的python
时间: 2024-05-19 14:16:19 浏览: 93
实现
快速傅里叶变换(FFT)是一种用于将信号从时域转换为频域的算法。在图像处理中,FFT经常用于图像降噪、滤波、增强等方面。
Python中的numpy库提供了FFT的实现。下面是图像的快速傅里叶变换的Python实现:
```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()
```
代码解释
首先,通过cv2.imread()函数读取图像。这里使用了一个灰度图像“lena.jpg”。
然后,通过np.fft.fft2()函数对图像进行了快速傅里叶变换。这个函数返回的是一个复数数组,其中包含了频域信息。
接下来,将低频信号移到图像中心,以方便可视化。
然后,通过np.abs()函数取复数数组的绝对值,转换成可视化的形式。
最后,使用matplotlib库中的pyplot子库,将原始图像和频谱图显示出来。注意,频谱图使用的是20 * np.log()函数,以提高图像的对比度。
运行结果
运行上述代码,可以得到如下图像:
![image-20211205154041306](https://gitee.com/istarwyh/images/raw/master/image-20211205154041306.png)
左侧是原始图像,右侧是频谱图。在频谱图中,低频信号被移到了图像中心,而高频信号则被移到了图像四周。可以看到,频谱图的中心区域比较亮,这是因为图像中的低频信号较多。
阅读全文