android平台camera基础知识总结


1、camera类型

    android平台主要有UVC camera和非UVC camera(并口/MIPI接口)

2、ISP(Image Signal Processor)影视处理
无论数码相机、摄像机或者摄像手机,其影像数据从前端感应后,皆须经过ASP(Analog Signal Processing)、ADC(Analog-Digital Converter)、前期影像处理(Pre-ISP)与后端影像处理(Post-ISP)四个阶段后,影像数据才能最终呈现于终端设备上

android平台camera基础知识总结_第1张图片

SENSOR分两种,带ISP和不带ISP的。
只有带ISP的SENSOR才能输出YUV,通常上有专门的寄存器负责输出格式设置

判断它输出的数据就是YUV格式方法: 
1. 可以观察上面提到的看PCLK是否变化为2倍等分辨率等帧率的RAW DATA
2. 有些寄存器可以固定输出预先设定的U V值, 设置以后直接看DVP口数据

由于 Sensor 的每个 pixel 只能感光 R 光或者B 光或者 G 光, 因此每个像素此时存贮的是单色的, 我们称之为 RAW DATA 数据。 要想将每个像素的 RAW DATA 数据还原成三基色,就需要 ISP 来处理。

3、分辨率

1080P、1080I、720P(i是interlace,隔行的意思,p是Progressive,逐行的意思)。

例如:720P是一种在逐行扫描下达到1280×720的分辨率的显示格式。

4、camera的一些特性

(1)   抓图分辨率达8M像素(image capture resolution)。
(2)   录像分辨率达720p(video recording resolution)。
(3)   原始图像数据转储帧率8M@15(raw dump frame rate)。
(4)   曝光抓图率8M@7(burst capture rate)。
(5)   图像处理
低像素补偿(poor pix compensation)、镜头阴影补偿(lens shading compensation)、去马赛克(demosaic)、色彩削波(color clipping)、局部对比度增强(local contrast enhancement)、伽玛校正(gamma correction)、边缘曾强(edge enhancement)、噪声消除(noise reduction)、标准色自适应(preference color adaptation)、空间和暂时噪声消除(spatial and temporal noise reduction)。

(6)   3A统计和校正(statistics and correction)
(7)   闪烁检测(flicker detection)。

5、sensor的数据格式

YUV格式: 

luma (Y) + chroma (UV) 格式, 一般情况下sensor支持YUV422格式,即数据格式是按Y-U-Y-V次序输出的。一幅图像包括的基本东西就是二进制数据,其容量大小实质即为二进制数据的多少。一幅1920x1080像素的YUV422的图像,大小是1920X1080X2=4147200(十进制),也就是3.95M大小。

YUV与像素的关系:
YUV是利用一个亮度(Y)、两个色差(U,V)来代替传统的RGB三原色来压缩图像。传统的RGB三原色使用红绿蓝三原色表示一个像素,每种原色占用一个字节(8bit),因此一个像素用RGB表示则需要8*3=24bit。如果使用YUV表示这个像素,假设YUV的采样率为:4:2:0,即每一个像素对于亮度Y的采样频率为1,对于色差U和V,则是每相邻的两个像素各取一个U和V。对于单个的像素来说,色差U和V的采样频率为亮度的一半。如有三个相邻的像素,如果用RGB三原色表示,则共需要占用:8*3*3=72bits;如果采用YUV(4:2:0)表示,则只需要占用:8*3(Y)+ 8*3*0.5(U)+8*3*0.5(V)= 36bits。只需原来一半的空间,就可以表示原来的图像,数据率压缩了一倍,而图像的效果基本没发生变化。

一张图片,Y,U,V各有8Bit,RGB也是每个分量值都是8位,RGB是全部采样,YUV422采样就是 每个像素点都对Y采样,UV是依次进行采样。Yu,yv,yv,yv    y=100%,u=50%,v=50%

YUV420采样就是yu,y,yu,y,yv,y,yv,y换句话说 YUV420,就是4的像素值,y=100%,u/v=25%,即四个像素公用一个u,一个v.

假如有一幅640×480的图片,用yuv422来表示,那么,采样方式就是每个像素采样Y信号,U,V信号隔一个采样,这样算下来,就有640×480个Y,640×240个U,640×240个V,一幅640×480大小的YUV图片占的总字节数为640×480×2个字节,每像素2个字节,也就是16位。

在内存种中这样排列:Y0U0Y1V0 Y2U1Y3V1...

第一个像素的YUV值为:Y0 U0 V0
第二个像素的YUV值为: Y1 U0 V0
第三个像素的YUV值为: Y2 U1 V1

.....其他以此推类,也就是说每两个像素是共用了UV的;在一行上来看,每个像素的YUV值中Y值被采样,UV值采样0后,跳到3,然后5,所以每行上Y有640个,U,V各320个。



RGB格式: 

传统的红绿蓝格式,比如RGB565,其16-bit数据格式为5-bit R + 6-bit G + 5-bit B。G多一位,原因是人眼对绿色比较敏感。

RAW RGB: 

sensor的每一像素对应一个彩色滤光片,滤光片按Bayer pattern分布。将每一个像素的数据直接输出,即RAW RGB data,raw文件都是未经过处理从数码相机传感器上导出的原始信息。Raw RGB 每个像素只有一种颜色(R、G、B中的一种); RGB 每个像素都有三种颜色,每一个的值在0~255之间; 在手机摄像头的测试过程中,由sensor输出的数据就是Raw data(Raw RGB),经过彩色插值就变成RGB

