BM3D 去噪算法是来自于这篇论文《Image Denoising by sparse 3-D Transform-Domain Collaboarative Filtering》。原文地址:

https://www.researchgate.net/publication/6151802_Image_Denoising_by_Sparse_3-D_Transform-Domain_Collaborative_Filteringhttps://www.researchgate.net/publication/6151802_Image_Denoising_by_Sparse_3-D_Transform-Domain_Collaborative_Filtering本文主要首先介绍BM3D算法的实现原理,然后会用代码对BM3D进行算法实现,观察BM3D算法的去噪效果。

一 BM3D算法解析

首先先介绍本算法中涉及到的两个基本概念:分组和协同滤波。

(1)分组

首先我们会对输入的噪声图像进行分块。会选取一些参考块,然后在一定范围内搜索待匹配块,计算待匹配块与参考块之间的相似性,根据相似性的多少进行分组。其中相似性的计算可以利用块之间距离的倒数来衡量,常用的距离包括欧式距离等。同事我们需要设定一个阈值,当相似性大于阈值的时候,才会将带匹配块入组。如下图1所示:

图1 来自带噪声的自然图像的块分组图示,每个片段标有“R”的位参考块,其余块为与其匹配的一些块。

(2) 协同滤波

给定一组n个片段,该组的协同过滤产生n次估计,每个分好组的片段一次。通常,这些估计可能不同。术语“协同”是从字面上理解的,即每个分好组的片段协同过滤其他片段,反之亦然。

考虑一个用协同滤波估计图2中的由加性零均值独立噪声破坏图片的说明性示例。特别的,关注同一图中所示的已经分组的块。这些块表现出完美的相互相似性,这使得元素平均成为合适的估计器。因此,对于每一个组,通过协同平均的方法就可以产生所有分组的估计。因为假设相应的无噪声块是相同的,所以估计是无偏的。因此,最终估计误差仅归因于与组中的块数成反比的残差方差。只要这些组包含大量片段,无论信号有多复杂,都可以获得很好的估计。

图2 在人工绘制的图像中分组的简单示例,其中基于每个参考快(带有粗边框),存在完全相似的参考块

但是,在自然图像中不太可能存在完全相同的块。如果在同一组内允许估计不相同的片段,则通过元素平均获得的估计变得有偏差。除非使用允许对每个分组片段产生不同估计的估计器,否则偏差误差有可能占总体最终误差的最大份额。因此,应采用比平均更有效的协同过滤策略。

变换域中收缩的协同滤波

有效的协同滤波可以通过在变换域中的收缩来实现。假设已经形成了类似信号片段的d+1维组,则协同收缩包括以下步骤。

  • 将d+1维线性变换应用于该组。
  • 收缩(例如通过软阈值和硬阈值或维纳滤波)变换系数以衰减噪声。
  • 反转线性变换以生成所有分组片段的估计值。

接下来就是介绍BM3D中的具体算法流程。

本文算法中,分组是通过块匹配实现的,而协同滤波是通过在3D变换域中收缩来实现的。使用的图像片段是固定大小的正方形块。该算法中执行的一般过程如下,通过从输入噪声中一次提取参考块并对每个这样的块进行处理:

  • 查找与参考块相似的块(块匹配),并将它们堆叠在一起以形成3D阵列(组)
  • 对群组执行协同过滤,并将获得的所有分组块的2D估计值返回到其原始位置。

在处理所有参考块之后,获得的块估计可能重叠,银簇每个像素有多个估计。我们汇总这些估算值已形成这呢个图像的估算值。此此通用过程以两种不同的形式实现,以组成一个两步算法。此算法在图3中进行了说明,其过程如下:

步骤1.初步估计

a) 块估算。对于嘈杂图像中的每一个块,清执行以下操作。

i) 分组。查找与当前处理块相似的块,然后将它们堆叠在一起形成3D数组。

ii) 协同性硬阈值。将3D变换应用于所形成的数组,通过变换系数进行硬阈值来衰减噪声,将3D变换反转以生成所有分组块的估计,并将这些块的估计返回到原始位置。

b) 聚集。通过对所有获得的重叠的块估计进行加权平均,计算出真实图像的初步估计值。

步骤2. 最终估计:基于初步估计,进行改进的分组和协同维纳滤波。

a) 块级估计。对于每个块,请执行以下操作。

i) 分组。在基本估算范围内使用BM查找与当前处理的块相似的块的位置。使用这些位置,形成两组(3D阵列),一组来自于噪声图像,另一组来自于基本估计。

ii) 协同维纳过滤。在两个组上应用3D变换。使用关于真实能谱的基本估计值的能谱对有噪声的组进行维纳滤波。通过对滤波后的系数应用逆3D变换来生成所有分组块的估计,并将块的估计返回到其原始位置。

b) 聚集。通过使用加权平均值汇总所有获得的局部估计,计算出真实图像的最终估计。上面算法的第二步有两个重要动机:

使用基本估计我不是嘈杂的图像可以通过块匹配来改善分组

