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 左右,但人眼对亮度的感知也不是线性的。人眼在暗部更敏感,在亮部更迟钝。

于是,一个聪明的折中方案诞生了:

  1. 在发送端(摄像机)做一次 Gamma 校正,把信号压暗
  2. 在接收端(CRT 显示器)自然地把信号提亮
  3. 最终效果:人眼看起来是线性的

这个校正指数被定为 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 的来龙去脉。我建议你仔细看看,理解每个环节的因果关系。

Gamma 核心知识体系 Gamma 核心知识体系 CRT 物理特性 电子枪 + 荧光粉 幂律关系 输出 = 输入 ^ Gamma 人眼感知折中 暗部敏感 + 亮部迟钝 行业标准 sRGB / Rec.709 / DCI-P3 Gamma 校正 发送端压缩 + 接收端展开 色彩空间绑定 Gamma 是色彩空间的骨架 核心逻辑 CRT 物理特性 → 幂律关系 → 人眼感知折中 → 行业标准 → 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 来加速,怎么在不同色彩空间之间转换。