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

BM3D 算法原理详细解析 按过程步骤讲解(附C++实现代码) BM3D是2007年提出的算法了,至今已经有一些年头了,但是仍然不妨碍它基本上还是最强的去噪算法。 在初步了解了BM3D的算法后,会发现,BM3D有种堆叠怪的嫌疑。有很多不同的算法的影子在里面,比如Non-Local Means、Wavelet shrinkage等。 我感觉思想更像是暴力出奇迹吧。但是架不住效果好。就类似现在的神经网络,一层不行我就来两层。 但是相比简单的堆叠,BM3D还是比其他的算法的细节保留上要好一些。 好了,不废话了,下面直接来看BM3D的算法原理吧。 BM3D算法原理: 阅读详情
AI摘要

BM3D是一种基于块匹配和3D滤波的图像去噪算法,结合空间域和变换域处理,通过相似块分组、协同滤波和聚合步骤实现降噪。该算法通过寻找相似图像块,组成3D矩阵并进行变换域滤波,尤其适用于高斯噪声的去除。两次降噪过程——基础估计和最终估计,提升了去噪效果。BM3D在处理图像细节和保持结构完整性方面表现出色,是图像去噪领域的有效方法。

传统图像降噪算法之BM3D原理详解_峡谷相对论的博客-优快云博客_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结果。

关于图像去噪的BM3D算法python库讲解 本文只是对python中BM3D的库进行讲解 阅读详情

相关推荐

【深度解析】BM3D算法:从块匹配到协同滤波的降噪艺术

本文深度解析BM3D算法,从块匹配到协同滤波的降噪艺术。BM3D通过非局部自相似性和三维协同滤波技术,显著提升图像去噪效果,适用于老照片修复等场景。文章详细介绍了块匹配、三维协同滤波及两次估计的精修策略,并探讨了BM3D与现代深度学习的结合潜力。

weixin_42573113的博客 227

传统图像降噪算法之BM3D原理详解

对BM3D算法细节的深度挖掘。

生活就像海洋 4万+

【图像去噪】BM3D算法图像去噪(含PSNR)【含Matlab源码 1779期】

BM3D算法图像去噪(含PSNR) 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 1553

BM3D降噪算法实现

BM3D(Block-matching and 3D filtering,3维块匹配滤波)降噪是芬兰的坦佩雷理工大学(Pampere University of Technology)的Kosadin、Alessandro、Vladimir、Karen等人2007年提出的基于传统方法的图像降噪算法,该方法的去噪性能目前是非AI图像降噪中去噪效果最好的,无愧于state-of-art denoising performance的称号。

保持分享欲 3476

图像降噪算法 BM3D 介绍

图像降噪算法 BM3D 介绍

世界那么大,我想去看看~【随心更新,看世界去了😄】 2647

BM3D去噪算法与原论文资料包

BM3D(Block-Matching and 3D Filtering)算法是一种在图像去噪领域中得到广泛应用的先进算法,其原理是通过组合块匹配(Block-Matching)和三维滤波(3D filtering)技术来显著提升图像去噪效果。BM3D利用图像块间的相似性,将图像中的局部块进行分组,然后进行协作滤波处理。这种方法突破了传统算法的局限性,有效提高了图像去噪的质量和效率。本章将从BM3D的基本原理讲起,进而分析其与其他去噪算法相比的独特优势,并对其应用场景进行简要探讨。

weixin_33812391的博客 1171

BM3D图像去噪算法原理及代码详解

1. BM3D 算法简介 BM3D是2007年TIP的文章,题目是Image denoising by sparse 3D transform-domain collaborative ltering,论文、项目的地址是http://www.cs.tut.fi/~foi/GCF-BM3D/,提供matlab代码。 处理灰度图的BM3D以及它的变体CBM3D(彩色图)、VBM3D(时域)是图像去噪...

程序员深度学习 4万+

掌握图像去噪经典算法:BM3D的深度解析

