基于MATLAB的图像加权中值滤波处理系统
项目简介
本项目是一个基于MATLAB开发的图像处理系统,专注于实现和演示
加权中值滤波(Weighted Median Filter)算法。该系统旨在解决传统中值滤波在去除脉冲噪声(如椒盐噪声)时容易导致图像细节模糊的问题。通过引入加权机制,给予中心像素及其邻域像素不同的权重,该算法能够在有效平滑噪声的同时,更好地保留图像的边缘和纹理细节。系统包含完整的图像加载、噪声模拟、滤波处理、性能对比及可视化评估流程。
主要功能特性
- 智能图像源处理:自动尝试加载系统内置的经典测试图像(peppers.png),如果未找到,能够自动生成基于正弦/余弦函数的RGB合成图像作为备用,可以确保代码能够直接运行。
- 噪声模拟环境:内置噪声生成模块,向图像添加密度为0.05(5%)的椒盐噪声,模拟真实的图像传输干扰或传感器缺陷。
- 高级加权滤波算法:实现核心的3x3加权中值滤波逻辑,通过特定的权重矩阵强化中心像素的影响力。
- 对比评估机制:同时集成标准中值滤波器,用于与加权算法进行实时性能(耗时)和效果对比。
- 量化指标支持:内置峰值信噪比(PSNR)计算模块,客观评估去噪前后的图像质量差异。
- 多维度可视化:提供双视图展示,包括整体效果对比图(原图、噪声图、两种滤波结果)以及局部细节放大对比图,便于观察纹理保留情况。
系统要求
- MATLAB R2016a 及以上版本
- Image Processing Toolbox(用于图像读取、噪声生成及基础矩阵操作)
使用方法
- 确保MATLAB环境已准备就绪。
- 直接运行主脚本(main)。
- 系统将自动执行以下流程:
* 加载并预处理图像(统一尺寸为256x256)。
* 添加噪声。
* 分别应用加权中值滤波和标准中值滤波。
* 在命令行窗口输出权重矩阵、处理耗时及PSNR数值。
* 弹出两个窗口:一个是整体对比图,一个是细节纹理放大图。
详细功能设计与核心算法分析
该系统的核心逻辑完全包含在入口脚本中,主要实现了以下具体环节:
1. 图像预处理与噪声注入
系统首先进行环境初始化,清理工作区。在加载图像环节,采用容错设计:优先寻找
peppers.png,若失败则利用
meshgrid和三角函数生成一幅自带梯度的合成图像,并将其转换为RGB三通道格式。为了保证演示的高效性,系统统一将图像尺寸缩放至
256x256像素。随后,调用
imnoise函数向图像注入密度为
0.05的椒盐噪声,为后续滤波提供实验对象。
2. 加权中值滤波器设计(核心算法)
这是本项目的核心功能模块。
- 权重掩模定义:系统定义了一个固定的3x3权重矩阵,具体数值分布为:
* 第一行:1, 2, 1
* 第二行:2, 5, 2 (中心权重最大,强调保留原始细节)
* 第三行:1, 2, 1
*
对称填充:为了处理图像边界,算法首先对图像的R、G、B三个通道分别进行对称填充(Symmetric Padding),填充大小由掩模尺寸决定,有效减少了边界伪影。
*
权重扩展映射:为了提高计算效率,算法没有在循环中进行复杂的加权计算,而是预先计算了“扩展索引”。例如,如果掩模中某位置权重为2,则在排序计算中,该位置的像素值会被重复2次。系统将二维权重矩阵转换为一维向量,并生成对应的像素重复索引列表。
*
滑动窗口与数值排序:通过双层循环遍历图像的每一个像素。对于每个3x3的局部窗口,根据预先计算的索引列表提取并扩展像素值序列。例如,原窗口有9个数值,经过权重扩展后会变成更多数值(本例中总权重和为17,即序列长度为17)。
*
中值选取:对扩展后的数值序列进行排序,并直接选取中间位置的数值作为该窗口中心像素的新值。
3. 对照组:标准中值滤波器
为了验证加权算法的有效性,系统手动实现了一个标准的3x3中值滤波器。该函数同样采用对称填充策略,对每个3x3窗口内的9个像素值进行排序,并固定选取第5个数值(中值)作为输出。此部分不使用MATLAB工具箱自带的
medfilt2,而是手动编写循环逻辑,以保证与加权算法在实现层面上具有可比性。
4. 性能评估与可视化
- 耗时统计:利用
tic和toc命令,分别精确统计加权滤波和标准滤波的计算耗时。 - PSNR计算:通过自定义函数计算图像的峰值信噪比。该函数计算原始无噪图像与处理后图像之间的均方误差(MSE),进而转换为分贝(dB)单位。PSNR值越高,代表去噪效果越好且失真越小。
- 结果展示:
*
主窗口:分为2x2个子图,分别显示“原始图像”、“含噪声图像(标注噪声密度及初始PSNR)”、“标准中值滤波结果(标注PSNR)”和“加权中值滤波结果(标注PSNR)”。
*
细节窗口:通过
show_detail_zoom函数,截取图像中心区域(+/- 20像素范围)进行放大展示,直观对比不同算法在处理边缘和纹理时的差异。