图像干扰去除之巴特沃斯陷波器
项目简介
本项目是一个基于 MATLAB 开发的图像频域处理系统,核心功能是利用
巴特沃斯陷波滤波器 (Butterworth Notch Filter) 来消除图像中特定频率的周期性干扰噪声。
在数字图像处理中,周期性噪声(如莫尔条纹、正弦波干扰或扫描网纹)在频率域中通常表现为集中的高亮斑点。本项目演示了并将图像从空间域转换到频率域,设计特定的陷波器对噪音频点进行平滑衰减,最后还原为纯净图像的全过程。该方法相比理想陷波器,能有效避免滤波后的“振铃”效应。
功能特性
- 智能图像源处理:优先读取本地标准测试图像,若通过文件未找到,系统会自动生成一张带有高斯光斑的合成图像作为处理对象,确保程序始终可运行。
- 噪声模拟系统:内置周期性噪声生成算法,能够向原始图像中叠加特定频率的正弦波干扰,用于演示去噪效果。
- 频域转换与分析:利用二维快速傅里叶变换 (FFT2) 和频谱中心化技术,将图像特征转换为频谱图,直观展示噪声分量。
- 巴特沃斯陷波器设计:实现了阶数和带宽可调的巴特沃斯陷波滤波器,能够针对特定的噪声频率坐标构建平滑的阻带。
- 可视化数据分析:提供包含6个子图的综合面板,分别展示原图、噪声频谱、滤波器二维/三维形态、处理后频谱及最终复原图像。
系统逻辑与实现细节
本项目的主程序脚本严格按照以下流程执行图像修复任务:
1. 图像读取与预处理
程序首先尝试读取名为
cameraman.tif 的系统内置图像。为了增强代码的鲁棒性,使用
try-catch 结构,如果文件不存在,则基于网格数据生成一个灰度高斯光斑图像作为备选。随后图像被转换为灰度格式(如果是彩色的),并将数据类型转换为双精度浮点型
double,像素值归一化到 [0, 1] 区间。
2. 模拟周期性噪声干扰
为了验证滤波器效果,代码人为地向图像中添加了正弦波噪声。
- 噪声参数:设定水平和垂直方向的频率偏移量分别为 u=40, v=40。
- 生成公式:基于正弦函数生成网纹图案,并叠加到原图中。
- 截断处理:叠加噪声后,将像素值限制在 [0, 1] 范围内,防止数据溢出。
3. 频域变换 (FFT)
对含噪图像执行二维快速傅里叶变换 (
fft2),利用
fftshift 将其零频分量移至频谱中心。同时计算对数幅度谱,以便在可视化环节清晰地观察到除了中心直流分量外的对称噪声亮点。
4. 滤波器设计
这是本项目的核心环节。程序根据步骤2中设定的噪声频率,计算出噪声在中心化频谱中的具体坐标。
- 坐标计算:基于图像中心点,结合噪声频率 (40, 40) 计算出共轭对称的两个主要噪声区域中心。
- 参数设定:
*
D0 (截止频率/半径):设为 15,决定了陷波区域的大小。
*
n (阶数):设为 2,控制滤波器从通带到阻带的过渡陡峭程度。
- 构建函数:调用专门编写的子函数构建与图像尺寸一致的滤波器传递函数矩阵。
5. 频域滤波与图像复原
- 滤波操作:将中心化的图像频谱矩阵与设计好的滤波器矩阵进行点乘运算,衰减噪声频率处的能量。
- 逆变换:对滤波后的频谱执行反中心化 (
ifftshift) 和二维傅里叶逆变换 (ifft2)。 - 后处理:取逆变换结果的实部,并再次归一化到 [0, 1] 区间,得到最终的去噪图像。
关键算法解析
巴特沃斯陷波滤波器构造
代码中包含一个独立的子函数用于构造滤波器传递函数 H(u,v)。
初始化全1矩阵。遍历每一个指定的噪声中心点 $(u_0, v_0)$,计算频率平面上所有点到该中心的欧几里得距离 $D_k(u,v)$。
采用巴特沃斯高通滤波器的变体形式来实现陷波(阻带):
$H = 1 / [1 + (D_0 / D_k)^{2n}]$
在此公式下,当距离 $D_k$ 等于 $D0$ 时,幅值为 0.5;当 $D_k$ 趋近于 0(即噪声中心)时,幅值趋近于 0(完全抑制);当 $D_k$ 远大于 $D_0$ 时,幅值趋近于 1(保留信号)。
生成的多个陷波区域通过累乘的方式合并到同一个滤波器矩阵中,从而同时去除共轭对称的噪声分量。
使用方法
- 确保 MATLAB 环境已安装 Image Processing Toolbox。
- 直接运行主程序脚本。
- 控制台输出:程序运行结束后,控制台会打印图像尺寸、噪声频率偏移量、滤波器半径及阶数等信息。
- 图形窗口:系统会弹出一个包含六个子图的窗口,用户可以直观比对去噪前后的效果,并观察滤波器的三维形状。
系统要求
- MATLAB R2016a 或更高版本
- Image Processing Toolbox (图像处理工具箱)