ISP模块之RAW DATA去噪(一)
ISP(Image Signal Processor),图像信号处理器,主要用来对前端图像传感器输出信号处理的单元,主要用于手机,监控摄像头等设备上。
RAW DATA,可以理解为:RAW图像就是CMOS或者CCD图像感应器将捕捉到的光源信号转化为数字信号的原始数据,是无损的,包含了物体原始的颜色信息等。RAW数据格式一般采用的是Bayer排列方式,通过滤波光片,产生彩色滤波阵列(CFA),鉴于人眼对绿色波段的色彩比较敏感,Bayer数据格式中包含了50%的绿色信息,以及各25%的红色和蓝色信息。
Bayer排列格式有以下4种:
1.| R | G | 2.| B | G | 3.| G | R | 4.| G | B |
| G | B | | G | R | | B | G | | R | G |
在ISP处理模块的第一部分,就是需要对CFA DATA进行去噪操作。普通的去噪方式针对Bayer数据格式是不合适的,需要进行变换后才能进行处理。
一、中值滤波CFA(Color Filter Array)Data去噪方法
首先,让我们一起来回顾一下中值滤波的算法原理以及优缺点,然后给出示意的算法效果图。
中值滤波,顾名思义就是将滤波器里面所有像素值进行排序,然后用中间值替代当前像素点值。常用的中值滤波器有3X3,5X5等。
中值滤波的有点在于,实现简单,能够有效的消除椒盐噪声以及其他脉冲型噪声。缺点也是所有去噪算法所共有的,就是平滑模糊了图像的内容,有些角点以及边缘的信息损失。
对CFA DATA进行去噪时,需要将不同的颜色通道分开进行处理,这样是为了防止在平滑过程中将有用的颜色信息丢掉,比如说,由绿色信息包围的蓝色像素值与其相差很大时,此时就会被认为是噪声被处理掉,然而真实情况是,该区域的蓝色信息都是很大的。所以各通道单独处理的话是有利于保护颜色信息的。在我的处理过程中,是将原CFA DATA分成4块-R,G1,G2,B,分块去噪完成后再重新恢复到原来的位置,这样整个过程就完成了。
下面给出参考的中值滤波和主程序的C++(MFC)代码:
主函数:
void main()
{/*******开始编写中值滤波去噪模块--2015.07.27***********///针对R分量块进行去噪pNewDoc->m_RBlock = new unsigned short [m_Height*m_Width/4];pNewDoc->m_G1Block = new unsigned short [m_Height*m_Width/4];pNewDoc->m_G2Block = new unsigned short [m_Height*m_Width/4];pNewDoc->m_BBlock = new unsigned short [m_Height*m_Width/4];unsigned short* smoothR = new unsigned short[m_Height*m_Width/4];unsigned short* smoothG1 = new unsigned short[m_Height*m_Width/4];unsigned short* smoothG2 = new unsigned short[m_Height*m_Width/4];unsigned short* smoothB = new unsigned short[m_Height*m_Width/4];for (int i = 0; i < m_Height/2 ;i ++ ){for(int j = 0; j < m_Width/2 ; j ++ ){pNewDoc->m_RBlock [i*m_Width/2 + j] = m_RawImage[i*m_Width*2 + j*2];pNewDoc->m_G1Block[i*m_Width/2 + j] = m_RawImage[i*m_Width*2 + j*2 + 1];pNewDoc->m_G2Block[i*m_Width/2 + j] = m_RawImage[i*m_Width*2 + m_Width + j*2];pNewDoc->m_BBlock [i*m_Width/2 + j] = m_RawImage[i*m_Width*2 + m_Width + j*2 + 1];}}medianFilter(pNewDoc->m_RBlock,smoothR,m_Width/2,m_Height/2); //针对R分量块进行去噪medianFilter(pNewDoc->m_G1Block,smoothG1,m_Width/2,m_Height/2); //针对G1分量块进行去噪medianFilter(pNewDoc->m_G2Block,smoothG2,m_Width/2,m_Height/2); //针对G2分量块进行去噪medianFilter(pNewDoc->m_BBlock,smoothB,m_Width/2,m_Height/2); //针对B分量块进行去噪//反过来构造去噪去噪后的raw datafor (int i = 0; i < m_Height/2 - 1;i ++ ){for(int j = 0; j < m_Width/2-1; j ++ ){pNewDoc->m_ImageNR[i*m_Width*2 + j*2] = smoothR[i*m_Width/2 + j];pNewDoc->m_ImageNR[i*m_Width*2 + j*2 + 1] = smoothG1[i*m_Width/2 + j]; pNewDoc->m_ImageNR[i*m_Width*2 + m_Width + j*2] = smoothG2[i*m_Width/2 + j];pNewDoc->m_ImageNR[i*m_Width*2 + m_Width + j*2 + 1] = smoothB[i*m_Width/2 + j];}}/***********中值滤波模块完成--2015.07.27********************///SaveImageData(pNewDoc->m_ImageNR, m_Height ,m_Width,"E:\\m_ImageNR.bmp");SetDisplayRawImage( pNewDoc->m_ImageNR, m_Height ,m_Width, m_RawBitType,pNewDoc->m_Image);
}
<pre name="code" class="html">void medianFilter (unsigned short* corrupted, unsigned short* smooth, int width, int height)
{ memcpy ( smooth, corrupted, width*height*sizeof(unsigned short) ); for (int j=1;j<height-1;j++) { for (int i=1;i<width-1;i++) { int k = 0; unsigned short window[9]; for (int jj = j - 1; jj < j + 2; ++jj) for (int ii = i - 1; ii < i + 2; ++ii) window[k++] = corrupted[jj * width + ii]; // Order elements (only half of them) for (int m = 0; m < 5; ++m) { int min = m; for (int n = m + 1; n < 9; ++n) if (window[n] < window[min]) min = n; // Put found minimum element in its place unsigned short temp = window[m]; window[m] = window[min]; window[min] = temp; }smooth[ j*width+i ] = window[4]; } }
} <span style="font-family: Arial, Helvetica, sans-serif;"> </span>
中值滤波函数是在网上找的代码,由于比较基础,就直接拿过来用了,侵删
去噪前后效果图:
下一篇文章,我将主要给大家展示一下BM3D算法RAW DATA去噪效果,谢谢。
ISP模块之RAW DATA去噪(一)相关推荐
- 嵌入式开发之davinci--- 8148/8168/8127 中的图像采集格式Sensor信号输出YUV、RGB、RAW DATA、JPEG 4种方式区别...
简单来说, YUV: luma (Y) + chroma (UV) 格式, 一般情况下sensor支持YUV422格式,即数据格式是按Y-U-Y-V次序输出的 RGB: 传统的红绿蓝格式,比如RGB5 ...
- Sensor信号输出YUV、RGB、RAW DATA、JPEG【转】
本文转载自:http://blog.csdn.net/southcamel/article/details/8305873 简单来说, YUV: luma (Y) + chroma (UV) 格式, ...
- 【Python 打开Raw data】
Python 打开Raw data 前言 一.NumPy 二.使用步骤 1.引入库 2.读入Raw data 3.显示Raw data 总结 前言 Raw data 是图像传感器输出的原始图像数据.随 ...
- 【20210910】【机器/深度学习】lightGBM模型训练中报错:“Cannot set reference after freed raw data“
一.原因在于: lightGBM模型训练完之后,Dataset的数据就会被清空,虽然在变量中它还存在,但实际已经被清空了,所以要再使用的话,需要重新生成! 二.补充知识点: lightGBM 模型训练 ...
- QT(Send raw data to printer)发送原始数据到USB打印机
QT(Send raw data to printer)发送原始数据到USB打印机 http://hi.baidu.com/ppacctv/blog/item/c9517538a35ef3d2b211 ...
- 联合深度以及法向图优化的ToF深度估计:Joint Depth and Normal Estimation from Real-world Time-of-flight Raw Data
概述 关于ToF传感器的真实数据的深度估计,在传统方法中使用成体系的pipeline对数据进行处理,整个过程中需要考虑到的因素很多,是一套精细又有些繁冗的过程.而<Joint Depth and ...
- 如何在MTK平台(mt6765 android 11)新增raw data分区
最近在调试MT6765平台,需要新增raw data分区,并且在lk和kernel可以读取到分区信息.感觉非常繁琐,而且做错一步要重新编译整个SDK,非常耗时.因此,记录下这个过程的关键点,希望大家能 ...
- LINUX下简单实现ISP图像处理从RAW到RGB,BMP算法、RGB到JPEG库的使用(一)
在这里分享一下相关的ISP的一些基本简单图像处理算法.在一般的市面上,相关的ISP算法都是非常复杂,且经过不同serson设备的情况进行固定参数并且固化在芯片内来实现.所以硬件ISP的效率会比软件算法 ...
- python《计算机视觉编程》第一章笔记——1.4.3形态学,1.4.2有用的scipy模块scipy.os模块,scipy.misc模块。1.5ROF去噪模型
1.4.3形态学:对象计数 形态学(数学形态学):度量和分析基本形状的图像处理方法的基本框架和集合.形态学通常用来处理二值图像,也能用于灰度图像.二值图像是指图像的每个像素只能取0或1. scipy. ...
- 一句Python,一句R︱pandas模块——高级版data.frame
先学了R,最近刚刚上手python,所以想着将python和R结合起来互相对比来更好理解python.最好就是一句python,对应写一句R. pandas可谓如雷贯耳,数据处理神器. --- 目录 ...
最新文章
- 一个比特币要挖多久?
- nodejs 实践:express 最佳实践(五) connect解析
- 剑指offer——23.反转链表
- hive jdbc驱动_Hive的安装方式
- mPaaS小程序创建
- 下载pip、安装pip
- 【异步FIFO】格雷码和二进制的相互转换
- Charles 4.2.7 for Mac 中文破解版
- ansys静态结构分析
- 游戏美术和策划,你感兴趣吗
- 5G核心网技术基础自学系列 | 5G无线网
- 拿好这份踏青攻略,智慧出游领略大好河山!
- python doc 转docx
- Vector-常用CAN工具 - CANoe入门到精通_01
- (翻译)测试替身— Fakes, Mocks 和 Stubs
- 51中断优先级及中断嵌套
- 51单片机(四).C51编程语言
- 更新mysql表结构,同步数据库表结构
- 情侣间为不吵架而“约法三章”,12条可参考理由!
- iPhone惊爆史诗级漏洞:亿万台手机可永久越狱 苹果无法修复
热门文章
- \t\t使用Google APP Engine 完成个人代理服务器架设
- 嵌入式linux离线地图,基于gmap.net制作离线地图下载器
- 三星530换固态硬盘_韩国三星网红固态硬盘PM981系列惨遭黑苹果和INTEL10代主板嫌弃...
- slickedit 设置
- 地市级公安局实战通信指挥调度方案
- vue-pdf分页预览
- Awesomium(二)-- MultiThreadSnapshot
- 后台管理系统推荐(PHP)
- 处理 Win 10 开机后输入法不加载问题
- 计算机简历如何写,简历计算机能力怎么写