2. 图像传感器基础

图像传感器,说白了就是3A算法的「眼睛」。你算法再牛,传感器给的数据不准,后面全是白搭。我刚开始接触高通平台时,就吃过这个亏——AWB怎么调都偏色,最后发现是传感器的一根配置线没拉对。

这一章,我们就把传感器的工作原理掰开揉碎。重点看三个东西:Bayer阵列怎么排布、曝光和增益怎么控制、帧率和行时间怎么算。

2.1 Bayer阵列:彩色世界的起点

传感器本身是「色盲」的。它只能感知光的强度,分不清红绿蓝。那彩色照片怎么来的?

答案是在每个像素上覆盖一个滤光片。最常见的排列方式就是Bayer阵列。它用RGGB(红绿绿蓝)的2x2单元重复铺满整个传感器。

为什么绿色有两个?

因为人眼对绿色最敏感。多一个绿色像素,能更好地模拟人眼的亮度感知。这也是Bayer阵列能沿用几十年的核心原因。

我在项目中遇到过一个问题:某款传感器在低照度下绿色通道噪声特别大。排查下来,是Bayer排列的G通道增益设置和R/B不一致导致的。嗯,这里要注意——不同通道的增益要独立校准。

Bayer阵列的常见变体:

  • RGGB:标准Bayer,最常用
  • RCCB:两个绿色换成Clear(透明),提升进光量,但需要算法补偿
  • RYYB:黄色代替绿色,华为P系列用过,但AWB调起来很头疼

你想想看,如果传感器输出的是RAW10格式,每个像素10bit。Bayer阵列下,相邻四个像素才组成一个彩色像素。所以ISP里要做demosaic(去马赛克),把缺失的颜色插值出来。

个人习惯:调试3A时,我一般先看RAW域的Bayer数据。如果RAW域就有偏色,那后面ISP怎么调都救不回来。这是排查问题的第一道关口。

2.2 曝光与增益:控制进光量

曝光,就是控制传感器收集光子的时间。增益,就是把收集到的电荷信号放大。

这两个参数直接影响AE的收敛结果。我们一个一个说。

2.2.1 曝光时间

曝光时间也叫快门速度。单位是行(line)或者毫秒(ms)。

传感器曝光有两种模式:

  • 滚动快门(Rolling Shutter):逐行曝光,每行开始和结束时间不同。成本低,但拍快速运动物体会「果冻效应」。
  • 全局快门(Global Shutter):所有像素同时曝光。适合工业相机,但传感器面积大,手机里很少用。

手机摄像头基本都是滚动快门。那曝光时间怎么算?

举个例子:传感器输出30fps,一帧时间是33.33ms。如果曝光时间设置成20ms,那剩下的13.33ms就是读出时间。读出时间内传感器不能曝光,否则画面会花。

我曾经踩过的坑:把曝光时间设得超过帧周期。结果画面出现「半黑半亮」的奇怪现象。后来才明白,曝光时间 + 读出时间必须 ≤ 帧周期。否则传感器会强制截断曝光,导致亮度不均。

2.2.2 模拟增益与数字增益

增益分两种:

类型 作用位置 噪声影响 典型范围
模拟增益 像素读出前 放大信号同时放大噪声 1x ~ 16x
数字增益 ADC转换后 放大噪声更多 1x ~ 4x

我个人习惯:优先用模拟增益,实在不够了再补数字增益。因为数字增益会把ADC的量化噪声也放大,画面噪点会明显增加。

高通平台里,AE算法会先调曝光时间,曝光时间到上限了(比如30ms),再调模拟增益。模拟增益到上限了,才调数字增益。这个优先级顺序是固定的,但你可以通过tuning参数调整阈值。

避坑指南:有些传感器在模拟增益超过4x后,线性度会变差。这时候你测的亮度值和实际进光量不成正比,AE会来回震荡。我建议在sensor driver里把模拟增益的线性区间标出来,给AE算法做约束。

2.3 帧率与行时间控制

帧率决定了视频的流畅度,行时间决定了传感器的读出速度。这两个参数是联动的。

2.3.1 帧率怎么算

帧率 = 1 / 帧周期。帧周期 = VTS × 行时间。

其中VTS是垂直总行数(包括有效行和消隐行)。

举个例子:

  • 传感器分辨率:1920x1080
  • VTS = 1125(1080有效行 + 45行消隐)
  • 行时间 = 20μs
  • 帧周期 = 1125 × 20μs = 22.5ms
  • 帧率 ≈ 44.4fps

你看,想提高帧率,要么减少VTS(减少消隐行),要么缩短行时间(提高传感器主频)。

2.3.2 行时间的影响

行时间 = 一行像素的读出时间。它受传感器ADC速度和MIPI带宽限制。

行时间太短,ADC来不及转换,画面会出现竖条纹。行时间太长,帧率上不去,视频会卡顿。

我在调试一款48M传感器时,发现行时间设到12μs以下,画面就开始出现固定模式噪声。后来查datasheet,发现该传感器的ADC最小转换时间就是12μs。嗯,这里要注意——行时间不能低于传感器规格书里的最小值。

实用技巧:高通平台里,行时间是通过调整PLL分频和像素时钟来控制的。你可以在sensor driver的sensor_output结构体里找到line_length_pck和frame_length_lines这两个参数。前者控制行时间,后者控制VTS。

2.4 知识结构总览

下面这张图把本章的核心逻辑串起来了。你可以把它当作调试时的「地图」。

图像传感器核心知识体系 Bayer阵列 曝光与增益 帧率与行时间 RGGB / RCCB / RYYB Demosaic插值 RAW域调试 曝光时间控制 模拟增益 vs 数字增益 AE优先级策略 VTS × 行时间 ADC速度限制 MIPI带宽约束 三者联动:Bayer决定色彩基础 → 曝光增益控制亮度 → 帧率行时间决定时序

2.5 本章小结

传感器是3A算法的根基。Bayer阵列决定了你看到的颜色,曝光和增益决定了亮度,帧率和行时间决定了时序。这三个东西互相牵制,调一个参数往往会影响另外两个。

我个人建议:拿到一款新传感器,先读datasheet里的这几项——Bayer排列、最小行时间、最大曝光时间、模拟增益线性区间。把这些记在脑子里,后面调3A会少走很多弯路。

最后提醒一句:别迷信「通用配置」。每款传感器的特性都不一样。我在高通平台上调过十几款sensor,没有哪两款是完全一样的tuning参数。老老实实按datasheet来,比什么都强。