把一束红光和一束绿光照在同一面墙上,重叠的地方会变成黄色。
我们没有打开黄色的灯,眼睛却看见了黄色。屏幕表示颜色的办法,就藏在这片重叠的光里。
先拿三把手电筒试一次。
色光三原色
下面三把手电筒分别发出红光、绿光和蓝光。先把三束光全部打开,再关掉其中一束,看看墙上的光斑怎样变化。
三束手电筒的混色实验
三个圆形光斑照在同一面墙上。改变手电筒的亮度,观察重叠处出现什么颜色。
红光和绿光重叠时,我们看见黄色。绿光与蓝光混出青色,蓝光与红光混出品红色。三束光一起照向中央,重叠处接近白色。
红光、绿光和蓝光可以混合出许多颜色,人们把它们叫作色光三原色。改变每一束光的亮度,墙面上的颜色也跟着改变。
每打开一把手电筒,墙面就多收到一份光。人们把这种混色方式叫作加色混合。颜料会吸收一部分光,遵循另一套混色规律。
传统的 RGB 三圆图画的也是三个互相重叠的光斑。实验里的百分比表示每把手电筒开了多亮,100% 是全亮,0% 是关闭。
RGB 色彩模型
把三束光缩进一个屏幕像素,计算机仍然控制红、绿、蓝三份光。
屏幕把一个像素分成三个发光部分。你在正常观看距离下看不清它们,眼睛会把三份光合成一个颜色。
计算机需要把每份光的亮度写成数字。常见的 RGB 图片给每个通道留下 8 个二进制位,8 位可以组成 个数。数值从 0 开始,范围便是 0 到 255:
R = 255G = 180B = 0255 表示红色通道开到最大,0 表示蓝色通道关闭。手电筒实验里的 100%,在这里对应 255。
可以拖动三个数字,看看发光部分和最终颜色怎样变化。
一个像素里的三个数字
每个通道都有 0 到 255。改变数字,观察三个发光部分和最终颜色。
RGB 用三个方向安排颜色:红光有多少、绿光有多少、蓝光有多少。这样一套安排数字的规则,叫作色彩模型。
RGB 很适合控制屏幕。换到挑颜色、压缩图片或比较色差时,这三个数字就不顺手了。我们可以保留眼前的颜色,换一种方式安排数字。
HSL 与 HSV 选色模型
假设你要把橙色调得亮一点。面对 R = 232、G = 121、B = 36,应该改哪个数字?三个通道会一起影响结果,很难从数值直接判断颜色会往哪里走。
绘图软件常把颜色排成色环,再提供饱和度与明暗控制。HSL 和 HSV 都从 RGB 换算而来:
- H 记录色相,也就是颜色在色环上的位置;
- S 记录饱和度;
- HSL 用 L 调整明度,HSV 用 V 记录最大的 RGB 通道。
下面两边共享 H 与 S。分别拖动 L 和 V,比较橙色经过的颜色。
用 HSL 和 HSV 调整同一个橙色
两边共享 H 与 S。分别改变 L 和 V,比较颜色走过的方向。
把 L 从 0 推到 100,颜色会从黑色经过纯色,再走向白色。
把 V 从 0 推到 100,颜色从黑色走向当前色相能够达到的最亮状态。
HSL 的 L 到达 100% 时,三个 RGB 通道都会走到最大,结果是白色。HSV 的 V 到达 100% 时,最大的 RGB 通道先到上限,颜色仍保留当前色相。
HSL 与 HSV 服务于选色操作。它们的 L 和 V 都不等于人眼感受到的亮度,也不适合直接测量两个颜色的视觉距离。
Y′CbCr 图像模型
屏幕需要三份原色光,保存图片时却可以换一种拆法。
我们的眼睛容易发现轮廓变糊,对细小的颜色变化没有同样敏感。图片和视频可以多保留一些明暗细节,少存一些颜色细节:
- Y′ 记录画面的明暗;
- Cb 记录颜色偏蓝还是偏黄,Cr 记录颜色偏红还是偏青。
先把 Cb 和 Cr 的细节调到“更少”,观察房子的轮廓。再把 Y′ 的细节调到“更少”,比较屋顶和窗户。
把一幅彩色图像拆开
分别减少明暗和颜色细节,看看哪一种变化更容易被发现。
先把 Cb / Cr 调到“更少”,再把 Y′ 调到“更少”。轮廓通常会在第二次变化时明显变糊。
颜色细节减少后,房子的边缘还能保持清楚。明暗细节减少后,屋顶和窗户很快变糊。JPEG 与许多视频格式会利用这项视觉特点减少数据量。
数字图片和视频使用的名称是 Y′CbCr。有些软件会把它宽泛地写成 YUV,两者的来源和定义并不相同。
光谱与眼睛看到的颜色
RGB、HSL、HSV 和 Y′CbCr 都从屏幕上的三份数字出发。真实的光包含更多信息。
阳光、灯光和物体反射的光,往往包含许多波长。把每一段波长的强度画出来,会得到一条光谱。
屏幕只发出红、绿、蓝三种光,也能让我们看见白色。它发出的白光,与日光的光谱差别很大。
切换“连续白光”和“屏幕白光”,比较两条曲线。再切换“窄带黄光”和“红绿混合”。
不同的光谱,也可能看起来一样
切换光源,先比较曲线,再看人眼看到的颜色。
许多波长都有能量,人眼会把它看成白色。
两种白光的曲线不同,眼睛都把它们看成白色。窄带黄光把能量集中在黄色附近,红绿混合使用两段分开的光,眼睛看到的结果仍是黄色。
光进入眼睛后,会刺激三类视锥细胞。大脑根据三类细胞的响应产生颜色感觉。两条不同的光谱可能得到相同的视觉结果,人们把这种现象叫作同色异谱。
屏幕的 RGB 数字描述不了整条光谱。我们还需要一套共同的数字,记录标准观察者看到的匹配结果。
XYZ 标准观察模型
研究者向观察者显示一束目标光,再请他们调节几束测试光,直到两边看起来相同。大量颜色匹配实验给出了 X、Y、Z 三个数值。
XYZ 记录标准观察条件下的视觉匹配结果。X、Y、Z 不是三盏灯,也不对应屏幕里的三个发光部分。其中 Y 与亮度相关,三个数值合在一起确定颜色。
在下面的实验中切换四种光,比较它们的光谱与 XYZ 数值。
把看到的颜色放进 XYZ
切换光源,比较光谱与 XYZ 数值。
它与屏幕白光落在相同的 XYZ 坐标。
连续白光与屏幕白光使用同一组 XYZ 数值,窄带黄光与红绿混合也使用同一组。实验用简化数据展示颜色匹配关系;真实测量还要规定观察者、照明和测量条件。
XYZ 方便不同设备和测量结果互相换算,但三个方向不适合直接操作。单独改变 X 时,明暗和颜色可能一起变化。
Lab 颜色比较模型
Lab 在 XYZ 的基础上重新安排三个方向:
- L* 表示更暗还是更亮;
- a* 表示向绿色还是红色移动;
- b* 表示向蓝色还是黄色移动。
一次只拖动一条控制杆,观察颜色沿哪个方向变化。
沿 L*、a*、b* 三个方向移动
一次只拖动一条控制杆,看看明暗和两个颜色方向有什么不同。
这里以 D65 作为参考白色。颜色超出当前屏幕能显示的范围时, 预览会把它收进可显示范围。
L* 主要改变明暗,a* 控制绿色到红色的方向,b* 控制蓝色到黄色的方向。Lab 还让相同大小的数值变化接近相似的视觉变化,因此常用来计算色差。
这种对应关系是近似。不同颜色区域仍会出现偏差,计算时也要指定参考白色。实验使用 D65 白色作为参照。
同一种颜色,不同的色彩模型
选一个颜色,看看它换进六种模型后得到哪些数字。
同一种颜色,不同的色彩模型
选一个颜色,比较六种模型给出的数字和用途。
232.0 · 121.0 · 36.0控制三种原色的亮度40.4 · 31.0 · 5.5把颜色放进统一的观察标准62.5 · 37.8 · 61.3比较明暗与颜色方向138.5 · 72.3 · 186.9分开明暗与颜色信息26.0 · 81.0 · 52.5用色相、饱和度和明度选色26.0 · 84.5 · 91.0用色相、饱和度和最大通道选色| 色彩模型 | 这些数字用来做什么 |
|---|---|
| RGB | 控制三种原色的亮度 |
| HSL / HSV | 按色相、饱和度和明暗挑选颜色 |
| Y′CbCr | 分开明暗与颜色信息 |
| XYZ | 记录标准观察者的颜色匹配结果 |
| Lab | 比较明暗、颜色方向与色差 |
颜色没有随着模型切换。我们只是在为不同任务重新安排数字:屏幕需要原色通道,绘图软件需要顺手的选色控件,压缩算法需要分开明暗与颜色,测量工作需要共同的比较基准。
同一种颜色可以写成多组数字。先看你准备操作什么,再选对应的色彩模型:控制屏幕用 RGB,挑颜色用 HSL 或 HSV,保存图像可以使用 Y′CbCr,比较观察结果则会用到 XYZ 与 Lab。
下拉加载评论