介绍
BM3D 是 “Block-Matching and 3D Filtering” 的缩写,即三维块匹配滤波,它是一种用于图像去噪的算法。该算法来源于 一篇“Image and video denoising by sparse 3D transform-domain collaborative filtering”的高质量文章,文章的作者是 Kostadin Dabov、Alessandro Foi、Vladimir Katkovnik 和 Karen Egiazarian,发表在 IEEE Transactions on Image Processing 2007年9月刊上。
BM3D 算法基于两个主要步骤:块匹配(Block-Matching)和三维变换滤波(3D Filtering)。这种算法在图像处理领域非常著名,因为它能够有效地去除图像中的噪声,同时保留图像的细节。
BM3D 算法已经有很多的衍生版,比如CBM3D彩图、VBM3D时域、BM4D、CBM4D。
- 项目地址:https://webpages.tuni.fi/foi/GCF-BM3D/
- git 代码:https://github.com/gfacciol/bm3d
- 论文下载地址:https://download.csdn.net/download/yanceyxin/89273068
- 在线测试平台:https://www.ipol.im/pub/art/2012/l-bm3d/
- 相关软件如下图。
原理
该算法框图如下,中心思想充分利用自然图像中丰富的自相似结构来进行图像降噪;主要分为两步,第一部基础估计;第二步最终估计,使用基本估计,执行改进的分组和协作维纳过滤。
- 基础估计:
- 基于块的估计。对于噪声图像中的每个块,执行以下操作:
- i) 分组。找到与当前处理的块相似的块,然后将它们堆叠在一个3D数组(组)中。
- ii) 协同硬阈值化。对形成的组应用3D变换,通过对变换系数进行硬阈值化来衰减噪声,反转3D变换以产生所有分组块的估计,并将块的估计返回到其原始位置。
- 聚合。对所有重叠的分块估计值进行加权平均,计算真实图像的基本估计值。
- 最终维纳估计:
- 基于块的估计。对于噪声图像中的每个块,执行以下操作:
- 块匹配Grouping。在基本估计中使用BM找到与当前处理的块相似的块的位置。利用这些位置,形成两组(3D数组),一组来自噪声图像,一组来自基本估计。
- 3D协同维纳滤波 Collaborative Filtering。对两个组应用3D变换。使用基本估计的能量谱作为真实(导频)能量谱对有噪声的进行维纳滤波。通过对滤波后的变换系数应用3D逆变换产生所有分组块的估计,并将块的估计返回到其原始位置。
- 聚合加权滤波Aggregation。通过使用加权平均值聚合所有获得的局部估计,计算真实图像的最终估计。
- 基于块的估计。对于噪声图像中的每个块,执行以下操作:
结果展示
代码示例
git 上开源的 c++实现 BM3D 算法示例,作者gfacciol,可参考代码研究算法具体实现。