1. 摄像头sensor 的原理

定时脉冲生成器会生成clock,用于访问image sensor 阵列中的行,预充电,并且按顺序采样像素阵列中的所有行。在一个行的预充电和采样的时间段里,像素的电荷量会随着曝光时间而逐渐减少。这就是快门结构中的曝光时间的概念。
可以通过调整预充电和采样的时间间隔,来调整曝光时间。当一个行的像素数据被采样后,会送至AMP模拟电路,去矫正偏移和提高相应的增益。然后被送往ADC, 阵列中的每个像素都会被转换为10bit的数据。
1.1 关于CIS图像采集的相关原理
图像采集的过程的为:
光照反射 -> 镜头汇聚 -> Sensor 光电转换 -> ADC转换 -> RAW RGB
Sensor的感光原理是通过一个一个的感光点对光进行采样和量化,我们将每个感光点叫做像素,所以,通常所说的30万像素或130万像素等,指的是有30万或130万个感光点。
但在Sensor中,每一个像素只能感光RGB中的某一种颜色,即每个像素只能感到R/G/B中的一种颜色。这种颜色通过ADC转换后,就形成了RAW RGB数据。 RAW RGB 数据是未经过处理的数据,表示sensor 接收到R/G/B的光照强度。 我们常说的RAW8, RAW10 就是RAW RGB 8bit/10bit 数据。
如果这个原始数据的排列格式是 RGRG/GBGB排列的,我们叫做 Bayer pattern(这个最最常见)。所以 Bayer RGB是属于 RGB RAW data的,但是 RGB RAW data不一定是bayer pattern。
要还原一个真正图像,需要每一个像素点都有RGB三种颜色,所以,一般地都需要有一个ISP模块,会将Sensor采集到的RAWRGB数据进行插值和特效处理,例如:如果一个感光点感应的颜色是R,那么,ISP模块就会根据这个感光点周围的G、B感光点的数值来计算出此点的G、B值,那么,这一点的RGB值就被还原了。
2 CIS相关概念&计算公式
2.1 行消隐/场消隐
行消隐和场消隐的概念来源于老的电视视频制式NTSC和PAL,NTSC每秒刷新60次,PAL每秒刷新50次。电子枪从左到右画出像素,每次扫描一条线,画下一条之前要先回到左边并做好画下一条扫描线的准备,这之间有一段时间叫做水平消隐(HBlank)。画完全部扫描线后,又回到屏幕左上交准备画下一帧,这一段时间就是垂直消隐(VBlank)。
对于CMOS Sensor来说,也有VBlank和HBlank的概念,Rolling Sensor在曝光时候一次曝光一行,一般CMOS只有一行ADC用于转换电信号,转换好的数字信号逐像素顺序排列,每一行输出结束和下一行输出开始的间隔我们称为行消隐(HBlank),这一帧结束到下一帧开始这段时间称为场消隐(VBlank)。
2.2 行曝光
何为曝光,就是光透入到sensor到采样这一段过程,叫做曝光。为了好理解,你可以假想成采样是逐个pixel进行的,采集一行所需的时间,就是一行曝光的时间。采集一帧的时间,就是曝光时间。逐行曝光的sensor只有一行ADC。
2.3 相关计算公式
在计算相关公式前,我们先给给出一些概念
| 项目 | 描述 |
|---|---|
| pclk(pixelclock) | 曝光一个像素点需要的clock |
| width | 有效图像宽度,也就是一行有效像素的个数 , 详见于CIS 的datasheet |
| height | 有效图像宽度, 也就是有多少个像素行, 详见于CIS 的datasheet |
| fps | 帧速率,单位HZ |
| HTS | HTS=width + HBLANK |
| VTS | VTS = height + VBLANK |
| link_freq | 链路的速率,即是MIPI-CSI 的clock |
关于pixelclock 有如下关系:
pclk = (HTS*VTS)*fps = (width + HBLANK)*(height + VBLANK)*fps
关于曝光时间,计算如下:
exposure_line_time = HTS/pclk;
exposure_time = exposure_line_time * exposure_line
exposure_line 是曝光的行数,一般是一个寄存器,用来控制曝光时间是多少倍的行曝光时间(exposure_line_time)。
MIPI-CSI 链路速率计算公式如下:
link_freq = (pclk * bits_per_sample) /(2*nr_of_lanes)
| 变量 | 描述 |
|---|---|
| nr_of_lanes | Number of data lanes used on the CSI-2 link. This can be obtained from the OF endpoint configuration. |
| 2 | Two bits are transferred per clock cycle per lane. |
| bits_per_sample | Number of bits per sample |
要将CIS 产生的数据能够及时搬完,就至少需要link_freq 的频率。
3. CIS驱动相关
s_power 再/dev/video0 被open 时调用
static const struct v4l2_subdev_core_ops ovxxx_core_ops = {
.s_power = ovxxx_s_power,
}
s_stream 是用户层通过ioctl时(/dev/video0),调用VIDIOC_STREAMON/OFF时,该函数被调用。
static const struct v4l2_subdev_video_ops ovxxx_video_ops = {
.s_stream = ovxxx_set_stream,
};
4. 摄像头中的概念
摄像头的3A 指的是AE/AF/AWB。下面我们详细描述。
4.1 自动曝光(Auto Exposure)-AE
曝光补偿是指拍摄者根据需要对相机所计算的亮度进行调整。 曝光是测量被摄体反射的光量得到的。 在画面内有较多白色的被摄体时,相机会判断画面过亮而降低曝光;画面中较多黑色被摄体时,相机会判断画面过暗而增强曝光(白加黑减原理)。
自动曝光算法可以理解为一个伺服系统,它不断监控ISP生成的每一帧图像的曝光状态,如果发现采集到的状态与理想目标发生偏离(超过容许范围)则立即进行干预响应,使系统尽快回到容许的工作范围内。
在一个响应周期内,AE算法需要处理的具体事项是:
- 根据ISP 硬件生成的图像曝光统计数据评估当前图像的曝光质量
- 如果曝光质量需要调整,则根据当前的工作参数和理想曝光目标生成下一帧图像的工作参数
- 将新的工作参数写入各硬件设备,驱动光圈、sensor 快门及增益到达新的位置
AE 算法的主要调控对象一般是光圈、sensor积分时间、sensor增益(包含模拟增益和数字增益)、ISP数字增益这四个参数。
4.2 自动对焦(Auto Focus) -AF
简单来说,就是当物体在分别在远景和近景的时候,对应的成像位置是不同的,需要调整镜头和感光芯片的距离,使得感光芯片上始终可以获得清洗的成像效果。对于手机摄像头模组而言,镜头位置不动,主要是靠马达来带动镜头移动实现。
自动对焦就是相机根据成相的远近,自动对焦。
AF需要摄像头的镜头支持才可以,也就是镜头支持自动变焦的装置才行。
4.3 自动白平衡(Auto White Balance) -AWB
“不管在任何光源下,都能将白色物体还原为白色”,对在特定光源下拍摄时出现的偏色现象,通过加强对应的补色来进行补偿。
手动白平衡是指摄影师把摄像机对准白纸拍摄,这时,白纸充当标准白色,摄像机 需要通过内部自动调整 ,即估计出 红、绿、蓝 色偏色的比例 并做相应的调 整,使拍摄出的画面呈现纯白色。
自动白平衡就是ISP在采集图像帧后,采集关于白平衡的统计信息,进而通过ISP的AWB算法库的处理,使得到的图像和肉眼更为接近。AWB一般由ISP模块处理。自动白平衡(auto white balance,AWB),颜色校正(colorcorrection,CC),3维查找表(three dimension look up table,3dlut)等颜色调整模块 一般都属于ISP的功能范畴。
自动白平衡算法能自动的计算WB gain (R G B通道的白平衡增益),并将其与RGB通道分别相乘后,使受环境光影响的白色还原成纯白色,保证在各个光线条件下,相机成像色彩跟物体真实的色彩保持一致。当场景存在白点时基于自动检测的白点计算WB gain,当场景不存在白点时通过单纯色方法得到WBgain。色适应模块,对白平衡校正的目标进行调节,使白平衡校正后的图像尽可能与人眼感知的外貌一致。色调调整模块,根据喜好调整整体色调。由硬件的统计和软件的策略构成自动白平衡。