python频率域滤波傅里叶变换滤波
时间: 2023-08-26 15:04:40 浏览: 116
在Python中进行频率域滤波,一般会涉及傅里叶变换和逆傅里叶变换。以下是一个基本的频率域滤波的步骤:
1. 导入所需的库:
```python
import numpy as np
import cv2
from matplotlib import pyplot as plt
```
2. 读取图像并进行灰度化处理:
```python
image = cv2.imread('image.jpg', 0)
```
3. 对图像进行二维傅里叶变换:
```python
f = np.fft.fft2(image)
```
4. 将零频率成分移到频谱中心:
```python
fshift = np.fft.fftshift(f)
```
5. 构建滤波器,例如一个理想高通滤波器:
```python
rows, cols = image.shape
crow, ccol = rows // 2, cols // 2
# 创建一个掩膜,中心为0,其他地方为1
mask = np.ones((rows, cols), np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 0
```
这里的示例是一个理想高通滤波器,即将中心一定范围内的频率成分置零,保留高频部分。
6. 将滤波器应用于频域图像:
```python
fshift_filtered = fshift * mask
```
7. 将滤波后的频域图像转回原始图像域:
```python
f_ishift = np.fft.ifftshift(fshift_filtered)
image_filtered = np.fft.ifft2(f_ishift)
image_filtered = np.abs(image_filtered)
```
8. 显示原始图像和滤波后的图像:
```python
plt.subplot(121), plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(image_filtered, cmap='gray')
plt.title('Filtered Image')
plt.xticks([]), plt.yticks([])
plt.show()
```
这样就完成了频率域滤波的过程。可以根据具体需求和滤波器设计来调整滤波器的形状和范围,以达到不同的滤波效果。
希望这个示例对你有帮助!如果还有其他问题,请随时提问。
阅读全文