BM3D算法学习总结

最近看了一些关于图像去噪的论文,从传统的基于统计的方法,到现在很火的利用深度学习来进行去噪的方法。今天分享一篇在去噪领域算是标杆的算法,文章名称为 Image Denoising by Sparse 3-D Transform-Domain CollaborativeFiltering。简称为BM3D。

在这里插入图片描述该算法由两部分组成(step1和step2),每一步的处理有一些不同,但大体相同。
该算法基于这样一个假设,通过一组基础元素的线性组合,真实的信号能够被很好的近似的表示出来。
信号在转换域被稀疏的表示出来。通过保存信号在转换域内高幅度的转换系数(传递大部分真实信号的能量),将剩余的系数(主要包含噪声)舍弃,真实的信号就能被很好的估计

step1

grouping by block-matching

首先是对噪声图像进行操作。首先选定一个参考块 Z x R Z_{xR} ZxR,以其左上点的坐标值为中心,设置一个一定大小的窗口,利用以下公式计算出当前块与参考块的相似度
在这里插入图片描述
其中, τ 2 D h t \tau_{2D}^{ht} τ2Dht是二维线性转换,常用的有二维离散余弦变换, γ ′ \gamma^{'} γ为硬阈值函数,但是在代码中没有体现。 N 1 h t N^{ht}_1 N1ht为参考块的大小。
通过这个公式,计算出窗口内所有的图像块与参考块的 d d d,即相似性,将满足以下条件的图像块的坐标和图像块分别保存
在这里插入图片描述
τ m a t c h h t \tau_{match}^{ht} τmatchht是阈值,在编写代码时,将各个图像块的相似度计算出来,满足以上条件的将其保存(图像块和坐标),然后进行排序,如果满足条件的图像块的数目多于我们所设置的块数,选择前n(设置的最大的块数)个相似度最大的块。否则将全部的块保存。

通过上面的步骤,找到了以一个图像块为参考,与其相似度比较大的块的集合,为一个三维的数组,用 Z S x R h t \textbf{Z}_{S^{ht}_{x_R}} ZSxRht表示,接下俩对其进行collaborativ filtering(协同滤波)。

collaborative filtering(协同滤波)

在这里插入图片描述
在该步骤中,是按位置进行操作,每一次都取出同一组同一位置的像素,组成一个数组,对其进行操作。
首先,对 Z S x R h t \textbf{Z}_{S^{ht}_{x_R}} ZSxRht进行三维离散变换,之前在block-matching时,已经对图像块进行二维离散变换,我们将之前的计算结果保存,利用变换的可分性,取出group中相同位置、不同图像块中的像素,对其进行二维离散变换。通过以上操作,将三维离散变换 τ 3 D h t \tau_{3D}^{ht} τ3Dht转换为二维离散变换,提高计算效率。可参考二维离散变换的可分性 二维离散变换.,三维变换类似。

然后上面的结果进行硬阈值变换 γ ′ \gamma^{'} γ,去掉较小的频率部分,赋值为0。在这里要记录这一组中非零元素的个数 N h a r x R N^{x_{R}}_{har} NharxR

最后进行反变换 τ 3 D h t − 1 {\tau_{3D}^{ht}}^{-1} τ3Dht1,将最后的结果赋值给原来的位置。
到此,得到的结果在文中被命名为Block-wise estimates。

Aggregation 聚合

通过之前的滤波,图像中的大部分噪声被滤除,接下来打算将滤波后的图像块恢复到原来的位置。因为组之间的图像块之间存在重叠相交的情况,即过完备。如何复原对去噪的结果也有很大的影响。
在存在相交的位置,采用权值平均的方法来进行聚合复原,权值通过如下函数进行设置。
在这里插入图片描述简单分析一下权重这么设置的原因:其实我也不太清楚哈,不过这的确需要好好思考,先放在这吧

接下来,对图像进行初步去噪。
在这里插入图片描述
到此,step1完成

step2

step2 在block-matching 步骤与step1不同,是对第一步Basic estimates 和噪声图像都进行操作。
首先在Basic estimates中选择一个参考块,计算二维离散余弦变换,将噪声图中相对应位置的图像块也进行二维离散余弦变换,分别将其保存。

在Basic estimates 中,以参考块左上角坐标为中心,设置一个窗口,在这个窗口内按照下式找到与其相似的图像块,组成一个group。

在这里插入图片描述
S x R w i e S^{wie}_{x_R} SxRwie是符合条件的坐标组成的数组,目的是在Basic estimates和噪声图中找到相应的图像块,组成两个group,分别用 Y S x R w i e b a s i c \textbf{Y}^{basic}_{S^{wie}_{x_R}} YSxRwiebasic Z S x R w i e \textbf{Z}_{S^{wie}_{x_R}} ZSxRwie表示。

利用下式定义维纳收缩系数
在这里插入图片描述
τ 3 D w i e \tau_{3D}^{wie} τ3Dwie为三维离散变换, σ \sigma σ为噪声偏差。

再利用下式对 Z S x R w i e \textbf{Z}_{S^{wie}_{x_R}} ZSxRwie进行计算,得到每组的估计
在这里插入图片描述
同样,在该步骤中,是按位置进行操作,每一次都取出同一组同一位置的像素,组成一个数组,对其进行操作。

Aggregation 聚合

与step1同样的方式进行整合,得到最后的去噪图像

实验分析

我测试了一下这个算法的去噪效果。
在这里插入图片描述
从图中可以看出,这个方法的处理效果还是不错的,图像中物体细节的恢复很不错,但是一些细节被平滑掉。我之前用房屋的那个房子进行去噪,去噪后大部分细节全部丢失。

  • 2
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值