BM3D算法是一种先进的图像去噪技术,它由Kostadin Dabov等人于2007年提出。该算法结合了块匹配和稀疏表示的方法,在图像去噪领域取得了突破性的进展。稀疏表示是一种表征信号的方法,其核心在于利用信号的内在结构,在一个包含大量冗余的字典中寻找其最稀疏的表达形式。这种方法在图像去噪中显得尤为重要,因为它能够帮助我们从含噪信号中分离出有效的信息。

weixin_30653091的博客 1513

【30】图像去噪:BM3D 3维块匹配滤波算法详解与实现

本文全面解析**BM3D(Block-matching and 3D Filtering,3维块匹配滤波)**算法——这一传统图像去噪领域的经典方法。我们将从核心思想出发,逐步拆解其"相似块分组→3D协同滤波→两次估计优化"的完整流程,结合公式推导与实现细节,揭示其如何平衡去噪效果与细节保留。无论是高斯噪声去除,还是复杂场景下的结构完整性维护,BM3D的设计思路至今仍对现代去噪算法具有启发意义。zYηzYη,其中Y\mathbf{Y}Y是真实图像,ηη是高斯白噪声(均值0,方差σ2。

Try_再努力一点 2693

深入探索BM3D图像去噪算法及MATLAB实现

BM3D算法,全称为块匹配三维滤波算法,是图像去噪领域的一项突破性技术。由Kostadin Dabov等人在2007年提出,它在保持图像细节的同时,有效地消除了图像中的噪声,极大地提高了去噪性能。BM3D算法的出现,不仅为图像处理提供了新的技术手段,也为后续图像去噪算法的发展奠定了坚实的基础。

weixin_28913879的博客 966

BM3D图像去噪算法实战:基于稀疏3D变换域协同滤波的完整实现

在数字图像处理中,局部图像块通常被定义为以某个像素为中心、大小固定的矩形区域,常用尺寸如 $8 \times 8$ 或 $6 \times 6$。设原始图像为 $I \in \mathbb{R}^{M \times N}$,则位于位置 $(x, y)$ 的图像块可表示为:其中 $h$ 和 $w$ 分别为块的高度和宽度。该操作将二维图像划分为多个重叠子块,形成局部感知窗口。为了增强鲁棒性,常对图像块进行预处理,例如均值归一化或Z-score标准化:\tilde{P}

weixin_42443533的博客 1110

通俗语言说BM3D

随着友商某以摄像著称的旗舰机型的发布,其SOC中ISP5.0采用的所谓单反级降噪算法BM3D一下火热起来,本文试图用尽量通俗易懂的语言从算法原理的角度揭开BM3D算法的神秘面纱。 本文结构如下: 1.前言 2.硬阈值滤波原理介绍 3.维纳滤波原理介绍 4.BM3D原理详述 1.前言 图像去噪是计算机视觉前处理中很重要的一个环节,对于手机camera来讲,去噪的好坏直接影响最终图像的质量,图像...

luzhanbo207的博客 7250

BM3D去噪python代码

BM3D在传统图像去噪方面效果是最好的,此代码需要安装opencv库

一种基于三维块匹配滤波(BM3D)算法的散斑噪声抑制的仿真与实例分析

K.Dabov等人将变换域滤波和非局部理论思想结合,提出了三维块匹配(Block Matching and 3D filtering,BM3D)算法,该算法结合了空域滤波以及变换域滤波的长处,能够精准的保持图像的细节结构特点以及详细信息,是对散斑噪声抑制效果较好的一种算法。之后提出的各式各样的BM3D的改进算法,都取得了不错的抑斑效果,是当前公认的最佳去噪算法之一。本文将通过仿真乘性散斑噪声以及实验获取的含有散斑噪声的包裹相位数据对BM3D的去噪效果进行验证。

简单光学 3052

matlab分时代码-BM3D:使用openCV的BM3D实现

matlab分时代码BM3D 使用openCV的BM3D实现 我第一次分享自己的写作代码。 非常易于使用,在Windows visual studio上启动一个新项目,确保已正确配置openCV。然后运行main.cpp,大约需要3分钟才能看到结果。 虽然速度比大多数matlab版本(不包括MEX文件)要快得多,但我仍然认为它太慢了。有没有一种加速的方法?看来我的编码很差。愿意听任何建议。

不只是安装:用OrbbecSDK_ROS2玩转深度相机点云、滤波与DDS调优

本文深入探讨了如何通过OrbbecSDK_ROS2实现深度相机的高级应用,包括点云处理、深度图优化和DDS调优。详细介绍了点云采集与可视化技巧、多种滤波算法的配置与组合策略,以及针对高带宽数据传输的DDS高级调优方法,帮助开发者在机器人导航和三维重建等场景中提升性能。

weixin_29246195的博客 781

BM3D去噪算法实践

BM3D去噪算法实践 【下载地址】BM3D去噪算法实践 本仓库提供了BM3D-Denoise-master.rar资源文件,它封装了基于Block-Matching and 3D Filtering(块匹配和三维滤波)算法的图像去噪实现。BM3D是一种高效且广泛应用于实际场景的图像去噪技术,通过在相似块之间进行配对和3D...

gitblog_09805的博客 954

[Stanford CS217]CUDA中矩阵乘法GEMM优化的最关键点:向量内积和向量外积分别取行和取列

对于矩阵C中的每一个tile,矩阵A与矩阵B中的tile只需要读取一次,这样就可以达到 O(N) 的计算强度。理想情况下性能应当受限于算术吞吐量,确切来说对于一个大型方阵,即 M=N=K ,矩阵乘法的数学操作复杂度为 O(N3) ,而数据量为 O(N2) ,同时计算强度为 N (这里的计算强度可以被理解为同一个数据被重复利用的次数)。GEMM就是指计算 C=A∗B+C ,其中 A 、B和C都是矩阵,A是 M×K 的矩阵,B是 K×N 的矩阵, C是 M×N 的矩阵。这就是向量内积和向量外积的最大区别。

weixin_55035144的博客 1427

Python实战:BM3D算法在图像去噪中的应用与优化

本文详细介绍了如何使用Python实现BM3D算法进行图像去噪。通过分步解析算法核心原理,提供从零搭建的完整代码示例,并深入探讨参数调优与性能优化技巧,帮助开发者高效应用这一经典算法,有效提升图像质量。

2y3u4i5o6p的博客 1015

速腾RS-LiDAR-16激光雷达ROS配置全攻略:从硬件连接到Rviz点云可视化

本文详细介绍了速腾RS-LiDAR-16激光雷达在ROS环境中的配置与使用全攻略,涵盖硬件连接、网络配置、ROS驱动安装及Rviz点云可视化等关键步骤。通过实战案例和技术解析,帮助开发者快速实现激光雷达数据采集与处理,提升机器人感知系统的部署效率。

ooo22的博客 249

从零构建NVENC编码器:一个游戏开发者的实战手册

本文详细介绍了如何从零构建NVENC编码器,特别针对游戏开发者提供实战指南。内容涵盖NVENC基础概念、DirectX纹理捕获、异步编码优化及高级特性配置,帮助开发者高效集成硬件编码技术到游戏引擎中,实现高性能游戏录制和直播功能。重点解析了NVIDIA专用编码芯片的优势与API使用技巧。

weixin_29292431的博客 365

BM3D去噪算法实战:从原理到Python代码实现(附完整项目)

本文深入解析BM3D去噪算法原理,并提供完整的Python实现教程。BM3D作为传统去噪算法中的黄金标准,通过块匹配和3D滤波技术有效去除图像噪声,特别适用于医学影像和卫星遥感等领域。文章详细介绍了算法两阶段架构、关键优化策略及参数调优技巧,并附完整项目代码,帮助开发者快速掌握这一高效去噪技术。

ppp33的博客 358

【Autoware】2小时安装Autoware1.13(保姆级教程)

Autoware是一款“一体化”开源自动驾驶软件,能实现感知、决策、控制等功能,通过在Ubuntu中搭建Autoware开发环境和案例的运行,使大家对自动驾驶技术的实现有一个更清晰的认识。

DevFrank的博客 1万+
上一篇: 图结构学习最新综述:研究进展与未来展望
下一篇: 【推荐系统】一文梳理联邦学习推荐系统研究进展
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值