图像质量基础:RAW图、Bayer格式、ISP Pipeline简介
做图像算法调优,有个坎儿你早晚得迈过去——理解图像传感器到底输出了什么。
我见过不少刚入行的工程师,拿着RGB图像就开始调3A参数。调了半天效果不对,最后发现连原始数据长什么样都没看过。嗯,这其实是个大坑。
这一节,咱们把地基打牢。从RAW图、Bayer格式,到ISP Pipeline,一条线捋清楚。
1. RAW图:传感器最诚实的输出
先问个问题:你手机拍完一张照片,存成JPEG。这个JPEG,跟传感器看到的东西,差了多少?
答案是——差了一个银河系。
传感器输出的原始数据,叫RAW图。它有几个关键特征:
- 线性数据:像素值和光强成正比。没有Gamma校正,没有色调映射。
- 高位深:通常是10bit、12bit甚至14bit。不像8bit JPEG只有256个灰度级。
- 未经过任何美化:没有白平衡、没有降噪、没有锐化。说白了,就是传感器最诚实的记录。
核心观点:3A算法(自动对焦、自动曝光、自动白平衡)的输入,必须是RAW图。用JPEG做3A,就像戴着墨镜看颜色——不准。
我在项目中遇到过一件事:某款手机在暗光下对焦总是慢半拍。排查了很久,发现算法用的是YUV数据做对焦评价。换成RAW域的相位差数据后,对焦速度直接翻倍。这就是数据源选对的重要性。
2. Bayer格式:为什么是RGGB?
传感器上的每个像素,其实只能感知光的强度,分不清颜色。那彩色照片怎么来的?
答案是在像素表面覆盖一层彩色滤光片阵列(CFA)。最经典的,就是Bayer格式。
Bayer阵列的排列方式:
| R | G | R | G |
|---|---|---|---|
| G | B | G | B |
| R | G | R | G |
| G | B | G | B |
你注意看,绿色像素占了50%,红色和蓝色各占25%。为什么?
因为人眼对绿色最敏感。绿色通道的分辨率直接决定了画面的细节感。这个设计,说白了就是仿生学——模拟人眼视锥细胞的分布密度。
实战技巧:调自动白平衡时,我建议你重点关注Bayer中的G通道。因为G通道的信噪比最高,用它做色温估计,稳定性最好。
Bayer RAW图在内存里的排布,就是一个二维数组。每个像素只存一个颜色值。比如一个1920x1080的Bayer RAW,实际数据量就是1920x1080个像素值,每个值12bit。
你想想看,如果直接显示这个图,它看起来是灰蒙蒙的、带网格纹理的。这就是所谓的“马赛克图”。
3. ISP Pipeline:从RAW到人眼喜欢的样子
RAW图不能直接用。得经过一系列处理,才能变成我们看到的鲜艳照片。这个处理链条,就是ISP Pipeline(图像信号处理流水线)。
我画了一张图,帮你把整个流程串起来:
这个流程里,有几个关键点你得记住:
- 黑电平校正:传感器有暗电流,即使全黑也有非零输出。得减掉这个底噪。
- 去马赛克:把Bayer格式插值成完整的RGB图。插值算法好坏,直接影响边缘和细节。
- 白平衡:调整R/G/B增益,让白色物体在不同光源下都呈现白色。这就是咱们课程的核心之一。
- Gamma校正:把线性数据映射到人眼感知的亮度空间。说白了,就是让暗部细节更明显。
避坑指南:我曾经在调试自动曝光时,直接从Gamma校正后的数据里取亮度统计。结果曝光总是偏暗。后来才发现,Gamma已经改变了亮度映射关系。正确的做法是在线性域(Gamma之前)做曝光统计。
4. 为什么3A算法必须理解这些?
我直接给你列个对照表,你就明白了:
| 3A模块 | 依赖的数据 | 常见坑点 |
|---|---|---|
| 自动曝光(AE) | RAW域亮度直方图 | 用Gamma后数据会导致曝光不准 |
| 自动白平衡(AWB) | 去马赛克后的RGB统计 | Bayer格式下直接统计会引入网格噪声 |
| 自动对焦(AF) | RAW域相位差或YUV对比度 | 不同ISP阶段的对焦评价函数差异很大 |
你想想看,如果不懂Bayer格式,你连白平衡的R/G增益该加在哪个通道上都不清楚。如果不懂ISP Pipeline,你都不知道曝光统计应该在哪个环节取数据。
所以,这一节虽然基础,但它是后面所有调优工作的前提。
个人习惯:我每次接手一个新平台的ISP调试,第一件事就是抓一帧RAW图,用工具打开看看。看黑电平值、看Bayer排列、看有没有坏点。这些信息,比看任何文档都来得直接。