傅立叶变换低通滤波代码
时间: 2023-08-03 09:07:36 浏览: 97
OpenCV的傅里叶变换 低通滤波器.txt
以下是傅里叶变换低通滤波的 Python 代码示例:
```python
import numpy as np
import cv2
# 定义函数进行傅里叶变换
def fourier_transform(img):
# 将图像转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 进行傅里叶变换
f = np.fft.fft2(gray)
# 将零频率分量移到频谱图的中心
fshift = np.fft.fftshift(f)
# 返回频谱图
return fshift
# 定义函数进行傅里叶逆变换
def inv_fourier_transform(fshift):
# 将频谱图的中心移到左上角
f_ishift = np.fft.ifftshift(fshift)
# 进行傅里叶逆变换
img_back = np.fft.ifft2(f_ishift)
# 取实部得到灰度图像
img_back = np.real(img_back)
# 返回灰度图像
return img_back
# 定义函数进行低通滤波
def low_pass_filter(fshift, d):
# 获取频谱图的大小
rows, cols = fshift.shape
# 创建一个与频谱图大小相同的矩阵
mask = np.zeros((rows, cols), np.uint8)
# 计算中心点的坐标
center_row, center_col = int(rows/2), int(cols/2)
# 创建圆形掩模
for i in range(rows):
for j in range(cols):
if np.sqrt((i-center_row)**2 + (j-center_col)**2) < d:
mask[i, j] = 1
# 将掩模与频谱图相乘
fshift = fshift * mask
# 返回处理后的频谱图
return fshift
# 读取图像
img = cv2.imread("lena.jpg")
# 进行傅里叶变换
fshift = fourier_transform(img)
# 设置低通滤波的截止频率
d = 30
# 进行低通滤波
fshift = low_pass_filter(fshift, d)
# 进行傅里叶逆变换
img_back = inv_fourier_transform(fshift)
# 显示原图和处理后的图像
cv2.imshow("Original", img)
cv2.imshow("Low Pass Filtered", img_back)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个代码示例中,我们使用 OpenCV 库进行图像处理,并使用 NumPy 库进行矩阵计算。首先定义了一个 `fourier_transform` 函数,它可以将输入的图像进行傅里叶变换并返回频谱图。然后定义了一个 `inv_fourier_transform` 函数,它可以进行傅里叶逆变换并返回灰度图像。接下来定义了一个 `low_pass_filter` 函数,它可以对输入的频谱图进行低通滤波,并返回处理后的频谱图。最后,我们读取了一张名为 "lena.jpg" 的图像,并使用 `fourier_transform` 函数进行傅里叶变换。然后,我们设置了低通滤波的截止频率,并使用 `low_pass_filter` 函数进行低通滤波。最后,我们使用 `inv_fourier_transform` 函数进行傅里叶逆变换,并显示原图和处理后的图像。
阅读全文