BM3D算法学习

BM3D算法学习来源:BM3D算法学习-知乎(zhihu.com)作者:爱酷的胡巴前些日子在学习图像降噪的算法,自然而然的发现了这篇里程碑式的作品,“BM3D”3D块匹配降噪算法,想来时间也久,赶紧再写下来,以免过后忘记。在学习的过程中,由于没学过数字图像处理,学起来还是挺墨迹的,前前后后得有四五天吧,才算整个大差不差,期间看了许多前辈的博客和代码,也总算有些许的进步和理解,特此感…

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

来源:BM3D算法学习 – 知乎 (zhihu.com)

作者:爱酷的胡巴

前些日子在学习图像降噪的算法,自然而然的发现了这篇里程碑式的作品,“BM3D”3D块匹配降噪算法,想来时间也久,赶紧再写下来,以免过后忘记。
在学习的过程中,由于没学过数字图像处理,学起来还是挺墨迹的,前前后后得有四五天吧,才算整个大差不差,期间看了许多前辈的博客和代码,也总算有些许的进步和理解,特此感谢,并将算法原文、参考博客和文献附文末。

  • 从“头”开始

图像去噪是非常基础也是非常必要的研究,去噪常常在更高级的图像处理之前进行,是图像处理的基础。图像中噪声的来源有许多种,种类也各不相同,比如椒盐噪声、高斯噪声等。对于输入的带有噪声的图像v(x) ,其加性噪声可以用一个方程来表示:

cb82e076cb661f1fce3c95904e4899ec.png

如果能够精确地获得噪声,用输入图像减去噪声就可以恢复出原始图像。但实际中除非明确地知道噪声生成的方式,否则噪声很难单独求出来。由此,便诞生了一堆的图像降噪算法,从传统算法到现在的机器学习的算法,降噪算法得到了很大的发展。

  • 那么传统的想法是什么呢,我们主要分为以下两大类。

d5d7768e8bac9b17bb016d948e21394b.png

对于我们来讲,一个自然而然地想法就是,能不能把空间域和变换域的降噪方法结合起来,在对图像进行降噪处理,我们能想到,自然也有人想得到,NL-means应运而生。

ab9059e1262e0ca139c963aeb86dc4d1.png

非局部均值算法的主要想法在于它充分利用了自然图像的“空间相似性”,将图像分成一个个的小块,在以图像为单位对图像进行降噪,简单来讲,假设我们取11*11的窗口作为处理的小图像块,我们在图像上选取几个类似的图像斑块,例如上述的q1、q2和q3,但是q1和q2明显比q3近一点,根据空间相似性我们很容易知道q1q2应该和p更为相似,故我们在对P图像斑块进行处理的时候,我们可以对q1q2q3分别赋予不同的权重,再把他们“摞起来”,求个加权平均。形象来讲,假设存在一个每一层结构都完全相同的大楼,那么在进行加权平均的时候,我们这样想,我们把P想象为其中的一层,我们最终是要P图像斑块里面每一个像素的值,p若是一层楼,那么里面的每一个像素就是这层楼中的每一个房间,P为3楼,q1q2为1层和4层,q3为5层,那么p像素的值的大小就应该为q1q2q3每个与p对应房间(像素)值的加权平均,这样就对P图像斑块完成了降噪的过程,类似一个基于大斑块的高斯滤波算法。此外,从这个举例中我们也大概摸索出了BM3D里面3D的来历…….

  • 至此,非局部均值算法以经表现不错了,但是它体现在简单的加权平均,并且仍然在空间域处理图像,科技并非停滞不前,BM3D来了……

BM3D(Block-matching and 3D filtering,3维块匹配滤波)是当前效果最好的算法之一。该算法通过相似判定找到与参考块相近的二维图像块,并将相似块按照组合成三维群组,对三维群组进行协同滤波处理,再将处理结果聚合到原图像块的位置。该算法的思想跟NL-Means有点类似,也是在图像中寻找相似块的方法进行滤波,但是相对于NL-Means要复杂许多。总体可以分为两步:

6459739fe82ad8ce96dfad12642c162a.png

在这两大步中,分别又有三小步:

相似块分组(Grouping)→协同滤波(Collaborative Filtering) →聚合(Aggregation)

abbbd4b814ae4dcfb17f60c9f66ac1bc.png

我们细看每一个小步骤,编组的过程类似于NL-means:

ab4030171a81c5319444c0182ea42589.png

