第四章 色彩空间与色彩科学:RGB、YCbCr、HSV、Lab等色彩空间转换、色温与白平衡基础
色彩科学是ISP(图像信号处理器)算法的基石。从传感器输出的RAW数据到最终显示或存储的图像,每一个像素都要经历多次色彩空间的转换。理解不同色彩空间的数学定义、物理含义与适用场景,是进行白平衡、色彩校正、色调映射等后续操作的前提。本章将系统梳理RGB、YCbCr、HSV、Lab等核心色彩空间的特性与转换逻辑,并深入解析色温与白平衡的底层原理与工程实现方法。
上图展示了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)或定点整数运算实现,以避免浮点运算带来的性能开销。转换流程遵循以下步骤:
- 归一化:将RGB从0-255映射到0-1浮点范围(或定点Q格式)。
- 去Gamma:若输入为sRGB,需先进行线性化(即应用2.2次幂的反函数),得到线性RGB。
- 矩阵运算:根据目标色彩空间(如BT.709 YCbCr)乘以对应的3x3转换矩阵。
- 加偏移与量化:对Y加16偏移,对Cb/Cr加128偏移,再量化到目标位深。
判断一个转换实现是否正确,最直接的方法是使用标准色卡(如X-Rite ColorChecker)的已知RGB值,转换后对比标准YCbCr/HSV/Lab值,计算最大误差。工程上,8bit数据转换误差应控制在±1以内,16bit数据误差应控制在±2以内。
| 转换方向 | 关键参数 | 典型应用 | 精度要求 |
|---|---|---|---|
| RGB→YCbCr | BT.601/BT.709矩阵 | 视频编码、降噪 | 8bit: ±1 |
| RGB→HSV | 极坐标变换 | 颜色分割、特效 | H角度误差<1° |
| RGB→Lab | D65白点、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中最常用的方法。
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网格,对每个网格独立估计色温并计算增益,然后通过双线性插值生成每个像素的增益图。
实际操作步骤:
- 将RAW图分块,每块大小64x64像素,统计每块的R/G、B/G比值。
- 剔除过暗(亮度<10)和过曝(亮度>250)的块,避免噪声和饱和像素干扰。
- 对每块计算色温估计值,并映射到对应的R_gain、B_gain。
- 对增益图进行高斯平滑(σ=3),避免块间增益跳变。
- 将增益图应用到线性RGB域,完成白平衡。
- 随后进行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 常见误区与总结复盘
总结:色彩空间转换与白平衡是ISP中最基础也最考验功力的模块。理解每个色彩空间的数学定义和物理意义,掌握转换的精度控制方法,熟悉白平衡的多种实现策略及其适用场景,是成为一名合格的ISP算法工程师的必修课。在实际项目中,建议建立标准色彩测试流程:使用色卡在D65、A光源(2856K)、TL84(4000K)等标准光源下拍摄,量化评估ΔE、色偏、饱和度等指标,用数据驱动算法调优。