在正式开始本篇文章之前,让我们一起回顾一下CFA图像去噪的一些基本思路与方法。接着我会详细地和大家分享自己学习理解的BM3D算法,操作过程,它的优缺点,最后会给出算法效果图供参考。

在ISP模块里,研究者们会讨论去噪模块(Noise Reduction)到底是在去马赛克模块(Demosaic)之前还是之后进行。如果在之前处理的话,随着去噪过程的进行,噪声点消除的同时,伴随着彩色信息的损失;如果在之后,复杂的插值过程将会改变噪声的统计模型,使其变得很复杂并且难以计算。所以,更多的情况是选择在Demosaic之前进行去噪操作。

CFA(Color Filter Array) Data不能采用传统的灰度图像去噪算法,因为CFA图像中相邻的像素点具有不同的颜色信息度量,CFA图像的块状结构与没有传统意义上的平滑性以及分段恒常性,以至于一般的去噪算法对CFA图像并不适用。CFA Data也不能够采用彩色图像去噪算法因为每个像素点只含有一个颜色通道的信息。

①一种方法是,将原来的CFA图像阵列分成四小块(R,G1,G2,B),分别对这四块采用灰度图像去噪的方法。这种方法往往表现差,因为重要的色彩相关性信息被忽视掉了。CFA去噪算法可以通过利用CFA Data的空间以及色彩相关性来改善其效果。

②另外一种方法是利用CFA图像里面各颜色块的信息构造一幅低分辨率的RGB图像,这种方式很好的利用了其颜色相关信息,但是不能够较好的保护空间域上的高频信息。

③BM3D(Block Matching 3-D filtering algorithm)算法的提出,通过限制图像块具有相同的颜色配置结构来达到处理CFA图像的目的。

下面是BM3D算法的详细介绍:

1.基础估计

1).逐块估计(Block-wise estimates)

分组(Grouping),找到所有与目前处理图像块相似的块,把它们堆在一起形成一个3维的数组(分组)。

联合硬阈值(Collaborative Hard-Thresholding).对已经组织好的分组进行3D变换,通过硬阈值3D变换系数达到减弱噪声的目的,然后通过3D反变换回去得到分组内图像块的去噪后估计,并返回到它们之前所在的位置。

2).聚集(Aggregation) 对所估计图像块重复遮盖的像素点进行加权平均,得到最终的像素值,也就是最后的基础估计结果。

2.最终估计

1).逐块估计(Block-wise estimates)

分组(Grouping),使用图像块匹配的方法,找到原噪声图像以及基础估计图像里面与目前处理图像块相似的所有块,形成两个3维数组(分组)。

联合维纳滤波(Collaborative wiener-filtering).对已经组织好的两个分组进行3D变换,将基础估计图像的能量频谱作为真实的能量频谱对噪声图像分组进行维纳滤波,然后通过3D反变换回去得到所有分组的图像块估计,并返回到它们之前所在的位置。

2).聚集(Aggregation)

对所有得到的估计图像块重复遮盖的像素点进行加权平均,得到最终的像素值,也就是最后的最终估计结果。

BM3D如何找到相似图像块组织3D分组:如下图所示,正方形所示为各个图像块,左上的分组所选取的图像块都具有角点(尖点)特征,其他分组类似。

BM3D如何在CFA中进行处理:如下图所示,左边的分组里面的图像块具有不同的彩色配置,即R,G,B的排列方式不是一致的,而右边具有相同的彩色配置,所以其对于处理CFA图像是非常合理的。

上面将BM3D的算法原理以及细节操作都跟大家介绍清楚了,下面就来看一下BM3D对于CFA图像的算法效果:

原噪声图像

中值滤波图像

BM3D去噪图像

算法效果(PSNR)明显优于中值滤波,去噪模块就此结束,下一篇开始给大家介绍两种色彩增强的算法。

BM3D网上有现成的Matlab代码,算法链接网址:http://www.cs.tut.fi/~foi/GCF-BM3D/

参考文献:

1).A case for denoising before demosaicking color fiter array data,Sung Hee Park etc.

2).A Framework for wavelet-based analysis and processing of color filter array images with applications to denoising and demosaicing,Hirakawa etc.Havard University.

3).Cross-color BM3D Filtering of Noise Raw Data,Aram Danielyan etc.

