BM3D 图像去噪增强算法项目
项目介绍
本项目实现了经典的 Block-Matching and 3D Filtering (BM3D) 图像去噪算法。该算法是图像处理领域的标杆性算法之一,主要利用图像内部的高度自相似性,通过非局部均值思想的演进,在变换域内进行协同降噪。本项目通过 MATLAB 语言精确复现了 BM3D 的核心算子,包括块匹配、3D 变换、协同过滤以及双阶段处理机制,旨在为需要高精度画质修复的场景提供可靠的算法支撑。
功能特性
- 双阶段去噪流程:完整实现了硬阈值基本估计(Stage 1)和协作维纳滤波最终估计(Stage 2)两个关键环节。
- 非局部块匹配:通过在搜索窗口内寻找相似图像块,打破了局部去噪的局限性,有效利用全局纹理信息。
- 3D 变换域协同过滤:结合 2D 离散余弦变换 (DCT) 与第三维的一维变换,实现在 3D 空间内对信号与噪声的高效分离。
- 细节与边缘保持:在大幅消除加性高斯白噪声的同时,能够精准保留图像的边缘锐度和细微纹理。
- 综合评估体系:内置 PSNR(峰值信噪比)与 SSIM(结构相似性)评估模块,并可视化噪声残差图以直观展现去噪效果。
实现逻辑说明
项目代码严格按照 BM3D 算法的标准逻辑构建,具体流程如下:
- 预处理与环境设置:程序首先进行环境清理,读取输入图像。支持对 RGB 图像进行灰度化处理,并将数据归一化至 double 类型。
- 基础参数定义:设置噪声标准差 sigma(默认为 25)、块大小(8x8)、搜索窗口半径、滑动步长以及 3D 组的最大块数等核心超参数。
- 第一阶段:基本估计:
- 滑动窗口遍历:以设定的步长在图像上滑动,提取参考块。
- 块匹配:在搜索区域内通过计算 L2 范数(欧式距离)寻找最相似的 N 个块。
- 3D 组建与变换:将相似块堆叠成 3D 阵列,依次进行空间域的 2D DCT 变换和组维度的 1D DCT 变换。
- 硬阈值收缩:应用与 sigma 相关的阈值(2.7倍)对变换系数进行截断,去除微小噪声波动。
- 逆变换与聚合:执行 3D 逆变换并根据块的稀疏性(非零系数数量)计算权重,通过加权平均重建整幅图像的基本估计结果。
- 第二阶段:最终估计:
- 位置引导:利用第一阶段得到的清晰图像作为引导,重新进行块匹配以获取更准确的相似块位置。
- 经验维纳滤波:同时对含噪图和基本估计图进行 3D 变换。利用基本估计图的能量分布计算维纳滤波系数,并作用于含噪图的 3D 频谱。
- 最终聚合:根据维纳系数的能量计算权重,进行加权汇总,得到纹理更为细腻、伪影更少的最终去噪图像。
- 结果可视化:输出原始图、含噪图、基本估计图、最终增强图及残差分析对比。
关键函数与实现细节分析
- 块匹配机制:在寻找相似块时,为了平衡计算性能,通过设置搜索步长和距离阈值进行过滤,并对匹配出的块进行排序,仅保留最相似的有限个块构建 3D 组。
- 协同滤波变换:代码中使用了预计算的 DCT 矩阵加速 2D 变换,并针对第三维采用了 1D DCT。这种处理方式能够将相似块的共性结构集中在低频系数中,而噪声则分布于高频,便于精确过滤。
- 权重计算策略:第一阶段根据硬阈值处理后的非零系数个数倒数作为权重;第二阶段则根据维纳系数的平方和能量作为权重。这种权重分配确保了在信号能量强的区域赋予更高的可信度。
- 性能评估函数:实现了标准的 PSNR 算法以及简化版的 SSIM 算法。SSIM 考虑了均值、方差及结构相关性,能更好地反映人眼视觉的主观感受。
- 鲁棒性设计:包含一个测试图案生成器,在缺少外部图像文件时,可自动生成带有几何纹理和灰度梯度的测试图进行算法演示。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 硬件要求:由于 BM3D 涉及大量的块匹配和 3D 变换计算,建议内存不低于 8GB 以保证处理高清图像时的流畅度。
- 工具箱需求:基础脚本主要依赖 MATLAB 核心数学函数库,无需额外的复杂工具箱。