传感器与RAW图:CMOS传感器工作原理、Bayer阵列模式、RAW图格式与数据流
各位同学,今天我们来聊聊整个ISP流水线的起点——传感器和RAW图。说白了,没有传感器,后面的一切都是空中楼阁。我做了这么多年ISP,见过太多算法调得天花乱坠,结果传感器选型就翻车的案例。嗯,咱们从最基础的说起。
CMOS传感器工作原理
CMOS传感器,全称是互补金属氧化物半导体图像传感器。现在市面上99%的手机、相机、安防摄像头用的都是它。它的核心原理其实不复杂:光电转换。
每个像素点本质上是一个光电二极管。光子打进来,产生电子-空穴对,电子被收集起来形成电荷。电荷量跟入射光强度成正比。然后通过一个源极跟随器把电荷转换成电压,再经过模数转换器(ADC)变成数字信号。
我个人习惯把CMOS传感器的工作流程拆成四步:
- 复位:清空像素内的残留电荷,准备开始新一帧的曝光。
- 曝光:打开快门(电子快门或机械快门),让光进来,积累电荷。
- 读出:逐行扫描,把每个像素的电压值读出来。
- 转换:ADC把模拟电压转成数字码值,输出RAW数据。
关键指标:满阱容量(Full Well Capacity)决定了传感器能存多少电子,直接影响动态范围。转换增益(Conversion Gain)决定了每个电子能产生多少电压,直接影响信噪比。这两个参数是传感器选型的核心。
我在项目中遇到过一个问题:某款传感器标称动态范围80dB,但实际暗光下噪点特别多。后来一查,是它的转换增益设置得太低,导致读出噪声被放大了。所以看规格书不能只看峰值,要看实际工作条件下的表现。
Bayer阵列模式
CMOS传感器只能感知光的强度,分不清颜色。那彩色图像怎么来的?答案是:在像素表面覆盖彩色滤光片阵列(CFA)。最经典的就是Bayer阵列。
Bayer阵列的排列方式是:RGGB。也就是一个红色像素、两个绿色像素、一个蓝色像素,组成一个2x2的单元。为什么绿色有两个?因为人眼对绿色最敏感,多分配绿色像素可以提升视觉分辨率。
| 像素位置 | 颜色 | 占比 | 作用 |
|---|---|---|---|
| (0,0) | R | 25% | 红色通道采样 |
| (0,1) | G | 25% | 绿色通道采样 |
| (1,0) | G | 25% | 绿色通道采样 |
| (1,1) | B | 25% | 蓝色通道采样 |
你想想看,每个像素只记录一种颜色,那最终要得到全彩图像,就得靠后面的去马赛克(Demosaic)算法来插值补齐。这也是ISP流水线里计算量最大的模块之一。
我的经验:Bayer阵列的相位对齐非常关键。如果滤光片和像素位置有偏移,会出现颜色混叠,后期怎么调都调不回来。我曾经在产线上遇到过一批传感器,Bayer偏移了半个像素,结果整个画面边缘全是伪色。最后只能降级处理,损失不小。
除了标准的Bayer,现在还有一些变种:
- Quad Bayer:4x4单元,每个颜色4个像素,用于高像素手机传感器。
- RGBW:加入白色像素,提升暗光灵敏度。
- RYYB:用黄色像素替换绿色像素,进光量更大,华为用过。
但不管怎么变,核心思想没变:用稀疏采样+插值重建全彩图像。
RAW图格式与数据流
传感器直接输出的数据就是RAW图。它没有经过任何ISP处理,是最原始的数据。RAW图的格式取决于传感器的ADC位数和Bayer排列。
常见的RAW格式:
- 10-bit RAW:每个像素10位数据,常见于手机传感器。
- 12-bit RAW:每个像素12位,动态范围更高,常见于相机和安防。
- 14-bit RAW:专业相机用,数据量大,但后期空间大。
数据存储时,通常按Bayer模式排列。比如一个1920x1080的传感器,输出就是1920x1080的灰度数据,每个像素对应一个颜色通道。你看到的不是彩色图像,而是一张灰蒙蒙的图——这就是RAW。
注意:RAW图不是标准的图像格式,不能直接用图片查看器打开。它需要配合传感器的配置信息(黑电平、增益、Bayer模式等)才能正确解析。我见过有人直接把RAW当成灰度图去训练AI模型,结果模型学到的全是错误的颜色映射。
数据流是怎么走的?我画个图你就明白了。
RAW数据从传感器出来后,通常走MIPI接口(移动行业处理器接口)传输到ISP芯片。MIPI的速率决定了帧率上限。比如一个1200万像素的传感器,12-bit RAW,30fps,需要的带宽大约是:
12M × 12bit × 30fps = 4.32 Gbps
这还没算开销。所以MIPI通常用4-lane或8-lane来分摊带宽。我建议你在选型时,先算清楚带宽,不然帧率上不去,后面调算法都是白费。
RAW图的关键参数
| 参数 | 含义 | 典型值 | 影响 |
|---|---|---|---|
| 黑电平 | 无光输入时的输出码值 | 64(10-bit) | 影响暗部细节和偏色 |
| 饱和电平 | 像素满阱时的输出码值 | 1023(10-bit) | 决定高光截止点 |
| 增益 | 模拟/数字放大倍数 | 1x ~ 64x | 影响亮度和噪声 |
| 行时间 | 每行像素的读出时间 | 10~30 μs | 影响帧率和卷帘快门效应 |
避坑指南:我曾经在调试一款传感器时,发现暗光下画面偏绿。查了半天,原来是黑电平校准没做对。每个传感器的黑电平都不一样,甚至同一颗传感器不同温度下也会漂。所以ISP流水线的第一步,一定是做黑电平校正(BLC)。