用$Fourier$变换算法,对图像作二维$Fourier$变换;
时间: 2023-12-31 19:04:13 浏览: 22
二维离散傅里叶变换(2D DFT)是将一个二维离散信号从时域(空域)转换到频域的过程。这个过程可以用快速傅里叶变换(FFT)算法来实现。下面是用Python实现二维FFT的代码:
```python
import numpy as np
def fft2d(img):
# 获取输入图像的行和列数
M, N = img.shape
# 构造二维FFT核
n = np.arange(N)
m = np.arange(M)
k = np.arange(N)
l = np.arange(M)
kn = np.exp(-2j * np.pi * k[:, None] * n / N)
lm = np.exp(-2j * np.pi * l[:, None] * m / M)
kernel = np.dot(lm, kn) / np.sqrt(M * N)
# 对输入图像进行二维FFT变换
img_fft = np.dot(kernel, img)
return img_fft
```
上述代码中,我们首先获取输入图像的行数和列数,并根据这些信息构造二维FFT核(即频率域上的滤波器)。然后,我们将这个滤波器应用到输入图像上,得到其在频域上的表示。最后,我们返回频域上的图像表示。
使用上述代码,可以对二维图像进行FFT变换,并得到其在频域上的表示。例如,我们可以读取一张图像,并对其进行FFT变换,如下所示:
```python
import cv2
# 读取图像
img = cv2.imread('lena.jpg', cv2.IMREAD_GRAYSCALE)
# 对图像进行FFT变换
img_fft = fft2d(img)
# 显示图像
cv2.imshow('Input Image', img)
cv2.imshow('FFT Image', np.abs(img_fft))
# 等待按键
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上述代码中,我们读取了一张名为“lena.jpg”的灰度图像,并调用上述的fft2d函数对其进行FFT变换。然后,我们使用cv2.imshow函数显示输入图像和频域上的FFT图像。最后,我们使用cv2.waitKey函数等待按键,然后调用cv2.destroyAllWindows函数关闭所有窗口。