BM3D(Block-Matching and 3D filtering)读后感[通俗易懂]

BM3D(Block-Matching and 3D filtering)读后感[通俗易懂]本篇博客是关于BM3D(Block-Matchingand3Dfiltering)及其相关算法VBM3D、CBM3D的详细解析。图像去噪方向第一次做,所以用词不当还请指出。

大家好,又见面了,我是你们的朋友全栈君。

BM3D(Block-Matching and 3D filtering)读后感

一、 总览

BM3D是2007年TIP的文章,题目是Image denoising by sparse 3D transform-domain collaborative ltering,论文、项目的地址是http://www.cs.tut.fi/~foi/GCF-BM3D/,提供matlab代码;http://www.ipol.im/pub/art/2012/l-bm3d/为C++的实现,这篇论文里面有对BM3D实现的更为详细的说明。

处理灰度图的BM3D以及它的变体CBM3D(彩色图)、VBM3D(时域)是图像去噪领域公认的去噪效果(PSNR)最好的,而BM4D、VBM4D等也都是沿袭BM3D的基于块处理(block-wise estimate)的思想,但其计算时间复杂度极大,或许只能用于离线处理(offline),当然后续有文章进行优化(代码、算法),这里就不再提及。


这里写图片描述

找相似块,得到块集合


BM3D算是NLM(non-local mean)的升级版本,因为它主要用到了非局部块匹配的思想,首先找相似块,不同于传统NLM使用L2距离,它用了硬阈值线性变换(见节二-2)降低了L2距离的复杂度;找到相似块后,NLM是做一个均值处理,而BM3D则是将相似块域转换,提出Collaborative filtering降低相似块自身含有的噪声(NLM做均值,引入了相似块的噪声)(见节二-2),并在aggregation处对相似块加权处理(见节二-3),得到降噪后的目标块。

BM3D的复杂之处在于,首先找相似块,其次是采用了两次block-wise estimate,复杂度相比NLM翻了1倍,且含有域变换操作。

二、 算法说明

1. 流程图

这里写图片描述
分为两步,Basic estimate与Final estimate,两步除Collaborative filtering不同外,其余子步骤近似。其中:

  • S1 Basic estimate:
    • S11 Block-wise estimate
      • S111 Grouping 为目标块找到相似块,块集合无顺序限制;
      • S112 Collaborative hard-thresholding 使用某种域变换方法,得到“变换后的相似块集合”,采用协同(由相似块共同确定)硬阈值策略“弱化”相似块的噪声,后反变换回原始块域;
    • S12 Aggregation 加权平均相似块(S112处理后),叠加后得到basic estimate后的目标块;
  • S2 Final estimate:
    • S21 Block-wise estimate
      • S211 Grouping 使用S111步的块集合,以及已由S1处理后的图像重新计算块集合
      • S212 Collaborative Wiener filtering 域变换后,使用维纳滤波
    • S22 Aggregation

2. S111 Grouping 找相似块

本文使用L2距离判断,采用a normalized 2D linear transform与hard-thresholding对块距离进行预处理操作,公式如下:
这里写图片描述
因为含有噪声的图像,计算L2距离,噪声使两个相似块的差异变大,可能找到错误的相似块。
其中,

  • x为像素点,X为图像
  • 这里写图片描述目标块, 这里写图片描述搜索块
  • 这里写图片描述是S1中的块大小
  • 这里写图片描述硬阈值操作,阈值设为这里写图片描述
  • 这里写图片描述是归一化后的二维线性变换

根据距离就可以找到相似块集合,由式(5)所示,
这里写图片描述
其中,

  • 这里写图片描述确定是否相似的超参数
  • 这里写图片描述这里写图片描述的相似块集合

3. S112 Collaborative hard-thresholding 相似块降噪

