一句话定义:色彩空间(color space)规定“一串数字代表什么颜色”,色深(bit depth)规定“每个数字能分多少级”。
两种排法:均匀的尺子和偏心的尺子
把亮度从最暗到最亮排成一条线,有两种排法。
一种叫线性空间(linear space):数值翻倍,光的强度就真的翻倍,像一根刻度均匀的尺子,物理上最诚实。
另一种叫 sRGB:它照顾人眼的脾气。人眼对暗部的差别格外敏感,对亮部却很迟钝,所以 sRGB 把更多刻度留给暗部、把刻度拉稀留给亮部,像一根“暗部密、亮部疏”的偏心尺子。两者之间靠一条固定曲线来回换算,这条曲线通常叫伽马(gamma),sRGB 大致相当于 2.2 次方。
发灰的根源:算的地方和看的地方不一样
物理上,光的混合、模糊、缩放、插值、超分都是“相加”,应该在线性空间里算。但显示器、图片文件、绝大多数训练数据都是 sRGB 编码的。
于是只要链路上有一环搞错,画面就出问题:
拿线性空间的数值直接当 sRGB 显示,暗部会被整体抬高——黑不够黑,对比度塌下去,看上去像蒙了层雾。这是生成图发灰最常见的来源。反过来,在 sRGB 数值上直接做平均,结果又会偏亮偏灰。
颜色对不上原图,通常也是这两类原因:要么空间不匹配(文件没带色彩配置文件,被当成 sRGB 硬解),要么伽马来回串了门。跟提示词写得准不准,关系不大。
色深是另一件事
色深管的是“能分多少档”。8 位每通道 = 256 级,10 位、16 位就是更多级。级数不够,渐变的天空会一圈一圈出现色带(banding)。
| 线性空间 | sRGB | |
|---|---|---|
| 数值含义 | 正比于光的强度 | 近似人眼的感觉 |
| 适合做的事 | 混合、模糊、缩放、合成 | 存储、显示、传图 |
| 8 位精度 | 暗部容易断层 | 基本够用 |
注意最后一行:线性空间对色深的要求比 sRGB 高得多。所以常见做法是——在 16 位下用线性空间算,最后一步再转回 sRGB 编码的 8 位交付。
别把三个词混在一起
- 色彩模型:RGB、CMYK,说的是“用哪几个分量描述颜色”。
- 色彩空间:sRGB、Display P3,说的是“这些分量具体对应哪种颜色”。
- 色深:每个分量用几位存。
对你有啥用
做生成模型或图像处理:管线里每个环节都要明确自己在哪个空间,别让 sRGB 和线性反复串门;后处理尽量在线性空间做,输出前再编码。
普通职场人:导出图片时勾上 sRGB 并保留配置文件;素材发灰先怀疑空间不匹配,别急着换显示器。具体软件的选项名称和默认行为,以官方页面为准。
