第四章 色彩空间与色彩科学:RGB、YCbCr、HSV、Lab等色彩空间转换、色温与白平衡基础

色彩科学是ISP(图像信号处理器)算法的基石。从传感器输出的RAW数据到最终显示或存储的图像,每一个像素都要经历多次色彩空间的转换。理解不同色彩空间的数学定义、物理含义与适用场景,是进行白平衡、色彩校正、色调映射等后续操作的前提。本章将系统梳理RGB、YCbCr、HSV、Lab等核心色彩空间的特性与转换逻辑,并深入解析色温与白平衡的底层原理与工程实现方法。

ISP色彩空间转换与白平衡工程链路 RAW域 CFA插值后RGB 线性光强 白平衡增益 R/G/B通道增益 色温估计 CCM色彩校正 3x3矩阵 颜色风格映射 色彩空间转换 RGB→YCbCr/HSV/Lab 用于不同处理环节 YCbCr 应用场景 • 视频编码/传输(BT.601/709) • 色度采样 4:2:0 压缩 • 亮度/色度分离处理(降噪、锐化) HSV 应用场景 • 颜色检测/分割(肤色、天空) • 色调调整(Hue Shift) • 饱和度增强(Saturation) Lab 应用场景 • 感知均匀色彩空间 • 色彩差异评估 ΔE • 色调映射(L通道) 色温与白平衡关系 2000K(烛光) 4000K(暖白) 6500K(日光) 10000K(阴天) 白平衡本质:在不同色温光源下,通过通道增益使中性灰还原为R=G=B

上图展示了ISP中色彩处理的核心链路:从RAW域的线性RGB开始,经过白平衡增益调整、色彩校正矩阵(CCM)后,再根据不同的应用需求转换到YCbCr、HSV或Lab等色彩空间。这条链路中,每一个环节的精度都会直接影响最终图像的色彩表现。下面我们逐一深入剖析。

4.1 核心色彩空间原理与数学定义

RGB色彩空间是最基础、最贴近硬件采集与显示的色彩模型。在ISP中,RGB通常分为线性RGB和非线性RGB(即经过Gamma校正后的RGB)。线性RGB直接反映光强,适合做数学运算(如白平衡、CCM),但不符合人眼对亮度的感知特性;非线性RGB(sRGB、Adobe RGB等)则用于显示和存储。RGB的缺点是三个分量高度相关,对亮度与色度的分离性差,不适合做压缩和图像分析。

YCbCr色彩空间将亮度(Y)与色度(Cb、Cr)分离,是视频编码和传输的标准格式。其转换公式基于ITU-R BT.601(标清)或BT.709(高清)标准。以BT.601的有限范围(16-235)为例,RGB(8bit)转YCbCr的核心公式为:

Y  = 0.257R + 0.504G + 0.098B + 16
Cb = -0.148R - 0.291G + 0.439B + 128
Cr = 0.439R - 0.368G - 0.071B + 128

YCbCr的优势在于:人眼对亮度细节敏感、对色度细节不敏感,因此可以对Cb、Cr进行下采样(如4:2:0)而不易察觉画质损失,极大节省带宽。在ISP中,降噪、边缘增强等操作通常在Y域进行,而色度去伪彩则在Cb/Cr域进行。

HSV色彩空间(色相Hue、饱和度Saturation、明度Value)是一种面向视觉感知的圆柱坐标模型。H用角度表示(0°-360°),S和V用百分比或0-1表示。RGB转HSV的算法是:

V = max(R,G,B)
S = (V - min(R,G,B)) / V  (当V≠0)
H = 根据max分量计算角度(60°为间隔)

HSV的最大价值在于将颜色属性解耦:调整H可以改变色调而不影响亮度,调整S可以改变鲜艳程度,调整V可以改变明暗。这使得它在颜色检测(如肤色分割)、色彩风格化(如美颜中的口红换色)中非常高效。

Lab色彩空间(CIELAB)是感知均匀的色彩空间,其设计目标是让数值上的欧氏距离与人眼感知的颜色差异成正比。L表示亮度(0-100),a表示从绿到红(-128到127),b表示从蓝到黄(-128到127)。Lab由XYZ空间经非线性变换得到,而XYZ由线性RGB经3x3矩阵转换而来。Lab在色彩管理、色差评估(ΔE)和高端色调映射中不可或缺。

4.2 色彩空间转换的工程实现与判断方法

在ISP代码中,色彩空间转换通常以查找表(LUT)或定点整数运算实现,以避免浮点运算带来的性能开销。转换流程遵循以下步骤:

  1. 归一化:将RGB从0-255映射到0-1浮点范围(或定点Q格式)。
  2. 去Gamma:若输入为sRGB,需先进行线性化(即应用2.2次幂的反函数),得到线性RGB。
  3. 矩阵运算:根据目标色彩空间(如BT.709 YCbCr)乘以对应的3x3转换矩阵。
  4. 加偏移与量化:对Y加16偏移,对Cb/Cr加128偏移,再量化到目标位深。

判断一个转换实现是否正确,最直接的方法是使用标准色卡(如X-Rite ColorChecker)的已知RGB值,转换后对比标准YCbCr/HSV/Lab值,计算最大误差。工程上,8bit数据转换误差应控制在±1以内,16bit数据误差应控制在±2以内。

转换方向关键参数典型应用精度要求
RGB→YCbCrBT.601/BT.709矩阵视频编码、降噪8bit: ±1
RGB→HSV极坐标变换颜色分割、特效H角度误差<1°
RGB→LabD65白点、Gamma色彩管理、ΔE评估ΔE<1
YCbCr→RGB逆矩阵显示、后处理避免色偏

4.3 色温与白平衡基础

