← 返回Book 2目录
第05章

色彩空间

Color Space · RGB与HSV色彩空间可视化

从平面到三维,从切片到极坐标,全方位理解色彩空间的数学结构

🎨 章节概览

本章深入探讨两种核心色彩空间:RGB(红绿蓝)和HSV(色调-饱和度-明度)。 通过平面散点图、三维散点图、切片可视化和极坐标展示,从多个维度理解色彩空间的数学结构。 这是数据可视化、计算机图形学和机器学习中色彩处理的理论基础。

🔲
RGB色彩空间
三维立方体 [0,1]³ · 平面+立体+切片
🎡
HSV色彩空间
圆柱坐标系 · 极坐标+均匀散点
🚀

革命性交互体验

通过直接操作理解RGB与HSV色彩空间的转换关系

💡 学习目标:在画布上直接取色,实时观察RGB和HSV数值的变化, 体验两种色彩空间的本质差异。通过"做中学"建立色彩空间的直觉理解。

🎨 色彩实验室(Color Picker Lab)

通过直接操作体验RGB和HSV色彩空间的转换关系

💡 点击画布选择颜色

🧪 探索建议

  • • 尝试在RGB空间中选择不同位置,观察HSV值的变化
  • • 切换到HSV空间,体验极坐标取色的感觉
  • • 调整B滑块(RGB模式)或V滑块(HSV模式),观察平面变化
  • • 看看能否创造出"纯色"(高饱和度+高明度)

RGB 数值

R0.500
G0.500
B0.500

HSV 数值

Hue
0°
Saturation
0.00
Value
0.50

🔍 智能识别

🔥 暖色调(红-黄)
🎨 低饱和(灰度系)
🌓 中间色
⚪⚫ 灰度色
HEX 颜色值
#808080

📐 RGB ↔ HSV 转换公式