JPEG: 有些sensor,特别是低分辨率的,其自带JPEG engine,可以直接输出压缩后的jpg格式的数据


对于这几种输出格式,几个疑问: 
1、 有些手机基带芯片只能支持2M以下的YUV sensor,3M以上只能使用JPEG sensor,这里说明YUV输出格式对基带芯片有一定的要求, 那么到底YUV sensor对基带芯片有怎样的要求呢?
2、 如果直接输出RGB,对于LCD的显示是最方便的,那么为何大多数基带芯片都是要求输出为YUV格式的数据再进行处理呢?


1 YUV一个像素占2B,如果像素太高在高时钟下基带芯片处理不过来,JPEG数据量就要小的多,所以不是YUV对基带芯片有要求而是基带芯片对输出数据速率有要求。
2 RGB565一般用在很低端的基带芯片上,直接往屏上刷。YUV输出亮度信号没有任何损失,而色偏信号人眼并不是特别敏感,RGB565输出格式是R5G3 G3B5会丢掉很多原始信息,所以YUV图像质量和稳定性要比RGB565好的多
3 RAW数据每个像素就1B,数据量要少很多,一般5M以上sensor就只输出RAW数据以保证比较快的输出速度,后端挂一个DSP来处理输出的数据。

6、重点讲解:RAW格式与YUV格式

RAW格式
RAW的原意就是“未经加工”。RAW图像就是CMOS或者CCD图像感应器将捕捉到的光源信号转化为数字信号的原始数据。
RAW文件是一种记录了数码相机传感器的原始信息,同时记录了由相机拍摄所产生的一些原数据(Metadata,如ISO的设置、快门速度、光圈值、白平衡等)的文件。RAW是未经处理、也未经压缩的格式,可以把RAW概念化为“原始图像编码数据”或更形象的称为“数字底片”。

YUV格式
在现代彩色电视系统中,通常采用三管彩色摄影机或彩色CCD摄影机进行取像,然后把取得的彩色图像信号经分色、分别放大校正后得到RGB,再经过矩阵变换电路得到亮度信号Y和两个色差信号R-Y(即U)、B-Y(即V),最后发送端将亮度和色差三个信号分别进行编码,用同一信道发送出去。这种色彩的表示方法就是所谓的YUV色彩空间表示。采用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的。如果只有 Y信号分量而没有U、V信号分量,那么这样表示的图像就是黑白灰度图像。彩色电视采用YUV空间正是为了用亮度信号Y解决彩色电视机与黑白电视机的相容问题,使黑白电视机也能接收彩色电视信号。


SOC Sensor 包含Simple ISP 在里头,可以数位处理pixle後,给出YUV 格式的图像
ex: OV7725
Bayer Sensor 一般指RAW Data Sensor, 需要外部的DSP/ISP 处理
ex:OV9710/2/5
依方便性而言,SOC Sensor 比较好
若要求影像品质,Bayer Sensor 可以有较多的优化

YUV Sensor
YUV Sensor输出的格式是YUV,图像的处理效果使用sensor内部的ISP,BB端接收到的YUV格式数据后只能进行格式的转换,效果方面不进行处理,由于Sensor内部的ISP处理能力有限,而且YUV Sensor的数据量比较大(YUV422格式1个pixel占据两个bytes),所以YUV Sensor的size都比较小,常见的YUV sensor都在5MB以下。

Raw Sensor
Raw Sensor输出的格式为Raw,图像的处理效果使用BB端的ISP,BB端接受到Raw data进行一系列的图像处理(OB, Shading, AWB, Gamma, EE, ANR等),效果方面是由BB进行控制,需要针对不同的模组进行效果调试,Raw sensor是目前的主流,数据量比YUV Sensor小(RAW10格式的sensor 1个pixel占用10bit),使用平台ISP处理,能支持较大的size

YUV  sensor 又叫soc senor , 和 RAW  sensor 的区别为 ISP  是在 模组内部,还是BB 上;
YUV是一种压缩后的图像数据格式,包含很多具体的格式类型,包含很多具体的格式类型,摄像头对应的是YCBCr( 8bits,4:2:2,Interpolated color)

Camera的raw data一般都是YUV420的格式,数据的特点是:
 YUV 4:2:0采样,每四个Y共用一组UV分量
YUV420格式:

先Y,后V,中间是U。其中的Y是w * h,U和V是w/2 * (h/2)  w:width  h:hight
如果w = 4,h = 2,则:
yyyy
yyyy
uu
vv
内存则是:yyyyyyyyuuvv
需要占用的内存:w*h(Y占用内存大小) + w * h/4(U占用内存大小) + w * h/4(V占用内存大小)   = w*h * 3 / 2

所以YUV420 数据在内存中的长度是 width * hight * 3 / 2,

YUV420包括:YUV420p和YUV420SP两种格式
假设一个分辨率为8X4的YUV图像,它们的格式如下图:

android平台camera基础知识总结_第2张图片

以640x480_420.yuv为例,正确的存储格式为一大片Y,跟着一大片U,最后是一大片V:
-------------------------640x480 point
Y(0,0) Y(0,1)... Y(0,639)
...
Y(479,0) Y(479,1)... Y(479,639)
-------------------------640x480 point

-------------------------320x240 point
U(0,0) U(0,1)... U(0,319)
...
U((239,0) U((239,1)... U((239,319)
-------------------------320x240 point

-------------------------320x240 point
V(0,0) V(0,1)... V(0,319)
...
V((239,0) V((239,1)... V((239,319)
-------------------------320x240 point


调试工具:

YUV tools可以分析图片的YUV数据


你可能感兴趣的:(DD--camera)