2111 字
11 分钟
计算机是怎么表示颜色的:从色光三原色到不同的色彩模型

把一束红光和一束绿光照在同一面墙上,重叠的地方会变成黄色。

我们没有打开黄色的灯,眼睛却看见了黄色。屏幕表示颜色的办法,就藏在这片重叠的光里。

先拿三把手电筒试一次。

色光三原色#

下面三把手电筒分别发出红光、绿光和蓝光。先把三束光全部打开,再关掉其中一束,看看墙上的光斑怎样变化。

三束手电筒的混色实验

三个圆形光斑照在同一面墙上。改变手电筒的亮度,观察重叠处出现什么颜色。

三束光重叠处

红光和绿光重叠时,我们看见黄色。绿光与蓝光混出青色,蓝光与红光混出品红色。三束光一起照向中央,重叠处接近白色。

红光、绿光和蓝光可以混合出许多颜色,人们把它们叫作色光三原色。改变每一束光的亮度,墙面上的颜色也跟着改变。

每打开一把手电筒,墙面就多收到一份光。人们把这种混色方式叫作加色混合。颜料会吸收一部分光,遵循另一套混色规律。

传统的 RGB 三圆图画的也是三个互相重叠的光斑。实验里的百分比表示每把手电筒开了多亮,100% 是全亮,0% 是关闭。

RGB 色彩模型#

把三束光缩进一个屏幕像素,计算机仍然控制红、绿、蓝三份光。

屏幕把一个像素分成三个发光部分。你在正常观看距离下看不清它们,眼睛会把三份光合成一个颜色。

计算机需要把每份光的亮度写成数字。常见的 RGB 图片给每个通道留下 8 个二进制位,8 位可以组成 28=2562^8=256 个数。数值从 0 开始,范围便是 0 到 255:

R = 255
G = 180
B = 0

255 表示红色通道开到最大,0 表示蓝色通道关闭。手电筒实验里的 100%,在这里对应 255。

可以拖动三个数字,看看发光部分和最终颜色怎样变化。

一个像素里的三个数字

每个通道都有 0 到 255。改变数字,观察三个发光部分和最终颜色。

RGB (255, 180, 0)#FFB400
放大的屏幕像素
正常距离看到的颜色

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,比较颜色走过的方向。

HSL#EC7813

把 L 从 0 推到 100,颜色会从黑色经过纯色,再走向白色。

HSV#FF8B26

把 V 从 0 推到 100,颜色从黑色走向当前色相能够达到的最亮状态。

HSL 的 L 到达 100% 时,三个 RGB 通道都会走到最大,结果是白色。HSV 的 V 到达 100% 时,最大的 RGB 通道先到上限,颜色仍保留当前色相。

HSL 与 HSV 服务于选色操作。它们的 L 和 V 都不等于人眼感受到的亮度,也不适合直接测量两个颜色的视觉距离。

Y′CbCr 图像模型#

屏幕需要三份原色光,保存图片时却可以换一种拆法。

我们的眼睛容易发现轮廓变糊,对细小的颜色变化没有同样敏感。图片和视频可以多保留一些明暗细节,少存一些颜色细节:

  • Y′ 记录画面的明暗;
  • Cb 记录颜色偏蓝还是偏黄,Cr 记录颜色偏红还是偏青。

先把 Cb 和 Cr 的细节调到“更少”,观察房子的轮廓。再把 Y′ 的细节调到“更少”,比较屋顶和窗户。

把一幅彩色图像拆开

分别减少明暗和颜色细节,看看哪一种变化更容易被发现。

Y′ 明暗细节
Cb / Cr 颜色细节
原始彩色图像
〉
Y′ 明暗
Cb 蓝↔黄
Cr 红↔青
〉
重新合成

先把 Cb / Cr 调到“更少”,再把 Y′ 调到“更少”。轮廓通常会在第二次变化时明显变糊。

颜色细节减少后,房子的边缘还能保持清楚。明暗细节减少后,屋顶和窗户很快变糊。JPEG 与许多视频格式会利用这项视觉特点减少数据量。

数字图片和视频使用的名称是 Y′CbCr。有些软件会把它宽泛地写成 YUV,两者的来源和定义并不相同。

光谱与眼睛看到的颜色#

RGB、HSL、HSV 和 Y′CbCr 都从屏幕上的三份数字出发。真实的光包含更多信息。

阳光、灯光和物体反射的光,往往包含许多波长。把每一段波长的强度画出来,会得到一条光谱。

屏幕只发出红、绿、蓝三种光,也能让我们看见白色。它发出的白光,与日光的光谱差别很大。

切换“连续白光”和“屏幕白光”,比较两条曲线。再切换“窄带黄光”和“红绿混合”。

