基于三维块匹配滤波的传统图像去噪中非局部自相似去噪算法—BM3D原理总结

传统图像降噪算法之BM3D原理详解_峡谷相对论的博客-CSDN博客_bm3d

BM3D算法「建议收藏」 - 腾讯云开发者社区-腾讯云

ISP模块之RAW DATA去噪(二)--BM3D算法 - 走看看

[1] Dabov K, Egiazarian K. Image Denoising by Sparse 3-D Transform-Domain Collaborative Filtering[J]. IEEE TRANSACTIONS ON IMAGE PROCESSING, 2007, 16(8).

[2]Danielyan A, Vehvilainen M, Foi A, et al. Cross-color BM3D filtering of noisy raw data[C]//2009 international workshop on local and non-local approximation in image processing. IEEE, 2009: 125-129.

相关阅读:VBM3D 与 VBM4D

[3]Ehret T, Arias P. Implementation of the vbm3d video denoising method and some variants[J]. arXiv preprint arXiv:2001.01802, 2020.

[4]Maggioni M, Boracchi G, Foi A, et al. Video denoising, deblocking, and enhancement through separable 4-D nonlocal spatiotemporal transforms[J]. IEEE Transactions on image processing, 2012, 21(9): 3952-3966.

一、BM3D简介

        由Image Denoising by Sparse 3-D Transform-Domain Collaborative Filtering论文提出BM3D(Block-matching and 3D filtering,3维块匹配滤波)、项目网址为:http://www.cs.tut.fi/~foi/GCF-BM3D/

        BM3D算法把空间域和变换域的降噪方法结合起来,通过相似判定找到与参考块相近的二维图像块,并将相似块按照组合成三维群组,对三维群组进行协同滤波处理,再将处理结果聚合到原图像块的位置。对于指定的图像块,在图像中往往存在许多离得较远的图像块与其相似。相比于非局部均值算法,非局部自相似将图像的相似性从一个邻域内像素点之间扩展到不同的图像块上,因为图像块所包含的信息比单独一个像素点更多,所以利用块与块之间的相似性作为图像去噪先验更稳定,得到的去噪效果也更好。

        CBM3D(彩色图)处理灰度图的BM3D以及它的变体

        VBM3D(时域)是图像去噪领域公认的去噪效果(PSNR)最好的

        四维块匹配滤波(Block-Matching 4D filtering,BM4D)算法是目前最新的三维图像去噪算法。由于高光谱图像是由二维空间信息和一维光谱信息组成的三维图像,因此BM4D算法适用于高光谱图像去噪处理。

        BM4D、VBM4D等也都是沿袭BM3D的基于块处理(block-wise estimate)的思想,但其计算时间复杂度极大,或许只能用于离线处理(offline)。

本文主要介绍BM3D算法。

二、BM3D原理

  1. 去噪步骤

        该算法通过块匹配实现分组,通过三维变换域收缩实现协同滤波。所使用的图像片段是固定大小的方形块。其主要可分为三个步骤,即首先对每个参考块进行相似块匹配(Block-Matching)并分别得到一个三维的组合,然后对其进行协同变换和滤波(3D-Transform),最后对各个参考块对应组合的滤波结果进行整合(Aggregation),从而得到最终的降噪结果。在此之上,为了进一步改善图像的质量,BM3D 实际进行了两次降噪,即将以上三个步骤再重复了一遍,但是具体的块匹配标准、滤波方式以及整合权重等等会有一些区别。

图1:BM3D去噪算法流程图。

图2:其中每个参考块(粗边框)都存在完全相似的块

        BM3D算法总共有两大步骤,分为基础估计(Step1)和最终估计(Step2):

      在这两大步中,分别又有三小步:相似块分组(Grouping),协同滤波(Collaborative Filtering)和聚合(Aggregation)。

Step1:基本估计

 (1) 分组Grouping:寻找若干个差异度最小的块,并把这些块整合成一个3维的矩阵。

 (2) 协同滤波Collaborative Filtering:首先将每个三维矩阵中的二维的块(即噪声图中的某个块)进行二维变换,可采用小波变换或DCT变换等,通常采用小波BIOR1.5。 在矩阵的第三个维度进行一维变换,通常为哈达马变换(Hadamard Transform)。变换完成后对三维矩阵进行硬阈值处理,将小于阈值的系数置0,然后通过在第三维的一维反变换和二维反变换得到处理后的图像块。

 (3) 聚合Aggregation:分别将这些块融合到原来的位置,每个像素的灰度值通过每个对应位置的块的值加权平均,权重取决于置0的个数和噪声强度。

Step2:最终估计

 (1) 分组Grouping:使用图像块匹配的方法,找到原噪声图像以及基础估计图像里面与目前处理图像块相似的所有块,形成两个3维数组(分组)。

 (2) 协同维纳滤波Collaborative Filtering:对已经组织好的两个分组进行3D变换,将基础估计图像的能量频谱作为真实的能量频谱对噪声图像分组进行维纳滤波,然后通过3D反变换回去得到所有分组的图像块估计,并返回到它们之前所在的位置。

 (3) 聚合Aggregation:对所有得到的估计图像块重复遮盖的像素点进行加权平均,得到最终的像素值,也就是最后的最终估计结果。

2、去噪原理

        由于公式较多,下标容易混淆,此部分难理解,建议直接阅读原论文中公式部分。本文只记录针对个人学习的重点内容。论文:Image Denoising by Sparse 3-D Transform-Domain Collaborative Filtering

        为了方便展示,我们将含有噪声的图像记作Y是真实图像,η为噪声

