🎨 章节概览
本章深入探讨两种核心色彩空间:RGB(红绿蓝)和HSV(色调-饱和度-明度)。 通过平面散点图、三维散点图、切片可视化和极坐标展示,从多个维度理解色彩空间的数学结构。 这是数据可视化、计算机图形学和机器学习中色彩处理的理论基础。
革命性交互体验
通过直接操作理解RGB与HSV色彩空间的转换关系
💡 学习目标:在画布上直接取色,实时观察RGB和HSV数值的变化, 体验两种色彩空间的本质差异。通过"做中学"建立色彩空间的直觉理解。
🎨 色彩实验室(Color Picker Lab)
通过直接操作体验RGB和HSV色彩空间的转换关系
🧪 探索建议
- • 尝试在RGB空间中选择不同位置,观察HSV值的变化
- • 切换到HSV空间,体验极坐标取色的感觉
- • 调整B滑块(RGB模式)或V滑块(HSV模式),观察平面变化
- • 看看能否创造出"纯色"(高饱和度+高明度)
RGB 数值
HSV 数值
🔍 智能识别
📐 RGB ↔ HSV 转换公式
RGB → HSV
HSV → RGB
第一部分:RGB色彩空间可视化
RGB色彩空间是加法混色模型,由红(Red)、绿(Green)、蓝(Blue)三个颜色通道组成, 构成一个单位立方体 [0,1]³。立方体的8个顶点对应8种基本颜色,6个面分为鲜亮面和暗淡面。
平面散点展示RGB色彩空间
2D Scatter Plots · RGB立方体的6个平面
通过固定一个颜色通道(R、G或B),可以得到二维平面切片。 立方体有6个面:当固定值为0时得到暗淡面(无该颜色分量), 当固定值为1时得到鲜亮面(全该颜色分量)。 这6个平面完整描述了RGB立方体的外表面。
5.1 RGB平面散点图
通过固定一个颜色通道,展示其他两个通道的色彩分布
选择平面
固定通道值
色彩示例
💡 原理说明
- • RGB色彩空间是三维立方体 [0,1]³
- • 固定一个通道,可得到二维平面
- • 立方体有6个面:3个鲜亮面(含1)+ 3个暗淡面(含0)
- • 切换固定值可观察同一平面的不同明度
📐 数学原理
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))三维空间散点展示RGB色彩空间
3D Scatter Plots · RGB立方体的立体可视化
在三维空间中完整展示RGB色彩立方体。可以选择显示鲜亮三面(至少有一个通道为1)、暗淡三面(至少有一个通道为0)或稀疏采样(完整立方体)。 通过调整视角(elevation和azimuth),可以从不同角度观察立方体的结构。
5.2 RGB三维散点图
在三维空间中展示RGB色彩立方体的结构
显示模式
分辨率: 51×51×51
总点数: 51³ = 132651 个
预设视角
🔍 观察要点
- • 鲜亮三面: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值和颜色信息
- • 开启自动旋转,观察立方体的完整结构
- • 注意:对角线上的顶点(黑↔白)代表灰度轴
- • 发现规律:相邻顶点只有一个通道值不同
点击任意顶点查看详情
🎨 8个基本颜色
🎥 视角控制
💡 关键洞察
- • 加法混色:三原色相加得到白色
- • 对角线:(0,0,0)→(1,1,1) 是灰度轴
- • 互补色:立方体相对的顶点
- • 边的意义:只改变一个通道的值
切豆腐展示RGB色彩空间内部
Slicing Visualization · 切片展示内部结构
"切豆腐"是一种直观的内部结构可视化方法。通过固定一个颜色通道在不同数值(0, 0.2, 0.4, 0.6, 0.8, 1.0), 可以得到6个平行切片,展示RGB色彩空间从内到外的渐变过程。 这种方法类似于医学影像中的CT扫描,可以"透视"立方体内部。
5.3 RGB切片可视化(切豆腐)
通过切片展示RGB色彩空间的内部结构
切片方向
切片位置
R = 0.50快速切片
当前切片色彩预览
🔪 切豆腐原理
- • 固定一个颜色通道,观察其他两个通道的变化
- • 6个切片层展示从0到1的渐变过程
- • 类似切豆腐,可以看到内部结构
- • 点击小图可快速切换到该切片
💻 实现原理
colors_one_facet = colors_all[colors_all[:,0] == 0]colors_idx[:,0] = Red_level第二部分:HSV色彩空间可视化
HSV色彩空间使用圆柱坐标系表示颜色,更符合人类对颜色的直觉认知。 色调(Hue)对应极角(0-360°),饱和度(Saturation)对应极径(0-1), 明度(Value)控制整体亮度(0-1)。HSV空间在色彩选择器、图像处理中广泛应用。
HSV色彩空间:极坐标网格
Polar Grid · 规则网格采样
使用极坐标规则网格采样HSV色彩空间。 径向(饱和度)和角向(色调)都采用均匀网格,生成 num_r × num_theta 个散点。 通过调整明度(Value),可以观察从亮到暗的色彩变化。 这种方法类似于 np.meshgrid() 在极坐标下的应用。
5.4 HSV极坐标色盘
使用极坐标网格展示HSV色彩空间,色调为极角,饱和度为极径
明度 (Value)
V = 1.00快速选择Value
🎨 极坐标网格
- • 规则网格:径向和角向均匀分布
- • 21层径向:饱和度从0到1
- • 120个角向:色调覆盖360°
- • 点击小图可快速切换明度
💻 实现原理
rr, tt = np.meshgrid(r_array, t_array)c = [colorsys.hsv_to_rgb(*x) for x in zip(h, s, v)]ax = fig.add_subplot(projection='polar')HSV色彩空间:均匀散点
Uniform Distribution · 视觉均匀采样
为了避免极坐标网格在中心区域过密、边缘区域过疏的问题, 使用均匀散点分布:每层散点数量与半径成正比(n = r × num_n)。 这样可以实现视觉上的均匀分布,更好地展示色彩空间的完整结构。 与5.4的极坐标网格相比,这种方法更适合打印和展示。
5.5 HSV均匀散点色盘
每层散点数与半径成正比,实现视觉上的均匀分布
明度 (Value)
V = 1.00快速选择Value
🔄 与极坐标网格的区别
- • 规则矩形网格:rr, tt = meshgrid(r, t)
- • 每层散点数相同
- • 中心区域散点密集
- • 散点数 ∝ 半径:n = r × num_n
- • 每层散点数不同
- • 视觉上更均匀
散点分布统计
💻 实现原理
n = r * num_n(每层散点数与半径成正比)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
HSV → RGB
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/🎯实际应用场景
RGB色彩空间
- • 显示器和投影仪(RGB像素)
- • 数码相机传感器(Bayer滤镜)
- • 图像文件存储(JPEG, PNG)
- • Web颜色(#RRGGBB)
HSV色彩空间
- • 图像编辑软件的色彩选择器
- • 计算机视觉中的颜色分割
- • 物体跟踪(如肤色检测)
- • 图像增强和调色