OPENCV 傅里叶滤波
时间: 2025-06-04 10:06:54 浏览: 17
### OpenCV 債里叶变换与滤波实现
傅里叶变换是一种将空间域信号转换到频率域的技术,在图像处理领域具有广泛应用,比如去噪、边缘增强以及特征提取等。以下是基于 OpenCV 的傅里叶变换及其滤波应用的详细说明和代码示例。
#### 1. 傅里叶正变换与频谱中心化
通过 `cv.dft` 函数可以完成二维离散傅里叶变换 (DFT),并将结果从实部和虚部分开存储。为了便于观察频谱特性,通常会执行频谱中心化操作:
```python
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
# 读取灰度图像
img = cv.imread('cameraman.tif', 0)
# 执行傅里叶正变换
dft = cv.dft(np.float32(img), flags=cv.DFT_COMPLEX_OUTPUT)
dft_shift = np.fft.fftshift(dft) # 中心化频谱
```
此过程实现了原始图像的空间域数据向频率域的数据映射[^1]。
#### 2. 构建低通/高通滤波器并应用于频谱
构建一个简单的理想低通或高通滤波器来过滤特定频率成分。以下是一个理想的圆形低通滤波器的例子:
```python
rows, cols = img.shape
crow, ccol = rows//2 , cols//2 # 获取中心位置
mask = np.zeros((rows, cols, 2), np.uint8)
radius = 30 # 设置半径大小
mask[crow-radius:crow+radius, ccol-radius:ccol+radius] = 1 # 创建掩码区域
# 应用掩码至频移后的 DFT 结果
fshift = dft_shift*mask
```
这里创建了一个矩形窗口作为低通滤波器,并将其乘以频移后的傅里叶变换结果[^1]。
#### 3. 反傅里叶变换恢复图像
经过滤波之后,需反向计算得到最终的结果图。这一步骤涉及先取消频谱偏移再调用 `cv.idft()` 方法:
```python
f_ishift = np.fft.ifftshift(fshift) # 将零频率分量重新移到左上角
img_back = cv.idft(f_ishift) # 进行逆傅里叶变换
img_back = cv.magnitude(img_back[:,:,0],img_back[:,:,1]) # 转换回幅度形式
```
以上步骤完成了由修改过的频域信息重建原图像的过程。
#### 4. 显示对比效果
最后利用 Matplotlib 展示不同阶段的效果以便直观理解整个流程的影响:
```python
plt.figure(figsize=(10, 8))
plt.subplot(221), plt.imshow(img, cmap='gray')
plt.title('Original Image'), plt.axis('off')
plt.subplot(222), plt.imshow(magnitude_spectrum, cmap='gray')
plt.title('Magnitude Spectrum'), plt.axis('off')
plt.subplot(223), plt.imshow(mask[:,:,0], 'gray')
plt.title('Low Pass Filter Mask'), plt.axis('off')
plt.subplot(224), plt.imshow(img_back, cmap='gray')
plt.title('Filtered Result'), plt.axis('off')
plt.tight_layout()
plt.show()
```
这段脚本展示了如何使用 Python 和 OpenCV 来实施基本的傅里叶变换及简单滤波技术[^1]。
---
###
阅读全文
相关推荐


















