图片的傅里叶频谱滤波的实现
时间: 2023-09-12 16:02:37 浏览: 156
图片的傅里叶频谱滤波的实现主要包括以下步骤:
1. 将待处理的图片转换为灰度图像。
2. 对灰度图像进行傅里叶变换,得到频域图像。
3. 根据滤波器的类型,在频域图像上进行滤波操作,得到滤波后的频域图像。
4. 对滤波后的频域图像进行傅里叶反变换,得到空域图像。
5. 对反变换后的空域图像进行归一化处理,以保证像素值在0到255之间。
下面是一个Python实现的例子:
```python
import cv2
import numpy as np
# 读取图片并转换为灰度图像
img = cv2.imread("lena.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 对灰度图像进行傅里叶变换
f = np.fft.fft2(gray)
fshift = np.fft.fftshift(f)
magnitude_spectrum = 20 * np.log(np.abs(fshift))
# 设计高通滤波器
rows, cols = gray.shape
crow, ccol = rows//2, cols//2
mask = np.ones((rows, cols), np.uint8)
r = 50
mask[crow-r:crow+r, ccol-r:ccol+r] = 0
# 在频域图像上进行滤波操作
fshift = fshift * mask
# 对滤波后的频域图像进行傅里叶反变换
f_ishift = np.fft.ifftshift(fshift)
img_back = np.fft.ifft2(f_ishift)
img_back = np.abs(img_back)
# 归一化处理
img_back = cv2.normalize(img_back, None, 0, 255, cv2.NORM_MINMAX)
# 显示结果
cv2.imshow("Original Image", gray)
cv2.imshow("Magnitude Spectrum", magnitude_spectrum.astype(np.uint8))
cv2.imshow("Filtered Image", img_back.astype(np.uint8))
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的例子中,我们首先读取了一张图片并将其转换为灰度图像。然后对灰度图像进行了傅里叶变换,并计算了频域图像的幅度谱。接着,我们设计了一个高通滤波器,并在频域图像上进行了滤波操作。最后,对滤波后的频域图像进行了傅里叶反变换,并进行了归一化处理。最终,我们显示了原始图像、频域图像的幅度谱以及滤波后的图像。
阅读全文