使用基本估计作为经验维纳滤波的导频信号比对噪声数据的3D频谱进行简单的硬阈值处理要有效和准确的多。

图3 本文提出的图像去噪算法的流程图。对于每个处理的块(标记为“R”)重复用虚线包围的操作。

BM3D 去噪算法原理解析与代码实现相关推荐

  1. 深度学习核心技术精讲100篇(九)-Catboost算法原理解析及代码实现

    前言 今天博主来介绍一个超级简单并且又极其实用的boosting算法包Catboost,据开发者所说这一boosting算法是超越Lightgbm和XGBoost的又一个神器. catboost 简介 ...

  2. python文件去重算法_使用Python检测文章抄袭及去重算法原理解析

    在互联网出现之前,"抄"很不方便,一是"源"少,而是发布渠道少:而在互联网出现之后,"抄"变得很简单,铺天盖地的"源"源 ...

  3. python去重算法_使用Python检测文章抄袭及去重算法原理解析

    在互联网出现之前,"抄"很不方便,一是"源"少,而是发布渠道少:而在互联网出现之后,"抄"变得很简单,铺天盖地的"源"源 ...

  4. 智能优化算法:海鸥算法原理及Matlab代码

    智能优化算法:海鸥算法原理及Matlab代码 文章导航 1. 算法原理 2. SOA算法流程 2.1 迁徙行为(exploration ability) 2.2 攻击行为(exploitation a ...

  5. 索引算法原理解析(B-tree以及磁盘存储原理)

    刚开始学习的时候,百度去查,但发现好多说得太复杂不好理解,结合各个文章总结一下(建议大概看文字,不理解不要紧,然后再看图的执行步骤然后在结合文字,这样一切就清晰好多) B-tree,B是balance ...

  6. RANSAC(随机采样一致算法)原理及openCV代码实现

    <RANSAC(随机采样一致算法)原理及openCV代码实现> 原文: http://www.lai18.com/content/1046939.html  本文转自:http://b ...

  7. MUSIC算法原理及MATLAB代码 阵列信号处理

    MUSIC算法原理及MATLAB代码 阵列信号处理 MUSIC(multiple signal classification algorithm)算法是一种基于矩阵特征空间分解的方法.从几何角度讲,信 ...

  8. p.563算法原理解析

    p.563算法原理解析 1.概览 ​ 下图展示了,人工主观语音评估mos-lqs,双端和单端客观语音评估mos-lqo这三种方法的差异. ​ p563算法可以被想象成一个专家使用测试设备如传统的听筒侦 ...

  9. 【NLP】Doc2vec原理解析及代码实践

    本文概览: 1. 句子向量简介 Word2Vec提供了高质量的词向量,并在一些任务中表现良好.虽然Word2Vec提供了高质量的词汇向量,但是仍然没有有效的方法将它们结合成一个高质量的文档向量.对于一 ...

  10. 第四篇:决策树分类算法原理分析与代码实现

    前言 本文详细介绍机器学习分类算法中的决策树算法,并全面详解如何构造,表示,保存决策树,以及如何使用决策树进行分类等等问题. 为了全面的理解学习决策树,本文篇幅较长,请耐心阅读. 算法原理 每次依据不 ...

最新文章

  1. AI 热潮之下,初创企业能否躲过科技巨头的碾压?
  2. 1月份制造业和非制造业PMI双双回升 企稳迹象初显
  3. ASP-JSP-NET 清空IE缓存
  4. [vs2010 project] CppUnit快速入门
  5. oracle 查询dbid,查看oracle 数据库的DBID
  6. linux创建名称为学号的文件,Linux操作系统下用户管理及文件管理.doc
  7. 敏感词过滤,并实现替换
  8. 在SQL Server 2005中实现异步触发器架构
  9. ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
  10. Ubuntu常用软件大全
  11. Vmware安装BT5进入不了图形界面怎么办(KDE版)
  12. 七日杀服务器直连教程,七日杀连接服务器延迟几万 | 手游网游页游攻略大全
  13. 什么是P=NP问题?
  14. iPhone15将开放15W无线快充!
  15. 制作本地SCLo-scl镜像仓库(reposync下载rpm包、createrepo制作镜像仓库、httpd发布服务)
  16. SQLMap使用|命令大全(干货)
  17. 【039期】头条面试:说一说 LRU 原理和 Redis 如何实现?
  18. poj1015陪审团——DP+路径记录
  19. python图结构学习--networkx整理
  20. Android已读未读功能,android – 将SMS消息标记为已读/未读或删除在KitKat中不起作用的消息...

热门文章

  1. 将CDlinux 0.9.7.1的iso安装到U盘并安装grub2
  2. 视频直播系统源码,比较图片
  3. MySQL数据库的恢复-mysql数据库的恢复
  4. C语言游戏开发闪屏解决办法--双缓冲技术
  5. adobe premiere 不支持的视频驱动程序
  6. SSM框架原理,作用及使用方法
  7. web 应用程序与桌面应用程序的区别与优缺点
  8. IP6K防尘试验测试
  9. day01:打印常见测试点总结
  10. 机器学习-马尔可夫随机场(MRF)