傅里叶滤波去噪 - 频率域图像处理
傅里叶变换与图像的频率表示
傅里叶变换将图像从空间域转换到频率域,揭示图像中不同频率成分的分布。这为基于频率特性的图像处理提供了强大工具。
基本概念:
- 低频:图像中缓慢变化的区域(大面积均匀色块、渐变)。代表图像的整体结构和亮度分布
- 高频:图像中快速变化的区域(边缘、纹理、噪声)。代表细节和突变
- 频谱图:2D FFT 的幅度谱,中心为低频(DC 分量),向外频率递增
2D DFT(离散傅里叶变换):
- 将 MxN 的图像转换为 MxN 的复数矩阵
- 每个复数的幅度表示该频率的强度,相位表示位置信息
- 使用 FFT(快速傅里叶变换)算法高效计算,复杂度 O(N log N)
低通滤波器 - 去噪基础
低通滤波器保留低频成分(图像结构)、抑制高频成分(噪声和细节)。是最基本的频率域去噪方法。
常见低通滤波器:
- 理想低通:截止频率内完全通过,外部完全阻断。会产生振铃效应(Gibbs 现象)
- 巴特沃斯低通:平滑过渡,n 阶巴特沃斯在截止频率处衰减 3dB。阶数越高越接近理想滤波器
- 高斯低通:以高斯函数为传递函数,无振铃效应。等价于空间域的高斯模糊
频率域滤波流程:
- 对图像进行 FFT 得到频谱
- 将频谱与滤波器传递函数逐元素相乘
- 对结果进行逆 FFT 得到滤波后的图像
截止频率选择:太低会过度模糊(丢失细节),太高则去噪不充分。通常通过实验或基于噪声频率特性确定。
高通和带通滤波器
高通滤波器保留高频(边缘、细节)、抑制低频(背景)。带通滤波器保留特定频率范围。
高通滤波器:
- 传递函数 = 1 - 低通传递函数
- 效果:提取边缘和细节,去除均匀背景
- 应用:边缘增强、锐化(原图 + 高通结果 = 锐化图像)
带通滤波器:
- 仅保留特定频率范围内的成分
- 实现:高通(低截止)x 低通(高截止)
- 应用:提取特定尺度的纹理,分析周期性结构
带阻(陷波)滤波器:
- 抑制特定频率范围,保留其余
- 用于去除已知频率的周期性噪声(如扫描线、摩尔纹)
陷波滤波器 - 周期性噪声去除
陷波滤波器(Notch Filter)针对频谱中特定位置的噪声峰值进行抑制,是去除周期性噪声的最有效方法。
周期性噪声的来源:
- 电磁干扰(如 50/60Hz 电源干扰)
- 扫描设备的机械振动
- 摩尔纹(两个周期性图案的干涉)
- 传感器的固定模式噪声
陷波滤波流程:
- 对图像进行 FFT,观察频谱
- 识别噪声对应的频率峰值(通常表现为频谱中的亮点)
- 在这些位置放置陷波(将对应频率的幅度设为 0 或大幅衰减)
- 逆 FFT 恢复去噪图像
陷波形状:可以是圆形(抑制特定频率)、带状(抑制特定方向的频率)或自定义形状。使用高斯衰减而非硬截断可减少伪影。
维纳滤波与逆滤波
维纳滤波在频率域中同时处理去噪和去模糊,是最优线性滤波器(最小均方误差意义下)。
逆滤波:
- 直接除以退化函数(PSF 的傅里叶变换)恢复原图
- 问题:在 PSF 频谱接近零的频率处,噪声被极度放大
- 实际中几乎不可用,除非噪声极低
维纳滤波:
- 在逆滤波基础上加入噪声功率谱的正则化
- 在 PSF 频谱小的频率处自动降低恢复增益,避免噪声放大
- 需要估计信噪比(SNR)或噪声功率谱
- 是去模糊和去噪的最佳线性折中
参数估计:噪声功率谱可从图像的平坦区域估计。信号功率谱可用自然图像的统计模型(1/f 衰减)近似。实践中常用单一参数 K(噪声信号功率比)简化。
实现指南 - Python 中的傅里叶滤波
使用 NumPy 和 OpenCV 在 Python 中实现频率域图像滤波。
基本流程:
import numpy as np, cv2- FFT:
f = np.fft.fft2(img); fshift = np.fft.fftshift(f) - 创建滤波器(与图像同尺寸的掩码)
- 应用滤波:
filtered = fshift * mask - 逆 FFT:
result = np.abs(np.fft.ifft2(np.fft.ifftshift(filtered)))
高斯低通滤波器创建:
- 创建与图像同尺寸的网格坐标
- 计算每个点到中心的距离
- 应用高斯函数:
mask = np.exp(-(dist**2) / (2 * sigma**2))
注意事项:
- FFT 前对图像进行零填充(扩展到 2 的幂次)可加速计算并避免循环卷积
fftshift将零频移到中心,便于设计对称滤波器- 滤波后取实部或幅度,丢弃微小的虚部(数值误差)
- OpenCV 的
cv2.dft比 NumPy 的np.fft.fft2在大图像上更快