此处使用归一化的3D线性变换(normalized 3D linear transform)这里写图片描述来降低相似块的噪声,然后使用反变换 这里写图片描述得到S112步处理后的相似块 这里写图片描述,如下式(6)所示,
这里写图片描述
其中,

  • 这里写图片描述为归一化的3D线性变换, 这里写图片描述为其反变换
  • 这里写图片描述硬阈值操作,阈值设为 这里写图片描述
  • 这里写图片描述 为处理后的相似块集合

a) 为什么要这么做

文中ⅡC中提到,传统方法,如NLM,由空域得到近似块,然后对近似块的每个像素一一对应去平均,作为目标块每个像素的值。但是,上述策略对于如下场景并不合适:

i. 某些相似块拥有的噪声更小,相比其它相似块,该块的“权重”应更大,而不是简单取平均
ii. 相似块图像信息冗余,从空域上看,两个有重叠区域的相似块,简单平均会造成目标块信息重复。

因此采用“Collaborative ltering by shrinkage in transform domain”的方式,能够加强相似块的稀疏性,同时降低相似块的噪声。
这里写图片描述

4. S12 Aggregation 加权生成目标块

同样是为了降低相似块的信息冗余与自身噪声,所以我认为与S112的目的一致。加权平均后得到目标块的像素值,如式(12)(10)所示:
这里写图片描述

这里写图片描述

其中,

  • 这里写图片描述为权重
  • 这里写图片描述 为公式(6)硬阈值操作后的非0系数的个数
  • 这里写图片描述,在实际搜索相似块时,需要对原图padding,由padding得到的相似块不纳入加权平均中

5. S211 Grouping

由S1初步处理后的图像,重新计算L2距离,得到相似块集合,此处不再使用硬阈值处理,公式如式(7)所示:

这里写图片描述

其中,

  • 这里写图片描述为S2步的判断是否相似的超参数
  • 这里写图片描述为相似块集合

6. S212 Collaborative Wiener filtering

由S211步得到的相似块集合 这里写图片描述,经过某个域变换后,使用维纳收缩系数(Wiener shrinkage coefcients) 这里写图片描述加权,后经过反变换,得到块集合 这里写图片描述。如式(9)、(8)所示。

这里写图片描述
这里写图片描述

7. S22 Aggregation

S12已经说明过了,S22与S12近似,公式如式(11)所示,而最终结果,与式(9)的计算步骤一致。

这里写图片描述

三、 结论

1. 加速

在实际操作中,为加快BM3D的计算速度,在寻找相似块的步骤后,得到的块实际上已经进行了2D变换处理,然后再加上一个1D变换(文中使用1D-Haar离散小波变换),成为3D变换,使用2D+1D的变换方法替代直接3D变换。

2. 难点

文中提到的2D变换与各种超参数,并没有一个确定值,对于真实视频去噪,使用的2D变换与超参数可能与文章实验设置不同,因此需要进行微调,也就是需要大量实验的积累。

最终的去噪结果如下图所示,可以发现,噪声被很好地去除了,图像边缘保留完整,图像纹理得到了很好的还原。
这里写图片描述
但这些都是自行添加高斯白噪声产生的测试图像,若实际运用在图像降噪中,原始图像不会有这么多噪声,因此就不需要BM3D两步去噪。那么可以将BM3D的两步拆开,采用前步的硬阈值、2D变换寻找相似块、1D变换升至3D域再加权平均,或后步直接使用维纳滤波,或许就已经有很好的效果了。

下一步会总结BM4D、VBM4D的东西。

四、 C-BM3D

针对彩色图,本文将图像的RGB色彩空间转换为YUV色彩空间,因为YUV的Y分量拥有较其余分量更多的图像信息(边缘、材质、纹理等),并且拥有更高的SNR(信噪比),而U、V分量拥有更多的低频信息。
因此对于C-BM3D,本文使用Y分量搜寻相似块,U、V分量使用Y分量的相似块位置信息。
这里写图片描述
可以仿照他转换色彩空间、从Y分量搜索相似块的方法,来对彩色图像进行降噪处理。

五、 VBM3D

