1. RAW域基础
各位同学好,我是老周。做图像信号处理这行十几年了,今天咱们聊聊RAW域的基础。说实话,很多工程师做了好几年ISP,对RAW的理解还停留在“就是原始数据”这个层面。但你要真想把图像质量调好,RAW域的这些细节,一个都绕不过去。
1.1 什么是RAW图像?
RAW图像,说白了就是传感器直接输出的“毛坯房”数据。它没经过任何美化,没做白平衡,没做去噪,甚至连颜色都没有。你想想看,一个像素点只记录了一个通道的亮度值——要么是R,要么是G,要么是B。
为什么这么设计?因为传感器本身是色盲的。它只能感知光的强度,分辨不出颜色。那颜色怎么来的?靠的是CFA(Color Filter Array),也就是颜色滤波阵列。
核心概念:RAW图像 = 传感器原始电荷信号 → ADC量化后的数字值。每个像素只包含一种颜色分量。
1.2 Bayer模式与CFA
最常见的CFA就是Bayer模式。它用2x2的单元重复排列:一个R,两个G,一个B。为什么G有两个?因为人眼对绿色最敏感,所以传感器给绿色通道分配了更多像素。
我记得刚入行那会儿,有个项目用了非Bayer的CFA排列,比如RGBW或者RYYB。当时调试起来真是头疼,因为传统的去马赛克算法全得重写。所以,除非你有特殊需求,否则老老实实用标准Bayer模式,能省掉80%的麻烦。
| CFA类型 | 排列方式 | 常见应用 | 特点 |
|---|---|---|---|
| 标准Bayer | RGGB | 绝大多数手机/相机 | 绿色通道双倍采样,符合人眼特性 |
| RGBW | R+G+B+W | 低光场景 | 增加白色像素提升进光量,但分辨率会下降 |
| RYYB | R+Y+Y+B | 华为部分机型 | 黄色替代绿色,进光量提升约40%,但偏色难调 |
我的经验:调试Bayer模式时,建议先用纯色图卡验证每个通道的响应一致性。我曾经遇到过一颗传感器,G通道左右两侧的增益差了5%,结果拍出来的照片中间绿、两边紫,查了三天才发现是Bayer排列方向搞反了。
1.3 RAW数据的存储结构
RAW数据是线性存储的。每个像素的bit深度决定了它的动态范围。常见的深度有10bit、12bit、14bit。你可能会问:为什么不用8bit?因为8bit只有256个灰度级,对于传感器来说,信噪比和动态范围根本不够用。
举个例子:一个12bit的RAW,每个像素可以表示0~4095的灰度值。这意味着它能记录更暗的细节和更亮的高光。我做过一个对比测试:同一场景,10bit RAW的天空出现了明显的色阶断层,而12bit的就平滑得多。
| bit深度 | 灰度级数 | 动态范围(理论) | 常见场景 |
|---|---|---|---|
| 10bit | 1024 | 约60dB | 早期手机、低端摄像头 |
| 12bit | 4096 | 约72dB | 主流手机、微单 |
| 14bit | 16384 | 约84dB | 专业相机、工业检测 |
注意:RAW数据在存储时,通常不会直接按bit对齐。比如10bit数据,为了读写效率,很多传感器会把它pack成16bit或8bit对齐。你读RAW文件时,一定要搞清楚它的packing方式,否则解析出来的数据全是乱的。
1.4 黑电平的物理意义
黑电平,英文叫Black Level。它代表传感器在完全无光(镜头盖盖住)情况下的输出值。理论上应该是0,但实际上不是。因为传感器本身有暗电流,即使没有光,也会产生微弱的电荷。
我习惯把黑电平理解为“传感器的零偏”。这个值如果不校准,你拍出来的黑色就不是纯黑,而是发灰的。更严重的是,黑电平偏移会影响后续所有处理——白平衡、去噪、色彩校正,全都会跟着偏。
举个例子:一个12bit的传感器,黑电平是64。那么你读到的像素值如果是64,它对应的真实亮度应该是0。如果你不做黑电平减法,直接拿64去做白平衡,那暗部的颜色就会偏绿或偏紫。
关键公式:校正后的像素值 = RAW值 - 黑电平值
1.5 白平衡的物理意义
白平衡,很多人以为只是“让白色看起来是白色”。其实它的本质是:在不同光源下,恢复物体真实的反射率比例。
你想想看,同一张白纸,在日光灯下偏蓝,在白炽灯下偏黄。传感器记录到的R、G、B值是不一样的。白平衡要做的,就是给每个通道乘一个增益系数,让R:G:B的比例恢复到标准光源下的状态。
我记得有一次调试一个车载摄像头项目,客户反馈说“白天拍出来的树是绿色的,晚上拍出来就变成蓝色了”。我一看RAW数据,发现是AWB算法在低光下把Gain_R拉得太高,导致整个画面偏蓝。后来我手动限制了Gain_R的最大值,问题就解决了。
| 光源类型 | 色温(K) | R/G增益比 | B/G增益比 |
|---|---|---|---|
| 白炽灯 | 2800 | 1.8~2.2 | 1.0~1.2 |
| 日光 | 5500 | 1.0~1.2 | 1.0~1.2 |
| 阴天 | 6500 | 0.8~1.0 | 1.4~1.8 |
避坑指南:我曾经在调试白平衡时,发现某个通道的增益超过了4.0。结果画面暗部噪声被放大了好几倍,全是彩色噪点。后来我加了一个增益上限保护,超过3.0就改用相邻通道插值。效果好了很多。
1.6 本章知识结构图
下面这张图,我把本章的核心知识点串起来了。你可以把它当作一张“RAW域基础地图”,以后遇到问题,先看这张图定位。
1.7 本章小结
RAW域是ISP管线的起点,也是决定图像质量的天花板。你后面做的所有处理——去噪、锐化、色彩校正——都是在RAW数据的基础上进行的。如果RAW数据本身就有问题,后面再怎么调也是白搭。
我个人建议,刚接触ISP的同学,先把本章的四个概念吃透:Bayer模式、bit深度、黑电平、白平衡。不用急着去调算法,先把RAW数据读出来,看看每个通道的值,算算黑电平,试试手动白平衡。等你对RAW数据有了手感,再往下走会顺畅很多。