接下来,第二小步,像上面讲述的房子一样,我们把分好的图像斑块“摞起来”,形成一个3D的“块”(Block),在每一层中进行二维变换,变换到频率域,此外,在第三个维度,也就是每一层的对应的房间(像素)上进行一维变换,变换之后,按照非局部均值的思想,对斑块在频率域进行降噪处理,(其实是对像素值的加权平均),再对经过变换之后图像斑块,进行“硬阈值”处理,处理剔除不合格像素值,在经过反三维变换变换为空间域,再对图像进行块匹配,聚合至原来每个块的位置,这样整个图像就从一维变三维再变回一维了。至此,第一步完成。

Aggregation:此时,每个二维块都是对去噪图像的估计。这一步分别将这些块融合到原来的位置,每个像素的灰度值通过每个对应位置的块的值加权平均。

5945981ac1a3475c2f3de64e9ab69edf.png

第二步与第一步类似

Step2:最终估计

(1)Grouping:第二步中的聚合过程与第一步类似,不同的是,这次将会得到两个三维数组:噪声图形成的三维矩阵和基础估计结果的三维矩阵。

(2)Collaborative Filtering:两个三维矩阵都进行二维和一维变换。用维纳滤波将噪声图形成的三维矩阵进行系数放缩,该系数通过基础估计的三维矩阵的值以及噪声强度得出。

Aggregation:与Step1中一样,只是此时加权的权重取决于维纳滤波的系数和噪声强度。

82e41717d5eaaca581f8fcfe05166e8b.png

至此,算法完成,效果还是很好的,我们来看一些示例:

d2014eeefd003cc00152b4389039d0a5.png


参考文献:

详尽过程

图解噪声与去噪 之二:从『均值滤波』到『BM3D』

阿达玛变换详尽

转:X264中SATD实现分析 – Mr.Rico – 博客园

克内罗内积

克罗内克积_百度百科

小波变换

小波变换(wavelet transform)的通俗解释(一)

blog.csdn.net/zizi7/art

频域空域细致讲解

blog.csdn.net/zdh198210

版权归原作者所有,如有侵权,请联系删除。

‧  END  

FPGA_IC设计课程推广

对数字IC/FPGA设计更加感兴趣的同学,可以关注由15年前端经验的工程师SKY带来的数字IC设计入门课程。已有数家IC公司用该课程做新人培训。

详情请点击下面的链接了解:数字IC/FPGA设计_从入门到精通

或点击阅读原文链接直通设计课程。

更多精彩推荐,请关注我们

d12c220eb470db069c7c14c18615082a.png

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/143007.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 一些经久不衰的linux 视频教程列表

    一些经久不衰的linux 视频教程列表一些经久不衰的linux视频教程列表

  • 单调队列问题「建议收藏」

    单调队列问题「建议收藏」SlidingWindow题目传送:POJ-2823-SlidingWindow闲来没事学学单调队列的写法,嗯,一个很奇怪的队列形式。。单调队列是指:队列中元素之间的关系具有单调性,而且,队首和队尾都可以进行出队操作,只有队尾可以进行入队操作。因为这里是滑动窗口,每次移动需要进行更新,所以可以用单调队列来实现。本题用单调递增队列来求每一个区间的最小值,用单调递减队列来求每一个区间的最大值

  • Python 学习笔记 列表 for 循环 xxx XXX

    Python 学习笔记 列表 for 循环 xxx XXXPython学习笔记列表for循环xxxXXXprint(“-“*30)magicians=[‘alice’,’david’,’carolina’]formagicianinmagicians: print(magician)formagicianinmagicians: print(magician.title()+”,thatwasagreattrick!”) print(“I…

  • 面试100题及答案_三特点带你认识基层岗位常见面试题

    面试100题及答案_三特点带你认识基层岗位常见面试题第1期:JS中关闭当前的窗口的方法是:。答案:window.close();第2期:js中使字符串中的字符变为小写的方法是:。答案:toLowerCase方法;第3期:在js中,让浏览器弹出确认框的语句是:。答案:confirm;例如:window.confirm(“我就是确认框”);运行结果是浏览器弹出信息确认框,点击确定,返回true,反之返回false。第4期:把7.25四舍…

  • 2021年最新idea激活注册码破解方法

    2021年最新idea激活注册码破解方法,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • 如何高效学习PLC

    如何高效学习PLC【1】电工原理和电机原理一定要懂,简单的就记背也要背下来,比如马达容量1KW2A,正反转,星三角接线,电线容量。电阻,电感,电容的特性等;【2】液压和气动也要掌握,比如压力换算,压力和电流的比例换算,这在有压力控制上都要用到;【3】电线截面要会看,线拿到手就知道几平方的,还有什么电器上该用什么线,比如马达就用4线的,3根主线1根接地。从变频器上出来的要用屏蔽线;【4】机修也要会做,特别是螺丝…

    2022年10月19日

发表回复

您的电子邮箱地址不会被公开。

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