查看: 15907|回复: 1
收起左侧

详解摄像头输出格式

[复制链接]
发表于 2013-11-27 15:12:03 | 显示全部楼层 |阅读模式
   COMS感光芯片输出格式,即sensor输出的数据是什么格式的,一般有YUV\rawRGB两种格式。

     YUV格式输出的sensor内部都会有一个ISP(数字图像处理器)对感光得到的原始数据进行处理(包括各种图像处理模块AWB\AEC\LSC\GAMMA\去噪等等)之后再输出;而rawRGB的输出则是不经过sensor内部ISP处理,直接将感光得到的数据bypass输出,图像处理的事情交给平台或专用的芯片来做,一般YUV的sensor都会支持rawRGB的输出,但是也有一些sensor内部是没有ISP的只能输出rawRGB的数据,只支持rawRGB的sensor相对YUV的sensor的来说会便宜一些,但是调试起来会更麻烦,效果都不由sensor的寄存器来控制



YUV和YCrCb差异

   最近在研究camera的驱动,经常会看到camera IC输出格式为RGB,YUV/YCrCb,我非常不明白的一个概念就是YUV和YCrCb到底有什么区别?或者说他们是否是同一个概念,只是别名不同而已,因此我在网上搜索了很久,终于得到了一个比较满意的答案。
问题1:什么是YUV?
问题2:YUV,YCbCr4 YUV (4:2:2)与YCbCr4:2:2格式是否是一会事?
问题3:支持ITU601的YCbCr4:2:2格式与普通的YCbCr4:2:2格式有什么区别?

答 1:
详细介绍一下YUV(也称YCrCb)是被欧洲电视系统所采用的一种颜色编码方法(属于PAL制式)。YUV主要用于优化彩色视频信号的传输,使其向后兼容老式黑白电视。与RGB视频信号传输相比,它最大的优点在于只占用极少的带宽,而RGB要求三个独立的视频信号同时传输。

    在YUV中,“Y”代表明亮度(Luminance或Luma),也就是灰阶值;而“U”和“V”表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。“亮度”是通过RGB输入信号来创建的,方法是将RGB信号的特定部分叠加到一起。“色度”则定义了颜色的两个方面——色调与饱和度,分别用Cr和Cb来表示。其中,Cr反映了RGB输入信号红色部分与RGB信号亮度值之间的差异,而Cb反映的是RGB输入信号蓝色部分与RGB信号亮度值之间的差异,此即所谓的色差信号,也就是我们常说的分量信号(Y、R-Y、B-Y)。
    在专业领域了,“Y CB CR”表示数字色差信号而不是模拟色差信号。色差信号Y,R-Y,B-Y信号一般通称为Y, Cr,Cb; 习惯上Y,Cr,Cb为数字(PCM)的色差信号,模拟的色差信号则称Y,Pr,Pb,所以我们常在DVD Player的内部看到Y,Cr,Cb而在DVD Player的外部看到色差输出标示为Y,Pr,Pb或YUV;YUV则是在欧洲电视系统PAL中的色差信号的通称,包含数字及模拟的色差信号都称YUV,所以当您看到YUV时您就要联想到它是PAL系统中的Y,R-Y,B-Y信号,它可能是数字(PCM)的YUV,也可能是模拟的YUV。


答 2:
也就是说是模拟和数字的区别了在习惯上有所区别:
“习惯上Y,Cr,Cb为数字(PCM)的色差信号,模拟的色差信号则称Y,Pr,Pb,所以我们常在DVD Player的内部看到Y,Cr,Cb而在DVD Player的外部看到色差输出标示为Y,Pr,Pb或YUV;”

实际上可能一样:
“YUV则是在欧洲电视系统PAL中的色差信号的通称,包含数字及模拟的色差信号都称YUV,所以当您看到YUV时您就要联想到它是PAL系统中的Y,R-Y,B-Y信号,它可能是数字(PCM)的YUV,也可能是模拟的YUV。”


答 3:
YUV 和 Y,Cr,Cb对于数字电路而言:YUV 和 Y,Cr,Cb只是相差128,YUV没有负值,Y,Cr,Cb最高位为符号位,U = Cr + 128;V = Cb +128. 参见iru bt656 or ccir 656
Bayer数据的处理

Bayer是相机内部的原始图片, 一般后缀名为.raw. 很多软件都可以查看, 比如PS.

我们相机拍照下来存储在存储卡上的.jpeg或其它格式的图片, 都是从.raw格式转化

过来的. .raw格式内部的存储方式有多种, 但不管如何, 都是前两行的排列不同. 其

格式可能如下:

G R G R G R G R

B G B G B G B G

G R G R G R G R

B G B G B G B G

  横为2的倍数, 竖为4的倍数, 它们构成了分辨率. 如, 上面则代表了 8 * 4 分辨率的Bayer图.

  我们要知道的是, G = 2 * R 及 G = 2 * B, 即绿色值为红色值或蓝色值的两倍, 因为人眼对绿色更敏感, 所以绿色的分量更重.

  下面说一下从bayer转换成rgb图的算法, RGB图, 即为三色图, 一个像素点就由RGB三种颜色构成的混合色, 而bayer图一个像素就只有一个颜色, 或R或G或B. 因为bayer一个像素点只有一种颜色, 需要借助这个像素点周围的颜色对它进行插值(填充)另外的两种颜色, 它本身的颜色就不用插了. 一般的算法是:

对于插入R和B,

Rx = ( R1 + R2 ) / 2; 或-------------取上边和下边的平均值, 或是左边和右边的平均值

Rx = ( R1 + R2 + R3 + R4 ) / 4;----取四个边的平均值

