3、色彩校正基础:色彩空间(RGB、YUV、RAW)、白平衡原理、色彩矩阵校正

在摄像头驱动开发与故障排查中,图像噪声与色彩失真往往是相伴而生的两大难题。要精准定位并解决色彩问题,首先需要理解摄像头传感器输出的原始数据如何被转换为人类视觉可接受的彩色图像。本章将深入剖析色彩空间、白平衡原理以及色彩矩阵校正这三个核心基础,为后续的噪声抑制与色彩修复提供理论支撑。

3.1 色彩空间:从传感器到显示器的数据桥梁

色彩空间定义了颜色的数学模型与表示范围。摄像头链路中主要涉及三种色彩空间:RAW(传感器原始数据)、RGB(红绿蓝三通道)和YUV(亮度与色度分离)。理解它们之间的差异与转换关系,是驱动工程师进行ISP(图像信号处理)调试的第一步。

核心概念: RAW数据是单通道的拜耳阵列,每个像素只记录一种颜色(R、G或B);RGB是人眼感知与显示设备的基础;YUV则用于压缩与传输,将亮度信息与色彩信息分离。

3.1.1 三种色彩空间对比

特性 RAW (Bayer) RGB YUV (YCbCr)
数据来源 CMOS/CCD 传感器直接输出 RAW 经去马赛克后生成 RGB 经矩阵变换后生成
通道数 1 (单通道,含颜色滤波阵列) 3 (R, G, B) 3 (Y, U, V 或 Y, Cb, Cr)
位深 10/12/14 bit (常见) 8/10/12 bit 8/10 bit
数据量 最小 (原始像素) 较大 (三通道全分辨率) 中等 (可进行色度子采样)
主要用途 ISP 前端处理、噪声分析 显示、图像编辑、算法处理 视频编码、传输、预览
色彩关联性 强 (相邻像素颜色相关) 强 (三通道高度相关) 弱 (亮度与色度分离)

3.1.2 RAW 到 RGB:去马赛克与色彩插值

传感器输出的RAW数据是单通道的拜耳阵列,每个像素只包含一种颜色分量。要得到全彩RGB图像,必须通过去马赛克(Demosaic)算法,利用相邻像素的颜色信息插值出缺失的另外两个通道。常见的插值算法包括双线性插值、边缘导向插值以及自适应插值。

驱动调试提示: 如果RAW数据中存在固定模式噪声(FPN)或坏点,去马赛克算法会将这些缺陷扩散到整个RGB图像中,导致出现“水波纹”或“彩色斑点”。因此,在色彩校正前,必须先完成RAW域的坏点校正与噪声抑制。

3.1.3 RGB 到 YUV:亮度与色度分离

YUV色彩空间的核心优势在于将亮度(Y)与色度(U、V)分离。人眼对亮度变化比对色度变化更敏感,因此可以对U、V通道进行子采样(如4:2:0),大幅降低数据量而不显著影响视觉质量。标准转换公式如下:

// 标准 BT.601 转换 (8-bit, 范围 0-255)
Y  =  0.299 * R + 0.587 * G + 0.114 * B
Cb = -0.169 * R - 0.331 * G + 0.500 * B + 128
Cr =  0.500 * R - 0.419 * G - 0.081 * B + 128

在Linux驱动中,V4L2框架通常通过 VIDIOC_S_FMT 设置像素格式(如 V4L2_PIX_FMT_NV12 对应YUV 4:2:0),硬件ISP或软件库负责完成转换。

摄像头色彩空间转换流程 RAW (Bayer) 去马赛克 RGB 色彩矩阵 YUV 关键路径 RAW → RGB: 去马赛克 RGB → YUV: 色彩矩阵 YUV 用于编码/传输

3.2 白平衡原理:还原真实世界的色彩

人眼具有色彩恒常性,无论光源色温如何变化(如白炽灯偏黄、日光灯偏蓝),都能将白色物体感知为白色。摄像头传感器则不具备这种能力,它忠实地记录场景中的光谱分布。白平衡(White Balance, WB)的目的就是通过算法消除光源颜色带来的色偏,使白色物体在图像中呈现为中性白。

3.2.1 色温与增益调整

白平衡的核心是估计当前光源的色温,然后对RGB三个通道施加不同的数字增益。例如,在低色温(偏黄)光源下,需要增加蓝色通道的增益,同时减少红色通道的增益。