(1)Step1

        我们会从图像的第一个块开始,滑动窗口的方式处理参考图像块。每次平移几列(行),一般为 3-6,直至铺满整幅图像。因为我们必须保证所有的像素都至少参与一次协同滤波,所以所有的块都会被选择一次作为参考块,而参考块的重叠也是过完备(Overcompleteness)的一种体现。匹配误差或者块距离为:

        如果这两个块是没有重叠的,也就是每个像素都是独立的,那么在有噪声图像z上对应位置的两个块的的匹配误差的数学期望以及方差分别为 

        所以,当噪声方差很大或者块比较小的时候,直接在有噪声图像z上寻找相似块是很不准确的,有可能无噪声图像y上两个差距很大的块在有噪声图像z上由于方差很大的原因差距显得比较小,从而被判定为相似,造成错误的匹配。

       为了解决这个问题,论文提出先对有噪声图像z上的两个块进行可分离的二维正交变换,然后将那些幅度小于一定阈值的系数置零,这样两个块的匹配误差就可表示为这些系数的均方误差,即

        实际上,并不是所有的情况都需要先对变换系数进行硬阈值操作再计算块距离,论文中也指出一般在噪声的标准差σ>40 时才需要设置一个非零的阈值,对于阈值为零的情况,上式所得的块距离与直接在空间域计算是等价的。另外,我们可以先计算所有可能的候选块的2D变换系数并缓存起来,因为相邻的参考块的需要搜索的候选块大多数是一样的,所以这部分结果也可以进行复用。当然,我们不需要把整幅图像的候选块的变换都存储起来,因为全搜索不可能应用于整幅图像,而是只有某个较小的搜索窗口。当搜索窗口移出某个候选块时,我们就可以删除其变换系数以节省存储空间了。另一方面,因为我们已经计算得到所有相似块的2D变换系数,如果协同变换采用的是可分离的3D正交变换,那么这些2D 变换的结果就可以进行复用,我们只需再进行第3维的1D变换即可,从而进一步降低其复杂度。

         回到 Step1 的块匹配,根据上式计算得到当前参考块与其他所有块(实际上只有某个邻域内的块会被考虑)的匹配误差后,我们只保留那些误差小于一定阈值的块,并得到相应的坐标集合

         为判定两个块相似的最大误差阈值,一般根据经验来设置。很明显当前参考块肯定会被判定为相似块,因为其匹配误差为 0,所以坐标集合中至少有 1 个元素。这时我们把所有的相似块堆叠起来,就可以得到一个形状为的3D数组。得到参考块对应的 3D 数组后,我们就可以进行 3D 的协同变换和滤波,形式化地可表示为

 

         得到每个参考块以及其对应的3D组的协同滤波结果后,因为参考块本身就是有重叠的,而且不同的参考块也可能包含重叠的相似块,为了得到每个像素的基础估计,我们有必要对这些来自不同组合的协同滤波结果进行整合。我们可以根据协同滤波后剩余的非零系数的个数来进行权值的分配,假设该 3D 组合内所有的像素都是独立的,记硬阈值操作后剩下的系数个数为则有

        最后,通过对某个像素所属的所有参考块以及对应的相似块的加权叠加,我们就可以得到其基础估计,即

        从式中也可以看出,一个像素既可以属于不同的参考块,也可以属于同一个参考块的不同相似块,而同一个块也可以是不同的参考块的相似块。通过这种过完备的协同滤波方法,我们一方面可以尽可能地去除噪声的能量,同时也能较好地保持图像中的细节,并且可以保持较低的计算复杂度

(2)Step2

       Step2 与 Step1 的流程基本一致,首先也是为每一个参考块寻找足够的相似块,注意这时的参考块大小不一定与 Step1 相同。不同的地方在于,Step2 是直接在基础估计图像上寻找相似块的,因为这时候的噪声已经比较小了,我们不需要像式 (3.5) 那样先进行变换然后硬阈值去除部分幅度较小的系数,即

 

        注意,不同于 Step1,这里将产生两个 3D 组合,为基础估计图像上的相似块所组成的 3D 组合 为原始有噪声图像上同样位置的块。

        维纳滤波是一种使得有噪声信号经过滤波后的输出与原始无噪声信号均方误差最小的线性滤波器,我们从基本估计组的三维变换系数的能量定义维纳收缩系数为:

         类似于 Step1,对图像中每一个参考块都进行维纳滤波后,我们同样需要对这些结果进行整合。在 Step1 中,我们根据每个 3D 组合经过硬阈值滤波后剩下的非零系数个数来分配该组合滤波结果的权值。定义该组合的权值为

         Step2 所得的最终估计图像可表示为

         虽然 Step2 和 Step1 一样都是直接对原始的有噪声图像进行降噪的,但是 Step2 借助了 Step1 所得的基础估计图像,一方面能够更加准确地找到相似块的位置,另一方面可作为原始无噪声图像的经验估计进行均方误差最优的维纳滤波,实验表明这种方法确实能够提高接近 0.5~1dB 的 PSNR 质量(论文数据),可以说是比较有效的。但要注意的是,因为 Step2 和 Step1 的整个流程基本相似,所以其所需计算时间也是差不多的,至于是否值得为了以上提升质量而多花一倍的时间需要根据实际的需求进行讨论。

三、BM3D实现

图3: Noisy (σ = 25)灰度House图像和BM3D估计(PSNR 32.86 dB)。

图4: BM3D算法的去噪性能

图5:极端噪声水平的去噪示例

图6:彩色图像中去噪最高PSNR结果。

猜你喜欢

转载自blog.csdn.net/SmartLab307/article/details/128391485