第三章 色彩空间与色彩理论:RGB、HSV、Lab 详解
做暗光增强,说白了就是在跟像素值打交道。但像素值本身并不直观——你盯着一个 RGB 三元组 (12, 45, 78),能想象出它是什么颜色吗?反正我不能。
所以这一章,我们来聊聊色彩空间。我个人的经验是:选对色彩空间,后续的增强工作能省一半力气。
3.1 RGB 色彩空间:最熟悉的陌生人
RGB 是硬件最爱的颜色表达方式。显示器、摄像头、图像传感器,底层全是 RGB。它用红、绿、蓝三个通道的强度来混合颜色,每个通道通常 0-255(8 位)。
但 RGB 有个大问题:通道之间高度相关。你调整亮度,三个通道一起变;你调色温,三个通道也跟着一起变。这在暗光增强里非常头疼——你很难单独控制「亮度」和「颜色」。
核心认知:RGB 适合存储和显示,但不适合图像处理。尤其是暗光场景,RGB 三个通道的信噪比差异巨大,直接处理容易放大噪声。
我记得有一次做夜景视频增强,直接在 RGB 空间做直方图均衡化,结果绿色通道的噪声被放大了三倍,画面一片花绿。后来我学乖了——先转色彩空间,再动手。
3.2 HSV 色彩空间:把颜色拆开看
HSV 把颜色拆成三个独立分量:
- H(Hue,色调):0°-360°,描述是什么颜色(红、绿、蓝等)
- S(Saturation,饱和度):0-1,描述颜色有多纯
- V(Value,明度):0-1,描述颜色有多亮
为什么 HSV 好用?因为 V 通道独立于 H 和 S。你调整亮度,不会改变颜色本身。这在暗光增强里简直是救命特性。
我的习惯:做暗光增强时,先转 HSV,只对 V 通道做亮度提升和对比度调整,H 和 S 通道保持不动或只做轻微去噪。这样能最大程度保留原始色彩。
但 HSV 也有坑。H 通道是角度值,0° 和 360° 其实是同一个颜色。做直方图操作时如果不做环形处理,会出现颜色跳变。我曾经因为这个 bug 调试了一整天——画面里红色区域突然变成紫色,找了好久才发现是 H 通道的边界问题。
3.3 Lab 色彩空间:人眼视角的终极方案
Lab 是 CIE 制定的色彩空间,目标是感知均匀——两个颜色在 Lab 空间里的欧氏距离,大致等于人眼感知到的颜色差异。
- L(Lightness,亮度):0-100,纯黑到纯白
- a(绿-红轴):负值偏绿,正值偏红
- b(蓝-黄轴):负值偏蓝,正值偏黄
Lab 最大的优势是:L 通道完全独立于 a、b 通道。你可以在 L 通道上做任何亮度调整,a、b 通道纹丝不动。而且 Lab 的色域比 RGB 大得多,能覆盖所有人眼可见的颜色。
注意:Lab 空间不是线性空间。从 RGB 转到 Lab 需要经过 XYZ 中间空间,而且转换公式里包含非线性变换。代码实现时要注意数值范围,尤其是 L 通道的 0-100 和 a、b 通道的 -128~127 之间的映射关系。
我个人在色彩重建任务中,90% 的情况都用 Lab 空间。尤其是做色彩校正和色温调整时,在 a、b 通道上操作比在 RGB 上直接调三个通道要直观得多。
3.4 色温与白平衡:让白色回归白色
色温这个概念,说白了就是光源的颜色倾向。低色温(2000K-3000K)偏黄,像蜡烛光;高色温(6000K-8000K)偏蓝,像阴天的天空。
暗光场景下,光源色温往往不稳定。路灯可能是 2700K 的暖黄光,月光可能是 4100K 的冷白光。如果不做白平衡校正,整张照片会偏色严重。
白平衡的核心目标:找到场景中应该是白色的区域,然后调整 R、G、B 通道的增益,让这个区域变成纯白(R=G=B)。
常用的白平衡方法:
| 方法 | 原理 | 适用场景 | 缺点 |
|---|---|---|---|
| 灰度世界法 | 假设场景平均颜色为灰色 | 色彩丰富的场景 | 大块单色场景会失效 |
| 完美反射法 | 假设最亮像素为白色 | 有高光区域的场景 | 无高光时效果差 |
| 色温估计法 | 根据统计模型估计色温 | 已知光源类型 | 需要先验知识 |
| 学习法(CNN) | 用神经网络预测白平衡参数 | 复杂混合光源 | 需要大量标注数据 |
避坑指南:我曾经在夜景视频里用灰度世界法做白平衡,结果因为画面大部分是黑色天空,算法把黑色当成了灰色,整段视频偏红得没法看。后来我加了前景检测,只对前景区域做白平衡估计,效果就好多了。
3.5 色彩重建的目标与评价指标
色彩重建,就是让增强后的图像颜色尽可能接近真实场景的颜色。但「真实」本身很难定义——暗光下我们根本看不清真实颜色是什么。
所以评价指标就很重要了。常用的有三个:
PSNR(峰值信噪比)
衡量像素级别的重建误差。值越大越好,通常 30dB 以上算不错。
PSNR = 10 * log10(MAX² / MSE)
其中 MAX 是像素最大值(255),MSE 是均方误差。
PSNR 的局限:它只关心像素值是否接近,不关心人眼看起来是否舒服。有时候 PSNR 很高,但画面看起来就是怪怪的。我见过 PSNR 38dB 但颜色完全偏掉的案例。
SSIM(结构相似性)
从亮度、对比度、结构三个维度比较两幅图像的相似度。值在 0-1 之间,越接近 1 越好。
SSIM(x, y) = [l(x,y)]^α · [c(x,y)]^β · [s(x,y)]^γ
SSIM 比 PSNR 更贴近人眼感知,但计算量也更大。
Delta E(色差)
在 Lab 空间里计算两个颜色的欧氏距离。Delta E 越小,颜色越接近。
ΔE = √[(L₁-L₂)² + (a₁-a₂)² + (b₁-b₂)²]
人眼能感知的最小色差大约是 Delta E = 1。Delta E < 3 通常认为颜色重建合格。
| 指标 | 范围 | 关注点 | 暗光场景下的表现 |
|---|---|---|---|
| PSNR | 0-∞ (dB) | 像素级误差 | 噪声敏感,容易偏低 |
| SSIM | 0-1 | 结构相似性 | 对亮度变化不敏感,更稳定 |
| Delta E | 0-∞ | 颜色差异 | 最能反映偏色问题 |
我的建议:做色彩重建评估时,三个指标一起看。PSNR 看整体误差,SSIM 看结构保留,Delta E 看颜色准确度。如果 PSNR 高但 Delta E 也高,说明图像虽然像素接近但颜色偏了——这种情况在暗光增强里很常见。
3.6 本章知识体系
下面这张图总结了三个色彩空间的关系、白平衡的作用以及评价指标的定位。你可以把它当作本章的思维导图。
嗯,这张图把本章的核心脉络串起来了。你从 RGB 出发,可以转到 HSV 或 Lab 做处理,然后做白平衡校正,最后用三个指标来评估效果。每一步都有对应的工具和方法。