光源类型 色温 (K) 视觉偏色 白平衡调整策略
烛光/白炽灯 2000 - 3000 偏黄/橙 增加 B 增益,降低 R 增益
日光/闪光灯 5000 - 6500 中性白 R/G/B 增益接近 1.0
阴天/阴影 7000 - 9000 偏蓝 增加 R 增益,降低 B 增益

3.2.2 自动白平衡(AWB)算法

Linux摄像头驱动中,AWB通常由ISP硬件或3A算法库(如libcamera中的AWB模块)实现。常见的AWB算法包括:

  • 灰度世界法: 假设场景中所有颜色的平均值为灰色,通过调整增益使R、G、B三通道的平均值相等。
  • 完美反射法: 寻找图像中最亮的像素点,假设其为白色,并以此为标准调整其他像素。
  • 色温估计法: 通过统计图像在特定色温下的R/G和B/G比值,查找预置的色温查找表(LUT)来确定增益。
常见故障: 当场景中大面积存在单一颜色(如绿色草地、蓝色天空)时,灰度世界法会失效,导致图像整体偏绿或偏蓝。此时需要驱动工程师调整AWB算法的统计区域或切换到更鲁棒的色温估计法。
白平衡增益调整示意图 原始图像 (偏黄) 白平衡增益 R_gain = 0.8 G_gain = 1.0 B_gain = 1.4 校正后图像 (中性白) AWB 核心 1. 估计色温 2. 计算 R/G/B 增益 3. 逐像素乘增益 4. 输出校正图像

3.3 色彩矩阵校正:精确还原色彩饱和度与色调

即使白平衡正确,由于传感器滤色片的光谱响应与人眼视觉函数存在差异,图像色彩仍然可能偏淡或偏色。色彩校正矩阵(Color Correction Matrix, CCM)通过一个3x3的线性变换,将传感器RGB空间映射到标准色彩空间(如sRGB),从而精确还原色彩。

3.3.1 CCM 数学模型

CCM 的数学形式如下:

| R_out |   | a11  a12  a13 |   | R_in  |
| G_out | = | a21  a22  a23 | * | G_in  |
| B_out |   | a31  a32  a33 |   | B_in  |

其中,R_in, G_in, B_in 是经过白平衡校正后的传感器RGB值,R_out, G_out, B_out 是校正后的标准RGB值。矩阵系数通常通过拍摄标准色卡(如Macbeth ColorChecker)并最小化色差来标定。

3.3.2 矩阵系数的作用

系数 作用 典型值范围
a11, a22, a33 主对角线:控制各通道的饱和度 1.0 ~ 2.0
a12, a13, a21, a23, a31, a32 非对角线:控制通道间的串扰(色调修正) -0.5 ~ 0.5
驱动调试要点: CCM 通常在RGB域中应用,且必须在白平衡之后执行。错误的CCM系数会导致严重的色偏,例如红色物体变成品红,或绿色物体变成青色。在Linux驱动中,CCM系数通常通过V4L2控制或ISP驱动参数接口进行配置。
色彩校正矩阵 (CCM) 应用流程 白平衡后 RGB 3x3 色彩矩阵 [a11 a12 a13] [a21 a22 a23] [a31 a32 a33] 标准 sRGB CCM 标定流程 1. 拍摄标准色卡 2. 提取传感器 RGB 3. 最小二乘法拟合 4. 生成 3x3 矩阵

3.4 色彩校正链路总结

在Linux摄像头驱动中,完整的色彩校正链路通常遵循以下顺序:

  1. RAW域处理: 坏点校正、黑电平校正、镜头阴影校正。
  2. 去马赛克: 将RAW Bayer数据转换为RGB。
  3. 白平衡: 应用R/G/B增益,消除光源色温影响。
  4. 色彩校正矩阵: 应用3x3 CCM,将传感器RGB映射到标准色彩空间。
  5. Gamma校正: 对亮度进行非线性映射,适配显示设备。
  6. RGB到YUV转换: 生成用于编码或预览的YUV数据。
故障排查建议: 当图像出现整体偏色时,首先检查白平衡增益是否异常;当图像色彩饱和度不足或特定颜色(如红色、绿色)出现明显偏差时,应重点检查CCM系数。在驱动调试阶段,可以通过V4L2的 VIDIOC_G_CTRL 和 VIDIOC_S_CTRL 实时读取和修改白平衡增益与CCM参数,快速定位问题环节。