camera -> raw10 -> yuv420 -> mjpeg -> yuv420p -> RGB
------
camera
CCD 和 CMOS
CCD(charge coupled device 电荷耦合元件)
1.AD转换电路在h或者v的总线上面
CMOS(Complementary Metal Oxide Semiconductor 互补型金属氧化物半导体)
1.每个感光二极管都跟了一个AD转换电路
马赛克结构
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:
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格式输出。
Post-ISP的作用繁杂,主要还是体现在控制上。 控制什么?当然是控制拍照时相关的电路工作状态啊。 基本的控制项目:
1. 自动曝光控制(光圈+快门控制)
2. 自动白平衡控制
3. 闪烁控制(对应工频干扰)
4. 闪光灯控制,连拍控制,视频摄录控制
5. 自动聚焦控制
6. 变焦控制
7. 等等等等
Sensor的曝光方式有几种,全帧曝光和逐行曝光等。
全帧曝光:Sensor通电后,所有的感光二极管是同时开始工作的,你只要控制Sensor加电时间的长短,就能控制曝光时间了。CCD传感器因为原理的关系,只能全帧曝光。
逐行曝光:Sensor通电后,感光二极管是一行一行开始工作的,你必须控制是哪一行曝光,然后计算总的曝光时间。
rawRGB -> RGB24
------
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分量。