RGB → HSV
max = max(R, G, B)
min = min(R, G, B)
Δ = max - min
V = max
S = Δ / max (if max ≠ 0)
H = 60° × {分段函数}
根据max是R/G/B来决定
HSV → RGB
C = V × S
X = C × (1 - |((H/60°) mod 2) - 1|)
m = V - C
(R', G', B') = {根据H分段}
H的6个区间对应不同组合
(R, G, B) = (R'+m, G'+m, B'+m)
💡 关键洞察:RGB是"硬件空间"(显示器像素),HSV是"感知空间"(符合人类直觉)。 Hue代表"什么颜色",Saturation代表"纯不纯",Value代表"亮不亮"。

第一部分:RGB色彩空间可视化

RGB色彩空间是加法混色模型,由红(Red)、绿(Green)、蓝(Blue)三个颜色通道组成, 构成一个单位立方体 [0,1]³。立方体的8个顶点对应8种基本颜色,6个面分为鲜亮面和暗淡面。

5.1

平面散点展示RGB色彩空间

2D Scatter Plots · RGB立方体的6个平面

通过固定一个颜色通道(R、G或B),可以得到二维平面切片。 立方体有6个面:当固定值为0时得到暗淡面(无该颜色分量), 当固定值为1时得到鲜亮面(全该颜色分量)。 这6个平面完整描述了RGB立方体的外表面。

5.1 RGB平面散点图

通过固定一个颜色通道,展示其他两个通道的色彩分布

0.00.00.20.20.40.40.60.60.80.81.01.0GreenBlue
当前平面配置
Red = 0 (黑) ·Green 和 Blue 变化范围 [0, 1]

选择平面

固定通道值

色彩示例

(0.0, 0.0)
(1.0, 0.0)
(0.0, 1.0)
(1.0, 1.0)
(0.5, 0.5)

💡 原理说明

  • • RGB色彩空间是三维立方体 [0,1]³
  • • 固定一个通道,可得到二维平面
  • • 立方体有6个面:3个鲜亮面(含1)+ 3个暗淡面(含0)
  • • 切换固定值可观察同一平面的不同明度

📐 数学原理

RGB立方体:C = { (r, g, b) | 0 ≤ r, g, b ≤ 1 }
平面切片:
  • • R=0 或 R=1 → 蓝绿平面(G-B平面)
  • • G=0 或 G=1 → 红蓝平面(R-B平面)
  • • B=0 或 B=1 → 红绿平面(R-G平面)
数据生成:xx, yy = np.meshgrid(linspace(0,1,21), linspace(0,1,21))
5.2

三维空间散点展示RGB色彩空间

3D Scatter Plots · RGB立方体的立体可视化

在三维空间中完整展示RGB色彩立方体。可以选择显示鲜亮三面(至少有一个通道为1)、暗淡三面(至少有一个通道为0)或稀疏采样(完整立方体)。 通过调整视角(elevation和azimuth),可以从不同角度观察立方体的结构。

5.2 RGB三维散点图

在三维空间中展示RGB色彩立方体的结构

RGBElevation: 34°Azimuth: 38°点数: 7651

显示模式

分辨率: 51×51×51

总点数: 51³ = 132651 个

34°
38°

预设视角

🔍 观察要点

  • • 鲜亮三面:R=1, G=1, B=1的平面
  • • 暗淡三面:R=0, G=0, B=0的平面
  • • (0,0,0):黑色,立方体原点
  • • (1,1,1):白色,立方体顶点

💻 技术实现

三维网格生成:xx1, xx2, xx3 = np.meshgrid(x1, x2, x3)
面具筛选(鲜亮):colors_bright = colors_all[np.any(colors_all == 1, axis=1)]
面具筛选(暗淡):colors_dark = colors_all[np.any(colors_all == 0, axis=1)]
正交投影:ax.set_proj_type('ortho')

🎮交互增强:RGB立方体探索器

通过点击8个顶点,直观理解RGB色彩空间的结构。开启自动旋转,从不同角度观察立方体。 这是对5.2节三维散点图的交互增强版本。

🎲 RGB立方体探索器

交互式探索RGB色彩立方体的8个顶点和12条边

⚫🔴🟢🔵🟡🟣🔷⚪RGB

🧭 探索建议

  • • 点击任意顶点,查看其RGB值和颜色信息
  • • 开启自动旋转,观察立方体的完整结构
  • • 注意:对角线上的顶点(黑↔白)代表灰度轴
  • • 发现规律:相邻顶点只有一个通道值不同
👆

点击任意顶点查看详情

🎨 8个基本颜色

🎥 视角控制

Elevation(仰角)34°
Azimuth(方位角)38°

💡 关键洞察

  • • 加法混色:三原色相加得到白色
  • • 对角线:(0,0,0)→(1,1,1) 是灰度轴
  • • 互补色:立方体相对的顶点
  • • 边的意义:只改变一个通道的值
5.3

切豆腐展示RGB色彩空间内部

Slicing Visualization · 切片展示内部结构

"切豆腐"是一种直观的内部结构可视化方法。通过固定一个颜色通道在不同数值(0, 0.2, 0.4, 0.6, 0.8, 1.0), 可以得到6个平行切片,展示RGB色彩空间从内到外的渐变过程。 这种方法类似于医学影像中的CT扫描,可以"透视"立方体内部。

5.3 RGB切片可视化(切豆腐)

通过切片展示RGB色彩空间的内部结构

R = 0.50切片位置: 50%
R=0.0
R=0.2
R=0.4
R=0.6
R=0.8
R=1.0

切片方向

切片位置

R = 0.50
0.00 (黑)0.50 (中)1.00 (白)

快速切片

当前切片色彩预览

🔪 切豆腐原理

  • • 固定一个颜色通道,观察其他两个通道的变化
  • • 6个切片层展示从0到1的渐变过程
  • • 类似切豆腐,可以看到内部结构
  • • 点击小图可快速切换到该切片

💻 实现原理

切片生成:colors_one_facet = colors_all[colors_all[:,0] == 0]
赋值切片:colors_idx[:,0] = Red_level
多层可视化: 使用for循环生成6个切片层,每层固定通道值在[0, 0.2, 0.4, 0.6, 0.8, 1.0]

第二部分:HSV色彩空间可视化

HSV色彩空间使用圆柱坐标系表示颜色,更符合人类对颜色的直觉认知。 色调(Hue)对应极角(0-360°),饱和度(Saturation)对应极径(0-1), 明度(Value)控制整体亮度(0-1)。HSV空间在色彩选择器、图像处理中广泛应用。

5.4

HSV色彩空间:极坐标网格

Polar Grid · 规则网格采样

使用极坐标规则网格采样HSV色彩空间。 径向(饱和度)和角向(色调)都采用均匀网格,生成 num_r × num_theta 个散点。 通过调整明度(Value),可以观察从亮到暗的色彩变化。 这种方法类似于 np.meshgrid() 在极坐标下的应用。

5.4 HSV极坐标色盘

使用极坐标网格展示HSV色彩空间,色调为极角,饱和度为极径

0°60°120°180°240°300°HSV色盘 (V=1.0)
V=1.0
V=0.8
V=0.6
V=0.4
V=0.2
V=0.0

明度 (Value)

V = 1.00
0.0 (黑)0.5 (中)1.0 (亮)

快速选择Value

色调 (Hue)
极角 θ ∈ [0, 360°],表示色相环位置
饱和度 (Saturation)
极径 ρ ∈ [0, 1],0为中心(无色),1为边缘(纯色)
明度 (Value)
V ∈ [0, 1],控制整体亮度,0为黑色,1为最亮

🎨 极坐标网格

  • • 规则网格:径向和角向均匀分布
  • • 21层径向:饱和度从0到1
  • • 120个角向:色调覆盖360°
  • • 点击小图可快速切换明度

💻 实现原理

极坐标网格:rr, tt = np.meshgrid(r_array, t_array)
HSV转RGB:c = [colorsys.hsv_to_rgb(*x) for x in zip(h, s, v)]
极坐标绘图:ax = fig.add_subplot(projection='polar')
5.5

HSV色彩空间:均匀散点

Uniform Distribution · 视觉均匀采样

为了避免极坐标网格在中心区域过密、边缘区域过疏的问题, 使用均匀散点分布:每层散点数量与半径成正比(n = r × num_n)。 这样可以实现视觉上的均匀分布,更好地展示色彩空间的完整结构。 与5.4的极坐标网格相比,这种方法更适合打印和展示。

5.5 HSV均匀散点色盘

每层散点数与半径成正比,实现视觉上的均匀分布

0°60°120°180°240°300°HSV均匀散点 (V=1.0)总点数: 1261均匀分布
V=1.0
V=0.8
V=0.6
V=0.4
V=0.2
V=0.0

明度 (Value)

V = 1.00
0.0 (黑)0.5 (中)1.0 (亮)

快速选择Value

🔄 与极坐标网格的区别

极坐标网格(5.4)
  • • 规则矩形网格:rr, tt = meshgrid(r, t)
  • • 每层散点数相同
  • • 中心区域散点密集
均匀散点(5.5)
  • • 散点数 ∝ 半径:n = r × num_n
  • • 每层散点数不同
  • • 视觉上更均匀

散点分布统计

半径 0.0:1 个点
半径 0.2:24 个点
半径 0.4:48 个点
半径 0.6:72 个点
半径 0.8:96 个点
半径 1.0:120 个点
色调 (Hue)
极角 θ ∈ [0, 360°],表示色相环位置
饱和度 (Saturation)
极径 ρ ∈ [0, 1],0为中心(无色),1为边缘(纯色)
明度 (Value)
V ∈ [0, 1],控制整体亮度,0为黑色,1为最亮

💻 实现原理

均匀采样核心:n = r * num_n(每层散点数与半径成正比)
for循环生成:for r_i, n_i in zip(r, n): ...
优势:避免中心区域散点过密,边缘区域过疏,实现视觉上的均匀分布

📚章节总结

RGB色彩空间(加法混色)

  • ✓ 三维立方体 [0,1]³,8个顶点对应基本颜色
  • ✓ 6个面:3个鲜亮面 + 3个暗淡面
  • ✓ 平面切片:固定一个通道观察其他两个
  • ✓ 切豆腐:多层切片展示内部结构
  • ✓ 应用:显示器、数码相机、图像存储

HSV色彩空间(感知模型)

  • ✓ 圆柱坐标系:Hue × Saturation × Value
  • ✓ Hue(色调):极角 [0°, 360°],色相环
  • ✓ Saturation(饱和度):极径 [0, 1],纯度
  • ✓ Value(明度):[0, 1],亮度
  • ✓ 应用:色彩选择器、图像分割、物体识别

💡 核心洞察:RGB空间适合硬件表示(显示器RGB像素), HSV空间更符合人类感知("红色"、"浅粉"等描述)。 在计算机视觉中,HSV常用于颜色分割(如肤色检测),因为Hue对光照变化更鲁棒。

🔄RGB ↔ HSV 转换

RGB → HSV

V = max(R, G, B)
S = (V - min(R,G,B)) / V (if V ≠ 0)
H = f(R, G, B) (分段函数)

HSV → RGB

C = V × S
X = C × (1 - |((H/60) mod 2) - 1|)
m = V - C
(R,G,B) = (R'+m, G'+m, B'+m)
Python实现:import colorsys提供 hsv_to_rgb() 和rgb_to_hsv() 函数

💻Python代码参考

本章内容对应以下Jupyter Notebook代码文件:

BK_2_Ch05_01.ipynb平面散点展示RGB色彩空间(6张图)
BK_2_Ch05_02.ipynb三维空间散点展示RGB色彩空间(10张图)
BK_2_Ch05_03.ipynb切豆腐展示RGB色彩空间内部(3张大图)
BK_2_Ch05_04.ipynbHSV色彩空间,极坐标(7张图)
BK_2_Ch05_05.ipynbHSV色彩空间,均匀散点(7张图)
📁 代码位置:books/Book2_Beauty-of-Data-Visualization/Book2_Ch05_Python_Codes/
总计 33张图片,完整展示两种色彩空间的结构

🎯实际应用场景

RGB色彩空间

  • • 显示器和投影仪(RGB像素)
  • • 数码相机传感器(Bayer滤镜)
  • • 图像文件存储(JPEG, PNG)
  • • Web颜色(#RRGGBB)

HSV色彩空间

  • • 图像编辑软件的色彩选择器
  • • 计算机视觉中的颜色分割
  • • 物体跟踪(如肤色检测)
  • • 图像增强和调色