1. 色彩科学基础:人眼视觉特性、色彩三要素、加色法与减色法

做色彩校正,你得先理解一个核心问题——我们到底在调给谁看?

答案很简单:人眼。不是仪器,不是算法,是那个会疲劳、会错觉、还会被环境光影响的生物传感器。我刚开始做图像处理时,总觉得把直方图拉平、把色温算准就完事了。结果呢?画面是“正确”的,但看着就是不舒服。后来我才明白——色彩科学,本质上是在伺候人眼的脾气。

1.1 人眼视觉特性:你的“传感器”并不客观

人眼不是一台精密的色度计。它有几个“毛病”,做校正时必须心里有数。

核心要点:人眼对亮度的感知是非线性的,对色彩的感知是相对的。Gamma校正之所以存在,就是因为我们得“骗”过眼睛,让有限的数字信号看起来均匀。

1.1.1 亮度感知的非线性

你想想看,把一盏灯的功率从10W加到20W,你感觉亮度翻倍了吗?没有。人眼对暗部变化极其敏感,对亮部变化却很迟钝。这个关系大致遵循幂律曲线——也就是Gamma曲线的由来。

  • 暗部细节:人眼在低亮度下能分辨的灰度级数远多于高亮度区域。所以编码时暗部需要更多比特位。
  • 韦伯-费希纳定律:人眼感知的亮度变化与物理亮度的对数成正比。说白了,物理上均匀的步长,在人眼里并不均匀。
  • 实际影响:如果你用线性编码存储图像,暗部会一片漆黑,亮部会一片惨白——因为人眼不按线性出牌。

我的习惯:在调试Gamma曲线时,我会先盯着暗部区域看。如果暗部细节能看清、没有死黑,亮部不过曝,这条曲线基本就对了。别太信示波器上的数值,眼睛才是最终裁判。

1.1.2 色彩感知的相对性

人眼有色彩恒常性。一张白纸在日光灯下是白的,在烛光下你依然觉得它是白的。但相机不会——它会忠实地记录下偏黄的烛光。这就是为什么我们需要白平衡校正。

我曾经在项目里遇到过一个问题:同一段素材,在监视器上看肤色正常,换到投影仪上就发绿。折腾了半天,发现是环境光不同导致人眼产生了色适应偏移。从那以后,我每次做色彩校正前,都会先固定监看环境的光源色温和照度。

1.2 色彩三要素:HSI模型的直觉力量

RGB适合机器,但不适合人。你想想看,让你调一个“更鲜艳的红色”,你是去改R值还是改饱和度?当然是饱和度。这就是色相(Hue)、饱和度(Saturation)、明度(Intensity/Lightness)这套模型的优势。

要素 定义 人眼直觉 校正场景
色相 (H) 颜色的种类,如红、绿、蓝 “这是什么颜色” 肤色偏色、白平衡微调
饱和度 (S) 颜色的纯度或鲜艳程度 “颜色浓不浓” 风格化调色、去灰雾
明度 (I/L) 颜色的明亮程度 “颜色亮不亮” 对比度调整、Gamma校正

注意:HSI和HSL/HSV不是一回事。HSI的明度分量是RGB的平均值,而HSL的Lightness和HSV的Value计算方式不同。做算法实现时,一定要确认你用的是哪个模型。我曾经在代码里混用了OpenCV的COLOR_BGR2HSV和COLOR_BGR2HLS,结果调色板全乱了——嗯,那次debug花了整整一个下午。

1.2.1 色相环与互补色

色相通常用0°到360°的圆环表示。红在0°,绿在120°,蓝在240°。相对的两个颜色是互补色——红对青,绿对品红,蓝对黄。

这个关系在色彩校正里非常实用。比如画面偏蓝,你不需要去减蓝色,而是可以增加黄色的色相分量来中和。这就是互补色校正的基本逻辑。

1.2.2 饱和度与明度的独立调整

