1. RAW域基础与3A概述
各位同学好,我是老周。在ISP领域摸爬滚打了十几年,今天咱们来聊聊RAW域和3A的那些事。
说实话,我刚入行那会儿,对RAW域的理解也仅限于“传感器出来的原始数据”。直到有一次调试一个低光场景,发现AWB怎么调都偏色,最后追根溯源,问题出在RAW域的黑电平校正上。从那以后,我养成了一个习惯——任何ISP问题,先查RAW域。
1.1 RAW图像格式详解
RAW图像是什么?说白了,就是图像传感器直接输出的、未经任何处理的原始数据。它记录了每个像素点的光电转换结果,通常以12bit或14bit的精度存储。
你想想看,我们平时看到的JPEG或PNG,都是经过白平衡、去马赛克、伽马校正等一系列处理后的成品。而RAW,就是那个“毛坯房”。
RAW的核心特征:
- 线性数据:像素值与场景亮度呈线性关系
- 高位深:通常10-14bit,远高于8bit的JPEG
- 未压缩或无损压缩:保留全部传感器信息
- 包含元数据:ISO、快门速度、增益等拍摄参数
我记得有一次调试一个手机项目,客户抱怨夜景模式噪点太多。我一看JPEG,确实惨不忍睹。但当我拿到RAW数据后,发现很多细节其实还在,只是被后续的降噪和压缩给抹掉了。这就是RAW的价值——它给了你最大的后期处理空间。
1.2 Bayer模式与CFA
图像传感器有个天生的缺陷:它只能感知光的强度,分辨不了颜色。那彩色图像是怎么来的?靠的就是CFA(Color Filter Array,彩色滤光片阵列)。
最常见的CFA模式就是Bayer模式,由Bryce Bayer在1976年发明。它的排列方式很简单:
| 位置 | R | G | B |
|---|---|---|---|
| 第1行 | R | G | R |
| 第2行 | G | B | G |
| 第3行 | R | G | R |
看到没?绿色像素占了50%,红色和蓝色各占25%。为什么?因为人眼对绿色最敏感,所以传感器也给了绿色更多“投票权”。
小知识:除了标准的Bayer RGGB,还有RGBW、RYYB等变种。华为的RYYB模式就是用黄色像素替换绿色像素,进光量提升了40%,但代价是色彩还原更难了。我在项目中遇到过RYYB的AWB调试,那叫一个头疼。
每个像素只能记录一种颜色,那完整的RGB图像怎么来?这就需要去马赛克(Demosaic)算法了。简单说,就是通过周围像素插值,把缺失的颜色信息补全。但这是后话,咱们在RAW域阶段,数据还是Bayer格式的。
1.3 3A(AE/AWB/AF)核心概念
3A是ISP流水线的三大支柱:AE(自动曝光)、AWB(自动白平衡)、AF(自动对焦)。它们共同决定了图像的亮暗、色彩和清晰度。
AE(自动曝光)
AE的目标很简单:让图像亮度适中。但实现起来并不容易。它需要根据场景亮度,调整曝光时间、模拟增益、数字增益,甚至光圈大小。
我习惯把AE分成三个阶段:
- 粗调:根据环境亮度估算初始曝光参数
- 精调:基于直方图或亮度统计,微调参数
- 稳定:防止曝光闪烁,加入迟滞和滤波
避坑指南:我曾经在一个项目中,AE在室内灯光下频繁跳变。查了两天才发现,是50Hz工频闪烁导致的。解决方案很简单——曝光时间设为20ms的整数倍。嗯,这种坑踩过一次就记住了。
AWB(自动白平衡)
AWB负责校正色温,让白色物体在任何光源下都呈现白色。它的核心是估计光源色温,然后计算R/G/B增益。
常见的AWB算法有:
- 灰度世界法:假设场景平均色是灰色
- 完美反射法:假设最亮像素是白色
- 色温曲线法:基于色温查找表
说实话,没有一种算法是万能的。我在项目中通常采用多算法融合策略,根据场景置信度动态切换。
AF(自动对焦)
AF让镜头移动到合适位置,使目标清晰成像。在RAW域,AF主要依赖对比度检测(CDAF)或相位检测(PDAF)。
CDAF的原理很简单:移动镜头,找图像对比度最大的位置。但缺点是慢,需要来回搜索。PDAF则通过传感器上的专用相位检测像素,一次计算就能知道对焦方向,快得多。
你想想看,现在的手机为什么对焦那么快?就是因为用了PDAF。但PDAF也有代价——它会占用部分像素,影响图像质量。所以很多方案是PDAF粗调 + CDAF精调的组合。
1.4 ISP流水线中的RAW域位置
ISP流水线通常分为三个阶段:RAW域、RGB域、YUV域。RAW域是第一步,也是最关键的一步。
下面这张图展示了ISP流水线的整体架构,以及RAW域所处的环节:
从图中可以看到,3A统计是在RAW域完成的。为什么?因为RAW数据是线性的,没有经过伽马校正,统计结果更准确。如果放到RGB域或YUV域再做统计,数据已经被非线性变换污染了,精度会大打折扣。
我的经验:3A统计的窗口选择很有讲究。我习惯在RAW域划分多个统计窗口,每个窗口独立计算亮度均值和R/G/B比值。这样既能做全局AE,又能做局部AWB。有一次做人脸优先的AE,就是靠中心窗口加权实现的。