图像降噪算法 BM3D 介绍

2024-05-06 22:20
文章标签 算法 图像 介绍 降噪 bm3d

本文主要是介绍图像降噪算法 BM3D 介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

介绍

BM3D 是 “Block-Matching and 3D Filtering” 的缩写,即三维块匹配滤波,它是一种用于图像去噪的算法。该算法来源于 一篇“Image and video denoising by sparse 3D transform-domain collaborative filtering”的高质量文章,文章的作者是 Kostadin Dabov、Alessandro Foi、Vladimir Katkovnik 和 Karen Egiazarian,发表在 IEEE Transactions on Image Processing 2007年9月刊上。

BM3D 算法基于两个主要步骤:块匹配(Block-Matching)三维变换滤波(3D Filtering)。这种算法在图像处理领域非常著名,因为它能够有效地去除图像中的噪声,同时保留图像的细节。

BM3D 算法已经有很多的衍生版,比如CBM3D彩图、VBM3D时域、BM4D、CBM4D。
在这里插入图片描述

  • 项目地址:https://webpages.tuni.fi/foi/GCF-BM3D/
  • git 代码:https://github.com/gfacciol/bm3d
  • 论文下载地址:https://download.csdn.net/download/yanceyxin/89273068
  • 在线测试平台:https://www.ipol.im/pub/art/2012/l-bm3d/
  • 相关软件如下图。
    在这里插入图片描述

原理

该算法框图如下,中心思想充分利用自然图像中丰富的自相似结构来进行图像降噪;主要分为两步,第一部基础估计;第二步最终估计,使用基本估计,执行改进的分组和协作维纳过滤。
在这里插入图片描述

  1. 基础估计:
  • 基于块的估计。对于噪声图像中的每个块,执行以下操作:
    • i) 分组。找到与当前处理的块相似的块,然后将它们堆叠在一个3D数组(组)中。
    • ii) 协同硬阈值化。对形成的组应用3D变换,通过对变换系数进行硬阈值化来衰减噪声,反转3D变换以产生所有分组块的估计,并将块的估计返回到其原始位置。
  • 聚合。对所有重叠的分块估计值进行加权平均,计算真实图像的基本估计值。
  1. 最终维纳估计:
    • 基于块的估计。对于噪声图像中的每个块,执行以下操作:
      • 块匹配Grouping。在基本估计中使用BM找到与当前处理的块相似的块的位置。利用这些位置,形成两组(3D数组),一组来自噪声图像,一组来自基本估计。
      • 3D协同维纳滤波 Collaborative Filtering。对两个组应用3D变换。使用基本估计的能量谱作为真实(导频)能量谱对有噪声的进行维纳滤波。通过对滤波后的变换系数应用3D逆变换产生所有分组块的估计,并将块的估计返回到其原始位置。
    • 聚合加权滤波Aggregation。通过使用加权平均值聚合所有获得的局部估计,计算真实图像的最终估计。

结果展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码示例

git 上开源的 c++实现 BM3D 算法示例,作者gfacciol,可参考代码研究算法具体实现。
在这里插入图片描述

这篇关于图像降噪算法 BM3D 介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/965547

相关文章

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数