RAW图基础:Bayer阵列、RAW格式与关键校正

各位同学,今天我们来聊聊ISP流水线的起点——RAW图。说白了,RAW图就是传感器最原始的“底片”,后面所有的处理都从这里开始。我做了这么多年ISP,发现很多问题追根溯源,其实都是RAW阶段没处理好。

Bayer阵列模式:传感器的“像素棋盘”

传感器上的每个像素只能感知光的强度,分不清颜色。那彩色照片怎么来的?靠的是在像素表面覆盖一层彩色滤光片阵列,也就是Bayer阵列。最常见的模式就是RGGB。

核心概念:每个2x2的像素单元里,有1个红色(R)、2个绿色(G)、1个蓝色(B)像素。人眼对绿色最敏感,所以绿色采样率是红蓝的两倍。

我刚开始接触这个的时候,总觉得RGGB太浪费——明明有四个像素,却只采三种颜色。后来才明白,这是人类视觉系统的妥协方案。

常见Bayer模式对比

模式 排列方式 典型应用 特点
RGGB R/G/G/B 绝大多数手机、相机 标准模式,兼容性好
RCCB R/C/C/B 安防、夜视 两个C(透明)像素进光量更大,暗光性能好
RYYB R/Y/Y/B 华为部分机型 黄色滤光片透光率更高,但偏色校正复杂

我在项目中遇到过RYYB的坑。有一次调试华为平台的摄像头,发现拍出来的照片总是偏黄。查了半天,原来是RYYB的demosaic算法没适配好。说白了,黄色像素同时响应红光和绿光,传统算法直接套用会出问题。

避坑指南:我曾经接手过一个项目,客户把RGGB的ISP参数直接套在RCCB传感器上。结果暗光下噪点爆炸,亮光下颜色全偏。记住:换了Bayer模式,ISP流水线里的黑电平、增益、demosaic模块都得重新调。

RAW10/RAW12/RAW16:位深度的选择

传感器输出的原始数据,每个像素用多少比特来表示,这就是位深度。常见的就三种:RAW10、RAW12、RAW16。

你想想看,位深度决定了什么?动态范围和量化精度。位数越多,能区分的亮度等级就越多。

格式 每像素位数 亮度等级 典型场景
RAW10 10 bit 1024 低端手机、视频预览
RAW12 12 bit 4096 主流手机、安防
RAW16 16 bit 65536 专业相机、医疗影像

我个人习惯,做手机ISP项目时至少用RAW12。为什么?因为后面的黑电平校正、增益、去噪都会损失位深,如果起点只有10bit,处理完可能只剩8bit有效数据,画质根本不够用。

小技巧:高通平台里,RAW12的数据在内存中通常按16bit对齐存储。也就是说,每个像素占2字节,但高4位是无效的。写代码时记得做位操作,别把垃圾数据带进去。

黑电平与动态范围

黑电平是什么?传感器在完全无光的情况下,理论上应该输出0。但实际因为暗电流、电路噪声等原因,会有一个基础偏移值。这个偏移就是黑电平。

我举个例子:假设传感器黑电平是64(12bit RAW),那么像素值范围就不是0~4095,而是64~4095。如果不减去这个偏移,暗部细节就全被抬高了,画面发灰。

校正公式:校正后像素值 = 原始像素值 - 黑电平值

动态范围呢?说白了就是传感器能同时记录的最亮和最暗区域的比值。动态范围越大,高光不过曝、暗部不死黑。

我记得有一次调试夜景模式,发现暗部噪点特别多。查了半天,原来是黑电平校正没做对,导致暗部信号被压缩了。校正之后,动态范围直接提升了1.5档。

黑电平校正的两种方式

  1. 全局黑电平:整个传感器用一个固定值。简单,但精度一般。
  2. 行/列黑电平:每行或每列单独计算。精度高,但需要额外存储。

高通平台里,我建议用行黑电平。虽然多占点内存,但能有效消除行噪声。尤其是暗光下,行噪声特别明显。

暗角与镜头阴影校正

你有没有发现,很多照片四周比中心暗?这就是暗角,也叫镜头阴影。原因很简单:镜头中心进光量大,边缘进光量小。

校正方法也不复杂——给每个像素乘一个增益系数。中心区域增益接近1,边缘区域增益大于1。

注意:增益不能太大,否则边缘噪点会被放大。我一般限制最大增益不超过2.5倍。超过这个值,噪点就压不住了。

高通平台里,镜头阴影校正(LSC)通常在RAW域完成。参数存在OTP里,每个模组都不一样。我曾经遇到一个项目,OTP数据读出来全是0,结果拍出来的照片四周黑得像加了暗角滤镜。后来发现是模组厂烧录时出了问题。

本章知识结构

下面这张图,把本章的核心知识点串起来了。你仔细看看,Bayer阵列、RAW格式、黑电平、暗角校正,它们之间的关系一目了然。

RAW图基础知识体系 RAW图基础 Bayer阵列模式 RAW10/12/16 黑电平与动态范围 暗角与镜头阴影 RGGB / RCCB / RYYB 位深度与量化精度 暗电流 / 偏移校正 LSC校正 / 增益补偿 核心要点 RAW域处理是ISP流水线的基石 Bayer模式决定色彩还原方式,位深度决定画质上限