2. 传统ISP Pipeline详解:从RAW图到YUV的经典流程
大家好,我是老高。这一章咱们聊聊传统ISP的经典流程。说白了,就是手机或者相机里的感光元件(Sensor)拍出来的RAW图,怎么一步步变成我们肉眼看着舒服的YUV图像。
很多人觉得这玩意儿过时了,AI ISP才是未来。但我不这么看。你想想看,AI ISP再怎么厉害,它也得知道传统ISP在干什么,才能去替代或者增强某个模块。我当年刚入行的时候,就是靠啃透这条Pipeline,才在后续的AI算法落地中少走了很多弯路。
2.1 黑电平校正(Black Level Correction)
先说说黑电平。Sensor在完全无光的情况下,理论上应该输出0。但实际不是,它会有一个底噪偏移,比如64或者128。这个偏移就是黑电平。
为什么要校正?很简单。如果不减掉这个偏移,你拍出来的黑色就不是纯黑,而是发灰的。而且这个偏移会吃掉你暗部的动态范围。
校正公式很简单:
// 伪代码示例
pixel_out = pixel_raw - black_level;
if (pixel_out < 0) pixel_out = 0;
嗯,这里要注意。有些Sensor的Bayer通道(R, Gr, Gb, B)的黑电平是不一样的。你不能用一个值去减所有通道,否则会出现色偏。
| 通道 | 典型黑电平值(12bit RAW) | 说明 |
|---|---|---|
| R | 64 | 红色通道 |
| Gr | 64 | 绿色通道(与R同行) |
| Gb | 66 | 绿色通道(与B同行) |
| B | 64 | 蓝色通道 |
2.2 去噪(Denoise)
去噪是ISP里最头疼的模块之一。为什么?因为去噪和细节是死对头。去噪狠了,细节没了;去噪轻了,噪点还在。
传统ISP里,去噪主要分两步:
- 空域去噪: 比如双边滤波、非局部均值。我早期做项目时,特别喜欢用双边滤波,因为它能保边。但问题是,它在高ISO下容易产生“油画感”。
- 时域去噪: 利用前后帧的信息做融合。这个对静态场景效果极好,但运动场景容易拖影。
去噪的位置也很讲究。有些架构把去噪放在黑电平校正之后、去马赛克之前。因为RAW域的噪声模型相对简单,是高斯+泊松分布。但也有一些架构把去噪放在去马赛克之后,因为RGB域的噪声更容易被人眼感知。
2.3 去马赛克(Demosaic)
Sensor的每个像素只能感知一种颜色(R, G, B之一),这就是Bayer阵列。去马赛克就是通过插值,把每个像素缺失的另外两种颜色算出来。
最简单的办法是双线性插值。但效果嘛……边缘全是锯齿和伪色。我建议至少用基于边缘导向的插值算法。
// 边缘导向插值思路(简化版)
if (水平梯度 < 垂直梯度) {
// 沿水平方向插值
G = (G_left + G_right) / 2;
} else {
// 沿垂直方向插值
G = (G_top + G_bottom) / 2;
}
去马赛克做得好不好,直接决定了后面白平衡和色彩校正的难度。如果去马赛克产生了大量伪色,白平衡再怎么调也救不回来。
2.4 白平衡(White Balance, AWB)
白平衡的目标很简单:让白色物体在任何光源下都看起来是白的。但实现起来很复杂。
传统AWB算法一般分两步:
- 色温估计: 通过统计图像中的“灰点”来估计当前光源色温。
- 增益调整: 对R和B通道施加不同的增益,让灰点回归中性。
我个人习惯在去马赛克之后、Gamma校正之前做白平衡。这样既能保证色彩准确性,又能利用到完整的RGB信息。
2.5 Gamma校正(Gamma Correction)
Gamma校正有两个目的:
- 适配显示设备: CRT显示器有天然的Gamma特性,LCD显示器为了兼容也保留了。
- 量化优化: 人眼对暗部变化更敏感。Gamma校正相当于把更多的码字分配给暗部,减少暗部量化噪声。
标准Gamma曲线是:
V_out = V_in ^ (1/2.2)
但实际工程中,我们很少直接用纯幂函数。因为它在暗部斜率太大,会放大暗部噪声。我常用的做法是加一个线性段:
// 带线性段的Gamma校正
if (V_in < threshold) {
V_out = V_in * slope;
} else {
V_out = a * V_in ^ (1/2.2) + b;
}
2.6 其他关键模块
除了上面这几个核心模块,传统ISP Pipeline里还有几个“配角”,但同样重要:
| 模块 | 作用 | 我的评价 |
|---|---|---|
| 镜头阴影校正(LSC) | 补偿镜头边缘亮度衰减 | 不做的话,四角发暗,很丑 |
| 坏点校正(DPC) | 修复Sensor上的死点/亮点 | 必须做,否则画面有固定噪点 |
| 色彩校正矩阵(CCM) | 将Sensor RGB转换到标准色彩空间 | 决定了色彩还原的准确性 |
| 色调映射(Tone Mapping) | 压缩高动态范围到显示范围 | HDR场景必备,容易做过头 |
好了,这一章的内容就到这里。传统ISP Pipeline虽然看起来模块很多,但每个模块都有它存在的物理意义。你只有理解了这些“为什么”,才能在后续的AI ISP混合架构中,知道哪些模块可以用AI替代,哪些模块必须保留传统算法。