1. ISP基础与移动端成像链路:从光子到数字图像
各位同学,咱们今天聊点实在的。ISP(Image Signal Processor)这玩意儿,说白了就是手机相机里的“暗房”。你按下快门那一瞬间,传感器捕捉到的只是一堆杂乱的电荷信号,离一张能发朋友圈的照片还差着十万八千里。中间这趟“从光子到数字图像”的旅程,就是ISP Pipeline要干的事。
我入行那会儿,最早接触的是传统安防摄像头的ISP,后来转到移动端,才发现手机上的ISP调优完全是另一个世界——功耗、面积、实时性,每样都是紧箍咒。但不管平台怎么变,Pipeline的骨架是相通的。今天咱们就把这条链路从头到尾捋一遍。
1.1 成像链路的起点:光子如何变成电子
一切从光开始。场景里的光子穿过镜头,经过滤光片,最后砸在图像传感器上。传感器上的每个像素其实就是一个光电二极管,它把光子转换成电子——这个过程叫光电转换。
这里有个关键参数:量子效率(QE)。它衡量的是“打进去多少个光子,能出来多少个电子”。
| 参数 | 含义 | 典型值(移动端) |
|---|---|---|
| 量子效率(QE) | 光子转电子的比例 | 50% - 70% |
| 满阱容量(FWC) | 一个像素最多能装多少电子 | 3000 - 10000 e⁻ |
| 读出噪声 | 读出电路引入的底噪 | 1 - 3 e⁻ rms |
1.2 ISP Pipeline的完整流程
传感器输出的原始数据叫RAW图——每个像素只记录一种颜色(R/G/B),按照Bayer模式排列。这玩意儿人眼没法看,必须经过ISP Pipeline处理。下面这张图是我自己画的Pipeline框架,你一看就明白。
1.3 关键模块深度拆解
1.3.1 黑电平校正(BLC)
传感器在没有光照时,理论上输出应该是0。但实际电路会有暗电流,导致输出不为0。黑电平校正就是把这个底数减掉。我见过不少团队在BLC上翻车——校正值设得太狠,暗部细节全丢了;设得太轻,画面发灰。嗯,这里要注意:BLC参数最好针对不同增益和温度做分段标定。
1.3.2 去马赛克(Demosaic)
RAW图每个像素只有一种颜色,去马赛克就是通过插值算法把缺失的另外两个颜色补回来。最简单的双线性插值速度快但边缘有锯齿,复杂的自适应插值效果好但计算量大。移动端怎么选?我个人习惯是:预览用快速插值,拍照用高质量插值,中间通过帧率切换。
1.3.3 白平衡(AWB)
人眼有色彩恒常性——不管在日光灯下还是烛光下,看白纸都觉得是白的。但传感器没这本事,它老老实实记录光谱。白平衡算法要估计当前光源色温,然后调整R/G/B增益,让中性色还原为中性。
1.3.4 Gamma校正
人眼对暗部变化的敏感度远高于亮部。Gamma校正本质上是一个非线性映射,把传感器记录的线性光信号映射到人眼感知更均匀的空间。标准Gamma曲线是2.2,但移动端为了保留暗部细节,经常用分段Gamma或者自定义映射表。
1.4 移动端ISP的特殊约束
跟PC或单反上的ISP不同,移动端ISP有三大紧箍咒:
- 功耗限制: ISP处理一帧图像,功耗预算通常只有几十毫瓦。跑复杂的深度学习去马赛克?想都别想。
- 实时性要求: 预览要30fps,录像要60fps,每帧处理时间被死死卡在16ms甚至8ms以内。
- 面积成本: ISP硬件模块占用的芯片面积直接决定成本,每个加法器、每行Line Buffer都要精打细算。
| 约束维度 | 移动端典型值 | 对比:单反/专业相机 |
|---|---|---|
| ISP功耗 | 30 - 80 mW | 1 - 5 W |
| 处理延迟 | < 16 ms (60fps) | > 50 ms |
| Line Buffer | 4 - 16 行 | 全帧缓存 |
| 算法复杂度 | 定点、查表为主 | 浮点、迭代算法 |
1.5 从RAW到sRGB:色彩空间的转换
传感器捕捉到的颜色是设备相关的——不同传感器对同一颜色的响应不一样。ISP Pipeline的最后一步,就是把设备相关的色彩空间转换到标准化的sRGB空间。这中间涉及两个矩阵:
- CCM(色彩校正矩阵): 3x3矩阵,把传感器RGB映射到标准RGB。这个矩阵通常通过拍摄色卡标定得到。
- Gamma + 色调映射: 把线性光信号映射到sRGB的非线性空间,同时做动态范围压缩。
你想想看,如果CCM矩阵不准,拍出来的红色偏品、绿色偏黄,后期怎么调都救不回来。所以我在项目中,每次换传感器型号,第一件事就是重新标定CCM——这个懒不能偷。
1.6 本章小结
从光子打到传感器,到最终输出一张sRGB图像,中间经过的每一个模块都有它的物理意义和工程权衡。移动端ISP不是简单地把算法堆上去,而是要理解每个模块在功耗、延迟、面积约束下的实现边界。