不同的光谱,也可能看起来一样

切换光源,先比较曲线,再看人眼看到的颜色。

选择一种光
380 nm700 nm连续白光的光谱
人眼看到白色

许多波长都有能量,人眼会把它看成白色。

两种白光的曲线不同,眼睛都把它们看成白色。窄带黄光把能量集中在黄色附近,红绿混合使用两段分开的光,眼睛看到的结果仍是黄色。

光进入眼睛后,会刺激三类视锥细胞。大脑根据三类细胞的响应产生颜色感觉。两条不同的光谱可能得到相同的视觉结果,人们把这种现象叫作同色异谱。

屏幕的 RGB 数字描述不了整条光谱。我们还需要一套共同的数字,记录标准观察者看到的匹配结果。

XYZ 标准观察模型#

研究者向观察者显示一束目标光,再请他们调节几束测试光,直到两边看起来相同。大量颜色匹配实验给出了 X、Y、Z 三个数值。

XYZ 记录标准观察条件下的视觉匹配结果。X、Y、Z 不是三盏灯,也不对应屏幕里的三个发光部分。其中 Y 与亮度相关,三个数值合在一起确定颜色。

在下面的实验中切换四种光,比较它们的光谱与 XYZ 数值。

把看到的颜色放进 XYZ

切换光源,比较光谱与 XYZ 数值。

选择一种光
380 nm700 nm连续白光的光谱
人眼观察↓
X0.951Y1.000Z1.089
同一种视觉结果

它与屏幕白光落在相同的 XYZ 坐标。

连续白光与屏幕白光使用同一组 XYZ 数值,窄带黄光与红绿混合也使用同一组。实验用简化数据展示颜色匹配关系;真实测量还要规定观察者、照明和测量条件。

XYZ 方便不同设备和测量结果互相换算,但三个方向不适合直接操作。单独改变 X 时,明暗和颜色可能一起变化。

Lab 颜色比较模型#

Lab 在 XYZ 的基础上重新安排三个方向:

  • L* 表示更暗还是更亮;
  • a* 表示向绿色还是红色移动;
  • b* 表示向蓝色还是黄色移动。

一次只拖动一条控制杆,观察颜色沿哪个方向变化。

沿 L*、a*、b* 三个方向移动

一次只拖动一条控制杆,看看明暗和两个颜色方向有什么不同。

当前颜色Lab (68, 35, 55)

这里以 D65 作为参考白色。颜色超出当前屏幕能显示的范围时, 预览会把它收进可显示范围。

L* 主要改变明暗,a* 控制绿色到红色的方向,b* 控制蓝色到黄色的方向。Lab 还让相同大小的数值变化接近相似的视觉变化,因此常用来计算色差。

这种对应关系是近似。不同颜色区域仍会出现偏差,计算时也要指定参考白色。实验使用 D65 白色作为参照。

同一种颜色,不同的色彩模型#

选一个颜色,看看它换进六种模型后得到哪些数字。

同一种颜色,不同的色彩模型

选一个颜色,比较六种模型给出的数字和用途。

RGB232.0 · 121.0 · 36.0控制三种原色的亮度
XYZ40.4 · 31.0 · 5.5把颜色放进统一的观察标准
Lab62.5 · 37.8 · 61.3比较明暗与颜色方向
Y′CbCr138.5 · 72.3 · 186.9分开明暗与颜色信息
HSL26.0 · 81.0 · 52.5用色相、饱和度和明度选色
HSV26.0 · 84.5 · 91.0用色相、饱和度和最大通道选色
色彩模型这些数字用来做什么
RGB控制三种原色的亮度
HSL / HSV按色相、饱和度和明暗挑选颜色
Y′CbCr分开明暗与颜色信息
XYZ记录标准观察者的颜色匹配结果
Lab比较明暗、颜色方向与色差

颜色没有随着模型切换。我们只是在为不同任务重新安排数字:屏幕需要原色通道,绘图软件需要顺手的选色控件,压缩算法需要分开明暗与颜色,测量工作需要共同的比较基准。

同一种颜色可以写成多组数字。先看你准备操作什么,再选对应的色彩模型:控制屏幕用 RGB,挑颜色用 HSL 或 HSV,保存图像可以使用 Y′CbCr,比较观察结果则会用到 XYZ 与 Lab。

计算机是怎么表示颜色的:从色光三原色到不同的色彩模型
https://blog.cloudsir.top/posts/how-computers-represent-color/
作者
CloudSir
发布于
2026-08-31
许可协议
CC BY-NC-SA 4.0
赞一下 正在读取点赞
一文带你搞懂直流电机驱动(新版)

下拉加载评论