BM3D:把相似块堆成3D组做协同滤波
一句话:图像去噪的”非局部”思路可以走多远
自然图像中大量小块(patch)彼此高度相似——均匀区域、重复纹理、平行边缘都会产生这种冗余。Dabov 等人在 2007 年发表的 BM3D(Block-Matching and 3-D Filtering)算法,把这个观察推到了一个极致:先用块匹配(block-matching)在图像中搜集相似的 2D 块,将它们堆叠成 3D 数组,再在 3D 变换域中做收缩滤波。由于相似块之间的冗余被 3D 变换充分压缩,噪声与信号的分离精度远超逐块独立处理。这篇论文在发表时刷新了灰度和彩色图像去噪的 PSNR 记录,并在此后近十年间一直是图像去噪领域��事实标准基线。
为什么逐块变换收缩不够用
变换域去噪的基本逻辑很简单:如果真实信号在某个变换下是稀疏的(只有少数系数显著),那么噪声主要分布在那些小系数上,硬阈值或软阈值就能有效分离信号与噪声。《用小波收缩适应未知光滑性》中讨论的 SureShrink 正是这条路线的经典代表——在小波域中对每个分辨率层级做数据驱动的阈值选择。
问题在于,没有哪个固定的 2D 变换能对所有图像内容都实现良好稀疏性。2D DCT 处理不好尖锐边缘,小波处理不好纹理和平滑渐变。自适应 PCA 或 K-SVD 学习字典可以改善稀疏性,但计算代价高昂。BM3D 的思路不同:与其在单个块上追求更好的变换基,不如利用块间相似性,在第三个维度上”免费”获得额外的稀疏增益。
直觉上可以这样理解:假设一个 group 里有 N 个相似块,每个块在 2D 变换下有 K 个显著系数。如果独立处理,整个 group 需要 N×K 个系数来表示。但如果在块间再做一次 1D 变换(等效于对整个 group 做可分离 3D 变换),由于块间高度相似,跨块方向上大部分能量集中在 DC 分量附近,显著系数总数从 N×K 骤降到接近 K。稀疏度的提升直接转化为更精准的阈值收缩。
两步流水线:硬阈值打底,Wiener 精修
BM3D 的算法结构分为两步,每一步都包含”分组→协同滤波→聚合”三个环节。
第一步(基础估计):对噪声图像中的每个参考块,在局部邻域内用 ℓ² 距离搜索相似块。为了降低噪声对距离度量的干扰,论文引入了一个预滤波策略——先对块做 2D 变换并硬阈值处理,再在收缩后的系数上计算距离。找到的相似块堆叠成 3D group,施加可分离 3D 变换(2D 变换 + 跨块 1D 变换),对 3D 系数做硬阈值收缩,逆变换后得到每个块的估计。由于参考块的滑动窗口会产生大量重叠的块估计,同一像素位置可能有多个估计值,最终通过加权平均(聚合)合成基础估计图像。权重与每个 group 中硬阈值后保留的非零系数数量成反比——保留系数越少,说明 group 越稀疏、估计越可靠,权重越大。
第二步(最终估计):利用第一步的基础估计做两件事。其一,在基础估计(噪声已大幅衰减)上重新做块匹配,分组精度显著提高。其二,用基础估计的 3D 变换功率谱作为 pilot,对噪声图像的 3D 变换系数做经验 Wiener 滤波,替代第一步中相对粗糙的硬阈值。Wiener 滤波的收缩系数定义为 |pilot 系数|²/(|pilot 系数|² + σ²),能更精细地在信号强的频率分量上保留能量、在信号弱的分量上压制噪声。
第二步带来的 PSNR 增益通常超过 0.5 dB,这不是微小的改善——在去噪领域,0.5 dB 的差距往往对应着可感知的视觉质量差异。
变换选择:DC 分量比你想象的更重要
论文中一组有趣的消融实验揭示了 3D 变换中各分量的角色。2D 变换(处理块内相关性)的选择对最终 PSNR 影响不大——DCT、小波、甚至”DC + 随机正交基”之间的差异仅 0.1–0.4 dB。真正关键的是跨块方向的 1D 变换 τ₁ᴰ。
DST(离散正弦变换)的表现明显逊于其他变换,原因在于它缺少 DC 基元素。DC 分量捕获的是相似块之间的共性——正是 grouping 所利用的核心冗余。而仅保留 DC、丢弃所有其他系数的”DC-only”策略在高噪声下表现很差,因为 group 内的块并非完全相同,需要额外基元素来表达块间差异。Haar 小波成为最终选择:它既有 DC 分量,又能高效实现(2-tap 滤波器组的迭代分解),且块的排列顺序对结果几乎没有影响。
这个发现与《非局部均值:用图像自身的冗余去噪》形成了有趣的对比。NL-means 本质上是零阶估计——对相似块做加权平均,等价于只利用 DC 分量。BM3D 的协同滤波则是高阶估计,在保留共性的同时允许每个块有自己的个性化细节。论文的实验直接证实了这一点:”DC-only”模式退化为类似 NL-means 的纯平均,PSNR 显著低于完整的 3D 变换收缩。
实验结果:全面领先的数字
在标准灰度测试图像上(σ=25 的加性高斯白噪声),BM3D 的 PSNR 表现如下:
- Lena:32.08 dB
- Barbara:30.73 dB(纹理丰富,grouping 优势显著)
- House:32.86 dB
- Cameraman:29.45 dB
与当时的 state-of-the-art 方法对比,BM3D 在所有测试图像和噪声水平上均取得最高 PSNR,且对 House 和 Barbara 这类包含规则结构和重复纹理的图像改进尤为明显。在主观质量评估中,35 位评估者在 8 种方法中将 BM3D 的前身版本评为最佳,而论文中的当前版本在细节保留和振铃伪影方面又有进一步改善。
计算效率方面,Normal Profile 处理 256×256 图像约需 4.1 秒(1.5 GHz Celeron M),Fast Profile 仅需 0.7 秒,PSNR 损失控制在 0.05–0.2 dB。作为参考,《从噪声图像自身学字典做去噪》中介绍的 K-SVD 方法仅字典训练就需要 9–30 分钟,滤波还需额外 25–120 秒。BM3D 在性能领先的同时,计算代价低了一到两个数量级。
彩色图像扩展(C-BM3D)同样值得关注。论文没有简单地对三个颜色通道独立去噪,而是在亮度-色度空间中仅对亮度通道做一次块匹配,色度通道复用相同的分组结构。这个”分组约束”基于一个合理假设:亮度相似的块,色度通常也相似。实验表明,C-BM3D 比独立处理 RGB 三通道高出 0.3–0.8 dB,同时节省约三分之一的计算时间。
局限性与后续影响
BM3D 并非没有弱点。高噪声条件下(σ > 40),块匹配的准确性急剧下降——论文中的 PSNR 曲线在 σ ≈ 40 附近出现明显拐点。虽然通过预滤波距离度量和增大块尺寸可以缓解,但这本质上是一个信噪比不足导致相似性度量失效的问题。此外,算法对每个参考块独立搜索相似块,没有全局一致的结构建模,在极端噪声下可能产生不自然的伪影。
论文自身也坦承,使用自适应 PCA 或学习字典替代标准变换可能进一步提升性能,但会大幅增加计算复杂度。这个方向后来确实被大量后续工作探索,包括将 BM3D 的分组策略与字典学习、低秩矩阵分解等技术结合。
从更长的时间尺度看,BM3D 的核心洞察——利用图像内部的非局部自相似性增强稀疏表示——深刻影响了后续十余年的图像恢复研究。即使在深度学习主导图像去噪的今天,BM3D 仍然是最常用的传统方法基线,其 PSNR 数字在许多场景下依然具有竞争力。更重要的是,它清晰地展示了一个原则:在信号处理中,善用数据自身的结构冗余,往往比追求更复杂的模型更有效。