我建议你在做色彩校正时,把饱和度和明度分开处理。先调明度(Gamma、对比度),再调饱和度。顺序反了,饱和度调整会放大暗部噪声,或者让亮部颜色溢出。

  • 先明度后饱和度:保证动态范围正确后再上色。
  • 饱和度不宜过度:人眼对肤色和天空色的饱和度记忆很准,调过了会显得“假”。
  • 明度影响饱和度感知:同一饱和度下,明度越高,人眼感觉颜色越淡。这是Helmholtz-Kohlrausch效应。

1.3 加色法与减色法:两种世界的色彩逻辑

做图像处理的,必须同时理解这两套体系。一个管发光,一个管反光。

1.3.1 加色法 (RGB)

显示器、投影仪、手机屏幕——所有自发光设备都用加色法。红+绿+蓝=白。没有光=黑。

  • 三原色:红(Red)、绿(Green)、蓝(Blue)
  • 叠加效果:红+绿=黄,红+蓝=品红,绿+蓝=青
  • 应用场景:显示器色彩空间(sRGB、DCI-P3、Rec.709)、LED灯光控制

我记得第一次调LED大屏时,发现纯红色文字边缘有绿色鬼影。后来查资料才知道,那是子像素排列和加色法混色导致的色差。解决办法是把文字渲染从RGB子像素渲染改成灰度抗锯齿——嗯,这种坑只有踩过才知道。

1.3.2 减色法 (CMYK)

印刷、打印、颜料——所有反射光设备都用减色法。颜料吸收(减去)一部分光,反射剩下的。青+品红+黄=黑(理论上)。

  • 三原色:青(Cyan)、品红(Magenta)、黄(Yellow)
  • 叠加效果:青+品红=蓝,青+黄=绿,品红+黄=红
  • 黑色(K)的加入:因为CMY混合不出纯黑,且成本高,所以印刷会额外加黑色墨。

关键区别:加色法从黑开始,越加越亮;减色法从白开始,越减越暗。做色彩校正时,如果你在调显示器,用RGB;如果你在模拟印刷效果,用CMYK。混用会导致灾难性的色偏。

1.3.3 两者转换的陷阱

从RGB转到CMYK不是简单的数学映射。因为色域不同——sRGB能显示的一些鲜艳颜色,印刷根本印不出来。这就是色域映射(Gamut Mapping)要解决的问题。

我建议你在做跨设备色彩校正时,使用ICC色彩管理。它会根据设备的色域特性,自动做最合适的映射。别自己手写转换矩阵——除非你想看到印刷出来的成品颜色像褪了色的旧照片。

1.4 本章知识结构图

下面这张图把色彩科学基础的三个核心模块串起来了。你可以把它当作后续章节的导航地图。

色彩科学基础:三大核心模块 人眼视觉特性 亮度感知非线性 韦伯-费希纳定律 色彩恒常性 相对感知 色彩三要素 (HSI) 色相 (Hue) 饱和度 (Saturation) 明度 (Intensity) 互补色与色相环 加色法与减色法 加色法:RGB (自发光) 减色法:CMYK (反射) 色域映射 ICC色彩管理 色彩校正与Gamma校正 核心逻辑 人眼特性决定了“为什么需要校正” 色彩三要素提供了“用什么参数校正” 加色/减色法决定了“在不同设备上怎么校正”

1.5 小结与避坑指南

这一章的内容偏理论,但它是后续所有实操的根基。我总结几个关键点:

  • 人眼是非线性的:别用线性思维做色彩校正。Gamma曲线就是为此而生。
  • HSI比RGB更直觉:调色时优先用色相、饱和度、明度这三个滑块。效率高,效果好。
  • 加色法和减色法别搞混:显示器用RGB,印刷用CMYK。跨设备时一定要做色域映射。

我曾经踩过的坑:有一次做视频调色,我在RGB空间里直接拉高了G通道来让草地更绿。结果肤色也变绿了——因为肤色里本来就有绿色分量。后来改用HSL模型,只调整色相到绿色区间,问题就解决了。记住:在RGB空间做全局调整,很容易伤及无辜。