B同理. 如:

G B G

R G R

G B G

对于中间的G, 它缺少 R和B, 用上下和左右的平均值进行求值.

对于

B G B

G R G

B G B

这个图呢, 中间点R, 缺少G和B, G暂时没讨论, 那么 B, 就是从R的四个B角进行求平均值.

==============================================

如果插入G, 稍有些复杂.不过一般的算法与R和B一样, 复杂的算法, 其复杂程度也提升一倍, 不过精度更高, 如果对于视频监测系统来说, 精度相对来说不必要求太高, 用R或B的解法即可. 下面说复杂的:

对于图:

          R1

          G1

R4 G4 R G2 R2

          G3

          R3

对于中间点R, 它需要插入G和B, B不讨论, 主要讨论G, 它周围有四个点G1, G2, G3, G4.

          ( G1 + G3 ) / 2--------------如果 |R1-R3| < |R2-R4|

G(R) = ( G2 + G4 ) / 2-------------如果 |R1-R3| > |R2-R4|

          ( G1 + G2 + G3 + G4 ) / 4--如果 |R1-R3| = |R2-R4|

如果周围出现的像素点颜色为B, 就应该比较|B1-B3|与|B2-B4|的值.

====================================================

还有关于将RGB格式转换为YUV格式的算法, 这里不想讨论了.

这里要注意的是, bayer每个像素的值是8位的. 但是有的相机的bayer格式却有10位, 12位

以及14位, 16位的, 那么如何将这些高于8位的数据转换为8位数据呢?. 拿12位数据来说, 有的

人是取高8位或是低8位, 那么这样就会出现一个问题, 这张图像会有一个斜度, 不是偏亮就是偏

暗, 或是出现其它乱七八糟的问题, 颜色问题总是不能令人满意. 这个时候就要去较正它, 无疑是

浪费了时间.

另一种算法是使用log映射, 据老外说, 这种转换法具有较高的精度. 拿12位来说, 一般转换算法:

f(in) = 2 ^ ( log(in) * 8 / 12 )

转换图为:

|8                                        .

|                      .   

|        .

|_______________________12

因为log256 = 8, log4096 = 12, 对了log是以2为底哦.

做得更好一点的算法, 可能根据提供的曝光等其它因素不同, 而将算法进行调整, 这样当一些意外

事件发生时, 产生的图片也不会失真严重.

如有何疑问, 请致信: 414078791@qq.com


RGB与Raw RGB有什么区别?

   摄像头的数据输出格式一般分为CCIR601、CCIR656、RAW RGB等格式,此处说的RGB格式应该就是CCIR601或CCIR656格式。而RAW RGB格式与一般的RGB格式是有区别的。

   我们知道,Sensor的感光原理是通过一个一个的感光点对光进行采样和量化,但,在Sensor中,每一个感光点只能感光RGB中的一种颜色。所以,通常所说的30万像素或130万像素等,指的是有30万或130万个感光点。每一个感光点只能感光一种颜色。

   但是,要还原一个真正图像,需要每一个点都有RGB三种颜色,所以,对于CCIR601或656的格式,在Sensor模组的内部会有一个ISP模块,会将Sensor采集到的数据进行插值和特效处理,例如:如果一个感光点感应的颜色是R,那么,ISP模块就会根据这个感光点周围的G、B感光点的数值来计算出此点的G、B值,那么,这一点的RGB值就被还原了,然后在编码成601或656的格式传送给Host。 而RAW RGB格式的Sensor则是将没个感光点感应到的RGB数值直接传送给Host,由Host来进行插值和特效处理。


修正:

  不对吧,我觉得还是根据周围GB点的感应值,来推算出此位置的GB值。可能sensor可以支持例如算法来修正R值:根据周围R值来综合得出此点的R值。得出此位置像素的RGB数值。


  Raw RGB 每个像素只有一种颜色(R、G、B中的一种); RGB 每个像素都有三种颜色,每一个的值在0~255之间; 在手机摄像头的测试过程中,由sensor输出的数据就是Raw data(Raw RGB),经过彩色插值就变成RGB


  也不一定就是测试过程,想要获得真正的图像,都必须有的一个过程; sensor输出的数据格式,主要分两种:YUV(比较流行),RGB,这就是sonsor的数据输出;这其中的GRB就是Raw RGB,是sensor的bayer阵列获取的数据(每种传感器获得对应的颜色亮度); 但是输出的数据不等于就是图像的实际数据,模组测试时,就要写一个软件,完成数据采集(获得Raw data)->彩色插值(目的是获得RGB格式,便于图像显示)->图像显示; 这样就可以发现整个模组是否正常,有无坏点,脏点的等,检测出不良品;(软件的处理过程当中,为了获得更好的图像质量,还需要白平衡,gamma校正,彩色校正) 而在手机的应用中,手机根据相机模组的数据格式,提供一个ISP(主要用于RGB格式的),配合软件,使照相功能得到应用;

发表于 2014-3-11 23:09:25 | 显示全部楼层
楼主好人啊!谢谢你可以和大家分享资料!
高级模式
B Color Image Link Quote Code Smilies @朋友

本版积分规则

在线客服

客服电话

欢迎来电咨询

188-9985 8350

微信关注

手机APP程序:
扫码下载访问

微信公众平台:
摄像头之家公众号

微信小程序:
摄像头小程序

返回顶部

QQ|站点统计|小黑屋|手机版|Archiver|摄像头模组论坛网 ( 粤ICP备18155214号 )

Powered by Discuz! X3.4 Licensed© 2001-2013 Comsenz Inc.