ISP模块之RAW DATA去噪(二)--BM3D算法
在正式开始本篇文章之前,让我们一起回顾一下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算法的更多相关文章
- ISP模块之RAW DATA去噪(一)
ISP(Image Signal Processor),图像信号处理器,主要用来对前端图像传感器输出信号处理的单元,主要用于手机,监控摄像头等设备上. RAW DATA,可以理解为:RAW图像就是CM ...
- Sensor信号输出YUV、RGB、RAW DATA、JPEG【转】
本文转载自:http://blog.csdn.net/southcamel/article/details/8305873 简单来说,YUV: luma (Y) + chroma (UV) 格式, 一 ...
- Sensor信号输出YUV、RGB、RAW DATA、JPEG 4种方式区别
简单来说,YUV: luma (Y) + chroma (UV) 格式, 一般情况下sensor支持YUV422格式,即数据格式是按Y-U-Y-V次序输出的RGB: 传统的红绿蓝格式,比如RGB565 ...
- 嵌入式开发之davinci--- 8148/8168/8127 中的图像采集格式Sensor信号输出YUV、RGB、RAW DATA、JPEG 4种方式区别
简单来说,YUV: luma (Y) + chroma (UV) 格式, 一般情况下sensor支持YUV422格式,即数据格式是按Y-U-Y-V次序输出的RGB: 传统的红绿蓝格式,比如RGB565 ...
- IPC网络高清摄像机基础知识4(Sensor信号输出YUV、RGB、RAW DATA、JPEG 4种方式区别) 【转】
转自:http://blog.csdn.net/times_poem/article/details/51682785 [-] 一 概念介绍 二 两个疑问 三 RAW和JPEG的区别 1 概念说明 3 ...
- Spring Data(二)查询
Spring Data(二)查询 接着上一篇,我们继续讲解Spring Data查询的策略. 查询的生成 查询的构建机制对于Spring Data的基础是非常有用的.构建的机制将截断前缀find-By ...
- ansible笔记(5):常用模块之文件操作(二)
ansible笔记():常用模块之文件操作(二) 文件操作类模块 find模块 find模块可以帮助我们在远程主机中查找符合条件的文件,就像find命令一样. 此处我们介绍一些find模块的常用参数, ...
- Android 图像显示系统 - 导出图层数据的方法介绍(dump GraphicBuffer raw data)
一.前言 在项目的开发中,为了定位Android显示异常的原因:GPU渲染 or GPU合成 or HWC合成送显异常的问题.我们通常会把图层的原始数据写到文件,然后通过RGB或YUV的软件工具来查看 ...
- 17.1.1.6 Creating a Data Snapshot Using Raw Data Files 创建一个数据快照使用 Raw Data Files
17.1.1.6 Creating a Data Snapshot Using Raw Data Files 创建一个数据快照使用 Raw Data Files 如果数据库是大的, 复制raw 数据文 ...
随机推荐
- Java 命令行编译项目
如果是用Exlipse, 第三方的包可以放在eclipse文件夹的jre包的lib文件夹中! (初学者的一些总结-高手们勿喷哈-) 原因: 以前一直用Eclispe编程环境运行Java.非常舒服,就像 ...
- PHP:在class中定义常量注意事项
一.不能在成员函数中定义常量,否则会引发诡异地语法错误 syntax error, unexpected 'CONST' (T_CONST) 示例 /* 错误的方式 */ class A { publ ...
- 【HDU 2594 Simpsons' Hidden Talents】
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...
- 【BZOJ 5000 OI树】
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 107 Solved: 64[Submit][Status][Discuss] Description ...
- 刷新iframe
<button onclick="document.getElementById('frame').contentWindow.location.reload(true)"& ...
- C++ primer 学习笔记之容器insert
今天在做练习9.22时,始终出现segments fault.最后才发现原来是自己对“容器insert之后迭代器会失效”的理解不够透彻. 题目如下: 假定iv是一个int的vector,下面的程序存在 ...
- git的回退和撤销操作
回退是git的使用中很常用的一个操作,如果清楚各个回退命令的作用,不仅大大加快代码回退的效率,还能避免代码回退造成的事故 1.git reset --hard [commit] 清空暂存和未暂存的更改 ...
- Android多线程全面解析:IntentService用法&源码
前言 多线程的应用在Android开发中是非常常见的,常用方法主要有: 继承Thread类 实现Runnable接口 AsyncTask Handler HandlerThread IntentSer ...
- UpdateLayeredWindow后,使用Gdi DrawText文字透明的解决办法
来源:http://stackoverflow.com/questions/5309914/updatelayeredwindow-and-drawtext 要点就是在先在memDc DrawText ...
- Python_Tips[1] -> 利用 Python 的字典实现 Switch 功能
利用 Python 的字典实现 Switch 功能 Python是没有switch语句的,当遇到需要实现switch语句的功能时,一般可以用if/else进行代替,但是还有一种更加简洁的实现方法,利用 ...