1. 色彩科学基础:人眼视觉特性与颜色感知、光源与色温、CIE标准色度系统、颜色空间概述(RGB/XYZ/Lab)
做ISP算法这些年,我越来越觉得,色彩科学是ISP工程师的「内功」。你调再多的3A参数,如果不懂人眼怎么看颜色,不懂光源怎么影响颜色,那调出来的图要么偏冷要么偏暖,永远差口气。这一章,我们就从最底层开始,把色彩科学的几个核心概念掰开揉碎讲清楚。
1.1 人眼视觉特性与颜色感知
先聊聊人眼。你想想看,我们为什么能看到颜色?
人眼视网膜上有两类感光细胞:视杆细胞和视锥细胞。视杆细胞对亮度敏感,但分不清颜色;视锥细胞分三种,分别对长波(红)、中波(绿)、短波(蓝)敏感。说白了,我们看到的每一种颜色,都是这三种视锥细胞响应值的某种组合。
关键点:人眼对亮度的敏感度远高于对颜色的敏感度。这也是为什么ISP算法里,亮度通道和色度通道要分开处理——YUV空间就是这么来的。
我在项目中遇到过一个问题:同一张图,在暗光下看起来噪点很多,但亮度一提高,噪点似乎没那么明显了。其实不是噪点消失了,而是人眼在暗光下对亮度噪声更敏感。所以ISP的降噪模块,一定要根据环境照度动态调整强度。
避坑指南:我曾经在调试一款手机摄像头时,把暗光降噪做得太狠,结果画面虽然干净了,但颜色也糊成了一片。后来我学乖了——降噪和色彩保真度之间,永远要找一个平衡点。
1.2 光源与色温
颜色不是物体本身的属性,而是光源和物体相互作用的结果。同一个白色物体,在日光下是白的,在白炽灯下就偏黄。这就是色温在作怪。
色温的单位是开尔文(K)。低色温(如2000K)偏红黄,高色温(如6500K)偏蓝白。常见的标准光源有:
| 光源类型 | 色温(K) | 典型场景 |
|---|---|---|
| 烛光 | ~1800 | 极暖,偏红 |
| 白炽灯 | ~2800 | 暖黄,家用常见 |
| 荧光灯 | ~4000 | 中性白,办公室 |
| 日光(D65) | ~6500 | 标准白,户外 |
| 阴天 | ~7500 | 偏蓝,冷色调 |
做ISP时,AWB(自动白平衡)的核心任务就是估计当前光源的色温,然后把图像校正到标准光源下的颜色。我个人的习惯是,先做色温估计,再做颜色校正,顺序不能乱。
注意:色温估计不准,后面所有颜色处理都会跑偏。我曾经在混合光源场景下吃过亏——室内是暖光,窗外是冷光,AWB直接懵了。后来我加了区域色温估计,才搞定这种复杂场景。
1.3 CIE标准色度系统
说到颜色,不能绕开CIE。1931年,CIE搞了一套标准色度系统,定义了颜色匹配函数和色度图。说白了,就是用数学方法把颜色「量化」了。
CIE 1931 XYZ颜色空间是基础。它用三个假想的原色X、Y、Z来表示任何颜色。其中Y代表亮度,X和Z代表色度。这个空间的好处是,它跟设备无关——你可以在任何显示器、打印机上用它来描述颜色。
我经常用CIE色度图来评估ISP的色彩还原精度。把相机拍到的颜色和标准色卡的颜色画在色度图上,看它们的距离——距离越小,还原越准。
实用技巧:在调试ISP时,我会用Macbeth色卡做参考。把24个色块在CIE色度图上的坐标算出来,跟标准值对比,一目了然。
下面这张图是我自己整理的色彩科学知识体系,方便你理解各概念之间的关系:
1.4 颜色空间概述:RGB / XYZ / Lab
颜色空间,说白了就是用一个坐标系来描述颜色。不同的颜色空间有不同的用途。
RGB颜色空间
最直观,也最常用。R、G、B三个分量分别代表红、绿、蓝的强度。但RGB是设备相关的——同一个RGB值,在不同显示器上显示的颜色可能不一样。所以做ISP时,我们通常不会在RGB空间里做颜色校正,而是先转到更「标准」的空间。
XYZ颜色空间
CIE 1931定义的设备无关空间。它是所有颜色空间的「桥梁」。从RGB转到XYZ,再从XYZ转到Lab,这是标准流程。转换公式是线性的,说白了就是矩阵乘法。
// RGB到XYZ的转换矩阵(sRGB标准)
// 假设RGB已经经过gamma校正
[X] [0.4124564 0.3575761 0.1804375] [R]
[Y] = [0.2126729 0.7151522 0.0721750] [G]
[Z] [0.0193339 0.1191920 0.9503041] [B]
个人经验:我建议你在做ISP pipeline时,把颜色校正模块放在XYZ空间里做。因为XYZ的色度图是线性的,方便做矩阵运算。我早期在RGB空间里做校正,结果总是偏色,后来转到XYZ空间,问题迎刃而解。
Lab颜色空间
Lab空间的设计目标是「感知均匀」——也就是说,在Lab空间里,两个颜色之间的距离,跟人眼感知到的颜色差异成正比。L代表亮度,a代表红绿方向,b代表黄蓝方向。
做色彩还原评价时,我常用Lab空间的色差公式ΔE。ΔE越小,说明色彩还原越准。一般来说,ΔE小于3,人眼就分辨不出差异了。
实战要点:在ISP中,Lab空间常用于色调映射和色彩增强。因为它的亮度通道和色度通道是解耦的,你可以单独调整亮度而不影响颜色。我做过一个项目,在Lab空间里做局部色调映射,效果比在RGB空间里好得多。
注意:Lab空间的转换是非线性的,计算量比RGB到XYZ大。在嵌入式平台上,如果算力有限,可以考虑用查找表(LUT)来加速。我曾经在低端芯片上硬算Lab转换,结果帧率掉了一半,后来改用LUT,速度提升了3倍。
好了,这一章的内容就到这里。色彩科学是ISP的根基,后面所有的算法——白平衡、颜色校正、色调映射——都建立在这些概念之上。把这些基础打牢,后面的路就好走了。