1、色彩科学基础:人眼视觉特性、颜色三要素、CIE 1931色度图、色温与白平衡概念
做ISP调试这些年,我越来越觉得——不懂色彩科学,你调出来的图像永远差一口气。很多工程师一上来就猛调矩阵系数,结果越调越偏。为什么?因为你不了解人眼怎么看颜色,也不明白CIE那套东西到底在说什么。
今天咱们就把这些基础打牢。放心,我不会跟你扯太多公式,咱们从实战角度出发,把每个概念讲透。
1.1 人眼视觉特性——你的传感器得“骗”过眼睛
人眼不是一台完美的相机。它有很多“缺陷”,但正是这些缺陷,构成了我们感知色彩的基础。
第一,人眼对亮度敏感,对颜色不敏感。 你想想看,在昏暗的灯光下,你还能分辨出物体的轮廓,但很难说清楚它到底是什么颜色。这就是人眼的“明视觉”和“暗视觉”切换。我在做低光场景调试时,经常利用这个特性——暗部细节宁可保留亮度,也不要强行提饱和度,否则噪点全出来了,人眼看着还特别假。
第二,人眼对绿色最敏感。 为什么拜耳阵列里绿色像素占一半?就是这个道理。我记得有一次调试一个户外监控项目,画面里全是树叶和草地。我花了整整两天调绿色通道的响应曲线,最后发现——其实人眼对绿色的宽容度很高,稍微偏一点根本看不出来。反倒是肤色,差一个色阶都能被用户投诉。
第三,人眼有“色彩恒常性”。 什么意思?就是不管在日光灯下还是夕阳下,你看到的白纸永远是白的。但相机不行。相机拍出来的白纸,在暖色光源下就是黄的。这就是为什么我们需要白平衡校正。说白了,ISP的很多工作,就是在模拟人眼的这种“自动补偿”能力。
核心要点: 人眼不是客观的测量仪器。ISP调试的目标不是“还原真实”,而是“还原人眼感知的真实”。这两者差别很大。
1.2 颜色三要素——调色你得先懂“原料”
任何颜色都可以用三个维度来描述。这就是颜色三要素:色相、饱和度、明度。
| 要素 | 英文 | 通俗理解 | ISP中的对应 |
|---|---|---|---|
| 色相 | Hue | 这是什么颜色(红、绿、蓝) | 色彩校正矩阵(CCM)的主轴方向 |
| 饱和度 | Saturation | 颜色浓不浓 | CCM的对角线增益 |
| 明度 | Lightness | 颜色亮不亮 | Gamma曲线、亮度通道处理 |
我在项目中遇到过一件事:一个客户说我们的摄像头拍出来的红色“不正”。我一看,色相没问题,饱和度也够,但明度偏暗。红色一旦暗下去,看起来就像猪肝色。后来我把红色通道的亮度响应往上提了5%,问题就解决了。你看,三个要素缺一不可。
实战技巧: 调试CCM时,我习惯先把饱和度调到0,只看色相是否准确。色相准了,再慢慢加饱和度。这样不容易被“浓颜色”迷惑。
1.3 CIE 1931色度图——ISP工程师的“地图”
这个图,说白了就是人类能看到的全部颜色的“地图”。
CIE 1931色度图长什么样?一个马蹄形。马蹄形的边界是单色光(纯色),内部是混合色。中间有个白点,叫D65标准白光。
为什么它重要? 因为你的sensor拍出来的颜色,最终都要映射到这个马蹄形里面。如果sensor的色域覆盖不到某个颜色,那你怎么调都调不出来。我曾经调试一个低端sensor,它的红色响应特别差,在色度图上红色区域几乎是个“塌陷”。我花了三周时间,用CCM硬拉红色,结果噪点爆炸。最后只能跟产品经理说:这个sensor的硬件上限就在这,软件救不了。
色度图上有几个关键点你要记住:
- sRGB色域: 三个顶点在(0.64,0.33)、(0.30,0.60)、(0.15,0.06)。这是显示器的标准。
- D65白点: (0.3127, 0.3290)。这是6500K色温的白光。
- 等色温线: 从马蹄形内部穿过的一系列直线。白平衡调试就是沿着这些线找白点。
注意: 色度图是二维的,它不包含亮度信息。两个颜色在色度图上坐标相同,但亮度不同,看起来也是不一样的。所以调试时一定要结合亮度通道一起看。
1.4 色温与白平衡概念——为什么你的画面总是偏色
色温,用开尔文(K)表示。数值越低,光越暖(偏红黄);数值越高,光越冷(偏蓝)。
常见光源的色温:
| 光源 | 色温(K) | 视觉感受 |
|---|---|---|
| 烛光 | 1500-2000 | 暖黄 |
| 白炽灯 | 2700-3000 | 暖白 |
| 日光灯 | 4000-5000 | 中性白 |
| 正午阳光 | 5500-6500 | 冷白 |
| 阴天 | 6500-8000 | 偏蓝 |
白平衡,就是让相机在不同色温下,都能把白色物体拍成白色。它的本质是调整R、G、B三个通道的增益。
举个例子:在2800K的白炽灯下,白色物体反射的光偏黄(R多B少)。相机要把它还原成白色,就得降低R通道增益,提高B通道增益。这个比例,就是白平衡增益。
我曾经踩过一个坑:一个室内监控项目,灯光是混合光源——一半是日光灯,一半是白炽灯。自动白平衡在两个光源之间来回跳,画面一会儿偏蓝一会儿偏黄。后来我手动锁定了色温在4000K,虽然不完美,但至少稳定了。用户反馈说“虽然有点偏,但比之前忽蓝忽黄强多了”。
一句话总结: 色温是光源的属性,白平衡是相机的补偿。ISP调试的目标,就是让这个补偿做得又快又准。
1.5 实战:从色度图看白平衡校正
咱们来点实际的。假设你有一个sensor,在D65光源下拍了一张灰卡。你提取出R、G、B三个通道的平均值:
R_avg = 180
G_avg = 200
B_avg = 220
你看,B通道比G通道高,说明画面偏蓝。为什么?因为D65本身就是偏蓝的光源。但我们要把灰卡还原成中性灰,所以需要调整增益:
R_gain = G_avg / R_avg = 200 / 180 = 1.111
B_gain = G_avg / B_avg = 200 / 220 = 0.909
G_gain = 1.0 (以G通道为参考)
把这个增益乘到每个像素上,灰卡就变成中性灰了。在色度图上,这个操作就是把偏蓝的点拉回到D65白点位置。
我的习惯: 调试白平衡时,我从来不看屏幕上的颜色。我只看色度图上的坐标。眼睛会被环境光欺骗,但坐标不会。把白点坐标控制在D65周围±0.005以内,基本就稳了。
嗯,色彩科学基础就讲这么多。这些东西看着简单,但每一条都是我在项目里摔过跟头才真正理解的。下一章咱们开始讲CCM的数学原理,到时候你会感谢今天打下的这些基础。