机器视觉图像的傅立叶变换代码
时间: 2024-05-09 09:15:11 浏览: 8
以下是Python代码,使用OpenCV库实现图像的傅立叶变换:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.jpg', 0)
# 进行傅立叶变换
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
magnitude_spectrum = 20 * np.log(np.abs(fshift))
# 显示原图和变换后的图像
cv2.imshow('Input Image', img)
cv2.imshow('Magnitude Spectrum', magnitude_spectrum.astype(np.uint8))
cv2.waitKey(0)
cv2.destroyAllWindows()
```
解释一下代码:
1. 通过OpenCV库中的`cv2.imread()`函数读取一张灰度图像,将其保存在`img`变量中。
2. 使用NumPy库中的`np.fft.fft2()`函数对图像进行二维傅立叶变换,将其保存在`f`变量中。
3. 使用NumPy库中的`np.fft.fftshift()`函数将结果进行移位,将低频信号移动到图像中心,将其保存在`fshift`变量中。
4. 计算傅立叶变换的幅度谱,使用NumPy库中的`np.abs()`函数计算复数的模值,使用`20 * np.log()`函数将其转换为对数形式,将结果保存在`magnitude_spectrum`变量中。
5. 使用OpenCV库中的`cv2.imshow()`函数显示原图和变换后的图像,使用`cv2.waitKey()`函数等待键盘输入,使用`cv2.destroyAllWindows()`函数关闭所有窗口。
注意,这里的傅立叶变换结果是一个复数数组,其中实部表示图像的水平方向频率,虚部表示图像的垂直方向频率。如果需要将其转换为幅度谱或相位谱,可以使用NumPy库中的`np.abs()`函数或`np.angle()`函数。