ISP模块之RAW DATA去噪(二)--BM3D算法相关推荐

  1. LINUX下简单实现ISP图像处理从RAW到RGB,BMP算法、RGB到JPEG库的使用(一)

    在这里分享一下相关的ISP的一些基本简单图像处理算法.在一般的市面上,相关的ISP算法都是非常复杂,且经过不同serson设备的情况进行固定参数并且固化在芯片内来实现.所以硬件ISP的效率会比软件算法 ...

  2. 嵌入式开发之davinci--- 8148/8168/8127 中的图像采集格式Sensor信号输出YUV、RGB、RAW DATA、JPEG 4种方式区别...

    简单来说, YUV: luma (Y) + chroma (UV) 格式, 一般情况下sensor支持YUV422格式,即数据格式是按Y-U-Y-V次序输出的 RGB: 传统的红绿蓝格式,比如RGB5 ...

  3. Sensor信号输出YUV、RGB、RAW DATA、JPEG【转】

    本文转载自:http://blog.csdn.net/southcamel/article/details/8305873 简单来说, YUV: luma (Y) + chroma (UV) 格式, ...

  4. Spring Data(二)查询

    Spring Data(二)查询 接着上一篇,我们继续讲解Spring Data查询的策略. 查询的生成 查询的构建机制对于Spring Data的基础是非常有用的.构建的机制将截断前缀find-By ...

  5. ansible笔记(5):常用模块之文件操作(二)

    ansible笔记(5):常用模块之文件操作(二)文件操作类模块find模块 find模块可以帮助我们在远程主机中查找符合条件的文件,就像find命令一样.此处我们介绍一些find模块的常用参数,你可 ...

  6. 【Python 打开Raw data】

    Python 打开Raw data 前言 一.NumPy 二.使用步骤 1.引入库 2.读入Raw data 3.显示Raw data 总结 前言 Raw data 是图像传感器输出的原始图像数据.随 ...

  7. 【20210910】【机器/深度学习】lightGBM模型训练中报错:“Cannot set reference after freed raw data“

    一.原因在于: lightGBM模型训练完之后,Dataset的数据就会被清空,虽然在变量中它还存在,但实际已经被清空了,所以要再使用的话,需要重新生成! 二.补充知识点: lightGBM 模型训练 ...

  8. 4G模块DTU网关远程抄表方案(二):DLT645/698协议抄表

    4G模块DTU网关远程抄表方案(二):DL645/698协议电表 1 DL 645协议简介 DL645协议是一种用于智能电能表的远程抄读通讯标准.制定该标准是为统一和规范多功能电能表与数据终端设备进行 ...

  9. MATLAB Simulink模块库详解(二)Sinks篇

    MATLAB Simulink模块库详解(二)Sinks篇 Simulink模块库概述 1.Sources模块库,为仿真提供各种信号源 2.Sinks模块库,为仿真提供输出设备元件 3.Continu ...

  10. OpenCASCADE:Modeling Data之二维几何

    OpenCASCADE:Modeling Data之二维几何 Geom2d包定义了 2dspace 中的几何对象.所有几何实体都经过 STEP 处理.对象通过引用处理. 特别是,Geom2d包提供了以 ...

最新文章

  1. 第五章 python中正则表达式的使用
  2. java调用权报表的代码_ireport5.6使用table组件,如何用table显示javaBean数据源
  3. 独家解读 etcd 3.4版本 |云原生生态周报 Vol. 18
  4. “2012年度IT博客大赛”获奖感言--梦想、学习、坚持、自信、淡定
  5. Java黑皮书课后题第8章:**8.14(探讨矩阵)编写程序,提示用户输入一个方阵的长度,随机地在矩阵中填入0和1,打印这个矩阵,然后找出整行、整列或者对角线都是1或0的行、列和对角线
  6. 锐驰机器人的市场_【年终盘点】2020年,锐驰的王炸新品!
  7. React文档(一)安装
  8. java基础编程思想题目
  9. 报表引擎API开发入门—带参程序数据集
  10. mysql proxy无法连接_客户端无法通过4040端口连接到mysql proxy
  11. 习题9.38 查找字符串中的数字、字母
  12. 华为携西班牙电信于智利设立NB-IoT开放实验室
  13. 人工智能如何可以思考?
  14. Undefined和Null的区别
  15. 麦克风阵列概述与波束形成—(1) 麦克风阵列概述
  16. 一个非常非常非常简单的SpringBoot小项目by hazy
  17. Springboot启动报错-类文件具有错误的版本 61.0, 应为 52.0
  18. WinSCP软件安装教程
  19. MFC检测程序未响应
  20. Unity 优化贴图模型

热门文章

  1. 有没有大佬无偿提供一下 华为HCNA-Cloud Service-题库H13-811
  2. 一秒语音是什么软件,微信一秒语音包软件
  3. UCI数据集汇总及描述
  4. vivo9.0以上系统如何无需Root激活XPOSED框架的流程
  5. c语言time函数详解,C语言Time函数
  6. Xcode9引第三方报错 linker command failed with exit code 1 (use -v to see invocation)
  7. HackerRank Twin Arrays 题解
  8. Docker的网络类型及驱动器
  9. 计算机中缺少qt5quick.dll,qt5quick.dll
  10. 一键解决局域网共享(批处理)