数据流

 

camera -> raw10 -> yuv420 -> mjpeg -> yuv420p -> RGB

------

camera

CCD 和 CMOS

CCD(charge coupled device  电荷耦合元件)

1.AD转换电路在h或者v的总线上面

CMOS(Complementary Metal Oxide Semiconductor 互补型金属氧化物半导体)

1.每个感光二极管都跟了一个AD转换电路

 

马赛克结构

数据流_第1张图片

数据流_第2张图片

RAW:输出顺序

00:GR/BG

01:RG/GB

10:BG/GR

11:GB/RG

RAW8 表示用8bit来表R/G/B中的一个分量,RAW10则为10bit,数据是16bit只是高位无效,RAW12同理

 

------

ISP

sensor的输出格式,未经处理的数据,表示sensor接受到各种光的强度,raw数据在输出时有一下几种顺序:

00:GR/BG

RAW rgb: rgb565 / rgb24 / argb32 

RAW rgb(没有白平衡设置)  ---dsp插值--->  real rgb/ yuv:

数据流_第3张图片

 

Pre-ISP(色彩插值)

1. Black Level Calibration(暗电流校正) 这个过程一般集成在sensor中,但是严格来说也属于ISP的一部分。 感光二极管,在没有光线照射时,释放电流应该为0吧?很可惜这只是理想状态。这些无受光情况下释放的电流值称之为Black Level暗电流,是噪音,需要去校正后保存进寄存器里面,作为补正系数。以后在光照情况下,才能将二极管的输出电流相应的进行加减补正。

2. Lens shading(镜头黑点校正) 小通光口径镜头比较严重的毛病,成像圈的外围进光量不足,所以图像四周有暗角。 所以要预先提高亮度把这个问题处理掉。

3. Black Point Compensation(黑点补偿) 通过扫描每个像素及其四周像素的颜色和灰度数据,侦测出纯黑的点,进行插值计算出合理的颜色及其灰度值覆盖它。

4. 平滑锐化 平滑+锐化,皮肤要平滑白皙,眼神要锐利凶狠化,这就是傲娇娘的基本属性,:>

5. 色彩插值 这个就是前面所说的,基于马赛克sensor的ISP一定会有的步骤,把原始图像数据中每个像素缺失的颜色给计算出来,算法很复杂哦,以后再说吧。

6. Gamma校正 不知道的看Photoshop帮助文件去。

7. AE自动曝光补偿 不知道的看Photoshop帮助文件去。

8. AWB自动白平衡补偿 不知道的看Photoshop帮助文件去。

9. Color Matrix 不知道的看Photoshop帮助文件去。

10. 饱和度/对比度/亮度调节 不知道的看Photoshop帮助文件去。

下图是一个CCD摄像头模块中,关于ISP的框图。可以看到Pre-ISP的流程为: 坏点侦测(黑点白点)->基色白平衡转换->Gamma值补偿->色彩插值->色彩修正->色域转换->将RGB444转换为YUV422格式输出。

数据流_第4张图片

 Post-ISP的作用繁杂,主要还是体现在控制上。 控制什么?当然是控制拍照时相关的电路工作状态啊。 基本的控制项目:

1. 自动曝光控制(光圈+快门控制)

2. 自动白平衡控制

3. 闪烁控制(对应工频干扰)

4. 闪光灯控制,连拍控制,视频摄录控制

5. 自动聚焦控制

6. 变焦控制

7. 等等等等 

 

Sensor的曝光方式有几种,全帧曝光和逐行曝光等。

全帧曝光:Sensor通电后,所有的感光二极管是同时开始工作的,你只要控制Sensor加电时间的长短,就能控制曝光时间了。CCD传感器因为原理的关系,只能全帧曝光。

逐行曝光:Sensor通电后,感光二极管是一行一行开始工作的,你必须控制是哪一行曝光,然后计算总的曝光时间。

 

 

 

rawRGB   ->  RGB24

数据流_第5张图片

 

------

YUV简介(亦称YCrCb)

Y:表示明亮度(luminance/luma),也就是灰阶值。通过RGB输入信号来创建,将RGB信号的特定部分叠加到一起。

UV:表示色度(chrominance/chroma),描述影像色彩和饱和度,用于指定像素的颜色。色调(Cr)反映了RGB输入信号红色部分与RGB信号亮度值之间的差异。饱和度(Cb)反映的是RGB输入信号蓝色部分与RGB信号亮度值之间的差异

YUV与RGB关系

YUV色彩模型来源于RGB模型:

 

Y'= 0.299*R' + 0.587*G' + 0.114*B'

U'= -0.147*R' - 0.289*G' + 0.436*B' = 0.492*(B'- Y')

V'= 0.615*R' - 0.515*G' - 0.100*B' = 0.877*(R'- Y')

R' = Y' + 1.140*V'

G' = Y' - 0.394*U' - 0.581*V'

B' = Y' + 2.032*U'

YCbCr模型来源于YUV模型。YCbCr是 YUV 颜色空间的偏移版本:

 

Y’ = 0.257*R' + 0.504*G' + 0.098*B' + 16

Cb' = -0.148*R' - 0.291*G' + 0.439*B' + 128

Cr' = 0.439*R' - 0.368*G' - 0.071*B' + 128

R' = 1.164*(Y’-16) + 1.596*(Cr'-128)

G' = 1.164*(Y’-16) - 0.813*(Cr'-128) - 0.392*(Cb'-128)

B' = 1.164*(Y’-16) + 2.017*(Cb'-128)

PS: 上面各个符号都带了一撇,表示该符号在原值基础上进行了伽马校正,伽马校正有助于弥补在抗锯齿的过程中,线性分配伽马值所带来的细节损失,使图像细节更加丰富。在没有采用伽马校正的情况下,暗部细节不容易显现出来,而采用了这一图像增强技术以后,图像的层次更加明晰了。

YUV格式

通常有两大类:打包格式(packed)和平面(planar)格式. packed 是将YUV分量存放在同一数组中,通常是几个相邻像素组成一个宏像素(macro-pixel);planar则是使用三个数组分开存放YUV三个分量

4:2:0采样有时被描述是一个"每像素12位"的方法。这么说的原因可以从对四个像素的采样中看出. 使用4:4:4采样,一共要进行12次采样,对每一个Y,Cb和Cr,就需要12*8=96位,平均下来要96/4=24位。使用4:2:0就需要6*8 =48位,平均每个像素48/4=12位。

 

YUV420 planar数据, 以720×488大小图象YUV420 planar为例,

其存储格式是: 共大小为(720×480×3>>1)字节,

分为三个部分:Y,U和V

Y分量:    (720×480)个字节  

U(Cb)分量:(720×480>>2)个字节

V(Cr)分量:(720×480>>2)个字节

三个部分内部均是行优先存储,三个部分之间是Y,U,V 顺序存储。

即YUV数据的0--720×480字节是Y分量值,         

720×480--720×480×5/4字节是U分量    

720×480×5/4 --720×480×3/2字节是V分量。

 

你可能感兴趣的:(数据流)