色温是描述光源颜色的物理量,单位为开尔文(K)。黑体加热到不同温度会发出不同颜色的光:低温(2000K)偏红,高温(10000K)偏蓝。人眼具有色彩恒常性,无论光源如何变化,我们感知的白色始终是白色。但图像传感器没有这种能力,因此必须通过白平衡算法来模拟人眼的适应机制。

白平衡的核心目标是:在任意色温光源下,使场景中的中性灰(反射率均匀的灰卡)在图像中呈现为R=G=B。其数学本质是计算三个通道的增益系数(R_gain、G_gain、B_gain),通常以G通道为基准(G_gain=1.0),然后对R和B通道进行缩放。

工程中常用的白平衡方法有三种:

  • 灰度世界法:假设场景中所有颜色的平均反射率是中性灰,即R、G、B三通道的平均值应相等。增益计算为:R_gain = G_avg / R_avg,B_gain = G_avg / B_avg。该方法简单,但在大面积单色场景(如蓝天、绿草)中会失效。
  • 完美反射法:假设图像中最亮的像素(高光区域)是白色,以其RGB值作为白点参考。该方法对高光过曝敏感。
  • 色温曲线法:在实验室中,用不同色温光源拍摄灰卡,记录R/G和B/G比值,拟合出一条色温曲线。实际使用时,统计图像中灰点的R/G、B/G比值,在曲线上查找最接近的色温点,再查表得到增益。这是目前手机和相机ISP中最常用的方法。
实战经验:在ISP调试中,白平衡模块通常放在去马赛克(Demosaic)之后、CCM之前。因为白平衡需要在线性RGB域进行,若在Gamma域进行,会导致高光区域色彩失真。此外,白平衡增益过大会放大噪声,因此当场景色温极低(如2000K)或极高(如10000K)时,需要配合降噪强度的动态调整。

4.4 案例拆解:手机摄像头在混合光源下的白平衡与色彩转换优化

背景与约束:某旗舰手机在室内会议室场景(主光源为4000K荧光灯,窗外射入6500K日光)拍摄人像,出现肤色偏黄、背景白墙偏蓝的问题。硬件为IMX766传感器,ISP为骁龙8 Gen2内置ISP。目标是在不增加额外硬件成本的前提下,通过算法优化使肤色自然、白墙还原为白色。

初始现象与数据:拍摄RAW格式图像,统计灰卡区域RGB均值:R=180,G=160,B=140(8bit)。计算R/G=1.125,B/G=0.875。对照色温曲线,该比值对应约4500K色温,但实际场景是混合光源,单一色温无法准确描述。

分析判断过程:问题根源在于全局白平衡无法同时校正两种色温。若按4500K校正,则日光照射的白墙区域(实际色温6500K)会被过度补偿,导致偏蓝;若按6500K校正,则荧光灯下的肤色会偏黄。解决方案是采用区域白平衡(局部AWB):将图像划分为16x16网格,对每个网格独立估计色温并计算增益,然后通过双线性插值生成每个像素的增益图。

实际操作步骤:

  1. 将RAW图分块,每块大小64x64像素,统计每块的R/G、B/G比值。
  2. 剔除过暗(亮度<10)和过曝(亮度>250)的块,避免噪声和饱和像素干扰。
  3. 对每块计算色温估计值,并映射到对应的R_gain、B_gain。
  4. 对增益图进行高斯平滑(σ=3),避免块间增益跳变。
  5. 将增益图应用到线性RGB域,完成白平衡。
  6. 随后进行CCM色彩校正,将RGB转换到YCbCr域进行降噪和锐化,最后转回RGB输出。

结果对比:优化前,肤色ΔE(相对标准肤色卡)为8.5,白墙ΔE为6.2;优化后,肤色ΔE降至3.2,白墙ΔE降至2.1。主观评价中,90%的测试者认为肤色自然度显著提升,白墙不再偏蓝。

风险与代价:区域白平衡增加了约15%的ISP运算量(主要是分块统计和插值),且在某些极端场景(如大面积纯色背景)可能产生色块分裂。为此,增加了增益图的平滑强度,并设置相邻块色温差阈值(超过500K时强制平滑)。

复盘经验:混合光源是手机拍摄的常态,单一全局白平衡无法满足高端需求。区域白平衡的关键在于分块大小和插值算法的选择,分块过大则无法区分局部色温,分块过小则噪声过大。此外,白平衡与CCM的配合至关重要——CCM是在D65标准光源下标定的,当实际色温偏离D65时,需要根据色温动态调整CCM矩阵,否则会出现色彩饱和度异常。

4.5 常见误区与总结复盘

误区一:在Gamma域做白平衡。Gamma域中RGB的比值关系已被非线性扭曲,直接乘增益会导致高光区域色彩过饱和或暗部偏色。正确做法是:线性RGB域计算增益并应用,之后再转回Gamma域。
误区二:忽略色彩空间的转换精度。使用浮点转定点时,若系数位宽不足(如用8bit表示0.257),会导致累积误差,在暗部产生色带。建议使用至少12bit定点精度,或使用16bit LUT。
误区三:HSV的H分量直接做均值滤波。H是角度值(0°和360°相邻),直接平均会产生错误结果。应使用圆形统计方法(如将角度转为复数再平均),或先将H映射到色环上的单位圆坐标。

总结:色彩空间转换与白平衡是ISP中最基础也最考验功力的模块。理解每个色彩空间的数学定义和物理意义,掌握转换的精度控制方法,熟悉白平衡的多种实现策略及其适用场景,是成为一名合格的ISP算法工程师的必修课。在实际项目中,建议建立标准色彩测试流程:使用色卡在D65、A光源(2856K)、TL84(4000K)等标准光源下拍摄,量化评估ΔE、色偏、饱和度等指标,用数据驱动算法调优。