3. Gamma 定义与起源:为什么需要 Gamma?CRT 显示器的物理特性与历史渊源
说到 Gamma,很多人第一反应就是「调亮度」或者「调对比度」。其实没那么简单。Gamma 的诞生,跟老式 CRT 显示器脱不开关系。我刚开始接触图像处理时,也被这个曲线搞得一头雾水——明明像素值是 128,显示出来却不是一半亮度?后来才明白,这背后是物理定律在作祟。
3.1 什么是 Gamma?一个直观的定义
Gamma,说白了就是一个幂律指数。它描述了输入信号和输出亮度之间的关系。数学上很简单:
输出亮度 = (输入信号) ^ Gamma
如果 Gamma = 1,那就是线性关系——输入 0.5,输出就是 50% 亮度。但现实世界不这么玩。CRT 显示器的 Gamma 大约在 2.2 到 2.5 之间。这意味着:
- 输入 0.5(128/255),输出只有 0.5^2.2 ≈ 0.22,也就是 22% 亮度
- 输入 0.7(178/255),输出 0.7^2.2 ≈ 0.45,不到一半
- 只有输入接近 1.0 时,输出才接近线性
核心结论:Gamma 让暗部被「压缩」了,亮部被「拉伸」了。这不是 bug,是物理特性。
3.2 CRT 显示器的物理特性:为什么会有 Gamma?
CRT 显示器的核心是电子枪。电子枪发射电子束,轰击荧光粉,荧光粉发光。这里有个关键点:电子枪的电压-电流关系不是线性的。
我记得第一次拆开旧 CRT 显示器时,看到那个巨大的电子枪组件,才真正理解为什么会有 Gamma。电子枪的阴极加热后发射电子,控制栅极的电压变化会影响电子束的强度。但这个关系是幂律的——电压翻倍,电流不是翻倍,而是翻 2.2 倍左右。
更具体地说:
- 电子枪特性:束流强度 ≈ (栅极电压)^γ₁,γ₁ 约 1.5~1.7
- 荧光粉响应:发光亮度 ≈ (束流强度)^γ₂,γ₂ 约 1.3~1.5
- 总 Gamma:γ_total = γ₁ × γ₂ ≈ 2.2~2.5
我个人的经验:在项目中校准显示器时,我习惯先用仪器测一下实际 Gamma。标称 2.2 的显示器,实测可能是 2.35 甚至 2.5。别信标签,信数据。
3.3 Gamma 的历史渊源:为什么是 2.2?
你可能会问:为什么偏偏是 2.2?不是 2.0,也不是 3.0?
这得追溯到 20 世纪 50 年代。当时电视广播刚兴起,工程师们发现了一个问题:CRT 显示器的 Gamma 大约在 2.5 左右,但人眼对亮度的感知也不是线性的。人眼在暗部更敏感,在亮部更迟钝。
于是,一个聪明的折中方案诞生了:
- 在发送端(摄像机)做一次 Gamma 校正,把信号压暗
- 在接收端(CRT 显示器)自然地把信号提亮
- 最终效果:人眼看起来是线性的
这个校正指数被定为 0.45(即 1/2.2)。发送端用 0.45 压缩,接收端用 2.2 展开,乘积 ≈ 1.0,完美还原。
注意:这个 0.45 不是随便选的。我曾经在项目中试过 0.5 和 0.4,结果画面要么太暗要么太亮。2.2 是经过大量主观测试得出的最优值,别乱改。
3.4 Gamma 的数学表达与标准
现在我们来点硬核的。Gamma 校正的标准公式是:
V_out = V_in ^ (1 / Gamma)
其中:
- V_in:输入信号(归一化到 0~1)
- V_out:校正后的信号
- Gamma:目标 Gamma 值(通常为 2.2)
但实际应用中,为了处理接近 0 的暗部噪声,标准中加了一个小偏移量:
V_out = (V_in + 0.055) / 1.055 ^ (1 / 2.4) 当 V_in > 0.04045
V_out = V_in / 12.92 当 V_in ≤ 0.04045
这是 sRGB 标准用的公式。为什么这么复杂?因为纯幂律曲线在接近 0 时斜率太陡,会导致量化噪声被放大。加一段线性区,暗部更干净。
| 标准 | Gamma 值 | 线性段阈值 | 应用场景 |
|---|---|---|---|
| sRGB | 2.2 | 0.04045 | Web、PC 显示 |
| Rec. 709 | 2.4 | 0.018 | HDTV 广播 |
| Rec. 2020 | 2.4 | 0.018 | 4K/8K UHD |
| DCI-P3 | 2.6 | 无线性段 | 数字影院 |
避坑指南:我曾经在项目中直接用了纯幂律曲线做 Gamma 校正,结果暗部出现明显的色带。后来换成 sRGB 的分段公式,问题立刻解决。记住:暗部一定要用线性段保护。
3.5 Gamma 与色彩空间的关联
Gamma 不是孤立存在的。它跟色彩空间绑定在一起。sRGB、Adobe RGB、ProPhoto RGB,每个色彩空间都有自己的 Gamma 曲线。
举个例子:
- sRGB:Gamma 2.2,分段曲线,适合 Web 和普通显示
- Adobe RGB:Gamma 2.2,纯幂律曲线,适合印刷预览
- ProPhoto RGB:Gamma 1.8,纯幂律曲线,色域极广
你想想看,如果在 sRGB 空间里处理图片,却用 Adobe RGB 的 Gamma 曲线去显示,颜色肯定不对。这就是为什么色彩管理那么重要。
关键点:Gamma 是色彩空间的「骨架」。换 Gamma 等于换色彩空间,别混用。
3.6 知识体系:Gamma 的核心逻辑
下面这张图总结了 Gamma 的来龙去脉。我建议你仔细看看,理解每个环节的因果关系。
3.7 实战中的 Gamma 陷阱
说了这么多理论,来点实际的。我在项目中遇到过几个常见的 Gamma 坑:
陷阱 1:在 sRGB 空间里用线性 Gamma 做混合。比如做透明度混合时,如果直接在 sRGB 空间里算,结果会偏暗。正确做法是先转线性空间,混合完再转回 sRGB。
陷阱 2:不同软件对 Gamma 的处理不一致。Photoshop 默认用 sRGB,但某些渲染器用线性空间。我曾经在项目里因为没注意这个,导致贴图颜色对不上,排查了两天才发现是 Gamma 空间没统一。
我的建议:在项目一开始就定好色彩空间和 Gamma 标准。所有素材、所有工具都统一。别等到后期再改,那会是一场灾难。
3.8 小结
Gamma 不是玄学,它是 CRT 物理特性的直接产物。2.2 这个值,是工程师们在物理限制和人眼感知之间找到的最佳平衡点。理解 Gamma,就是理解显示器的「语言」。后面我们会深入实战,看看怎么在代码里做 Gamma 校正,怎么用 LUT 来加速,怎么在不同色彩空间之间转换。