对于视频去噪,一是可以将视频转化为单帧图像,然后使用图像去噪算法对单帧进行处理,然后融合还原成已去噪的视频;二是根据视频前后帧信息,某个像素点,前帧没有噪声,或噪声较少,那么就可以作为后帧的值,但视频中物体是运动的,如果按前后帧的同一位置的像素处理是不合理的,因此会引入运动补偿、跟踪的算法,对于实时处理来说,条件就有点苛刻。

VBM3D不含运动补偿,对中间帧的目标块搜索相似块,搜索对象是前后帧与中间帧,提出了predictive-search block-matching(PS-BM),用于前后帧的相似块搜索。具体而言,PS-BM,先以中间帧的目标块为中心、搜索半径NS的区域寻找相似块,然后在该块对应的前后帧的位置为中心、搜索半径NPR的区域寻找相似块,中间帧、前后帧的相似块构成块集合。其余步骤与BM3D无异。
这里写图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133774.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • lrzsz安装

    lrzsz安装当服务器没有安装FTP等工具上传文件时,可以通过rz上传文件,sz文件名进行下载文件,默认下载路径为:C:\Users\用户\Downloads,安装如下:yuminstalllrzsz-y转载于:https://www.cnblogs.com/heruiguo/p/8417031.html…

    2022年6月23日
    24
  • c语言将时速转换成配速,配速与时速换算(跑步配速和时速换算)

    c语言将时速转换成配速,配速与时速换算(跑步配速和时速换算)时间除以路程,一般时间单位用分,路程单位用千米。比如20分钟跑了3千米,那配速就是20/3=6.66,也就是6分40秒每公里,一般说成640的配速。配速是针对长跑来说的,对短跑和中跑是不采用这个概念的。马拉松运动讲究匀速,在匀速的状态下才能更好地发挥自己的实力。很多跑步爱好者很注意控制速度。他们根.时速的意思是当时跑步的速度,配速是平均每公里耗时几分钟消耗是指跑步消耗的热量相当于每小时跑多少千…

    2022年6月28日
    64
  • 快捷方式图标显示不正常_win10快捷方式不显示图标

    快捷方式图标显示不正常_win10快捷方式不显示图标win10系统的电脑近期遇到一个问题,那就是桌面上或者某磁盘中文件夹的程序快捷方式图标丢失显示异常,部分程序为一个白纸图标,不显示原本的程序图标,但是这些软件或者游戏的快捷方式能正常打开。那么游戏、软件等应用程序快捷方式不显示图标怎么办?下面装机之家分享一下Win10快捷方式图标变白纸解决方法。原因分析:在Win10系统中,首次对图标进行显示,为了加速图标的显示,之后系统会对图标进行缓存,如果缓存…

    2022年10月18日
    0
  • 微信公众平台开发笔记

    微信公众平台开发笔记

    2021年11月16日
    39
  • go语言的type func()用法

    go语言的type func()用法在 go 语言中 type 可以定义任何自定义的类型比如熟悉的 typedogstruc typemyIntint 等等所以 func 也是可以作为类型自定义的 typemyFuncfu int int 意思是自定义了一个叫 myFunc 的函数类型 这个函数的签名必须符合输入为 int 输出为 int 已知 相同底层类型的变量之间是可以相互转换的 例如从一个取值范围小的 int16 转为取值范围大的 int32 所以 自定义的 myInt 和 int 之间也是可以转换的 typemyIn

    2025年6月8日
    0
  • codeblocks mingw安装配置问题

    codeblocks mingw安装配置问题整了一上午!1.64位os可以用mingw-322.官网下载mingw,安装,位置无所谓,continue之后右键第三项,mark,然后install选项,apply3.path配置,win10以前的版本要手写变量,记得用半角英文分号,win10直接复制就行4.编译器配置,第一次自己搞最头疼最头疼最头疼最头疼最头疼的地方!第一步,setting,然后comp

    2022年6月22日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号