3、Gamma校正原理:Gamma曲线数学定义、显示设备非线性特性、Gamma编码与解码
Gamma校正(Gamma Correction)是色彩管理中最基础、最核心的非线性变换。它起源于CRT(阴极射线管)显示器的物理特性,并延续至今成为整个数字成像与显示系统的标准环节。理解Gamma曲线的数学定义、显示设备的非线性响应以及编码/解码流程,是配置DRM CRTC Gamma LUT的前提。
3.1 Gamma曲线的数学定义
Gamma曲线本质上是一个幂律函数(Power-Law Function),其数学表达式为:
V_out = A × (V_in)^γ
其中:
- V_in:输入信号(归一化到 [0, 1] 区间)
- V_out:输出信号(归一化到 [0, 1] 区间)
- γ (Gamma):幂指数,决定曲线的弯曲程度
- A:增益系数(通常为1.0,用于调整整体亮度)
当 γ = 1 时,曲线为线性直线(V_out = V_in)。当 γ > 1 时,曲线向下弯曲(压缩暗部、拉伸亮部);当 γ < 1 时,曲线向上弯曲(拉伸暗部、压缩亮部)。
3.2 显示设备的非线性特性
所有物理显示设备(CRT、LCD、OLED、投影仪)都具有固有的非线性光电转换特性。这意味着输入的数字信号强度与屏幕实际发出的光强度之间不是简单的线性关系。
3.2.1 CRT显示器的物理Gamma
CRT显示器的发光强度由电子枪的加速电压控制,其物理关系近似为:
Luminance ∝ (Voltage)^γ_crt
其中 γ_crt 通常在 2.2 ~ 2.5 之间。这意味着如果输入电压线性增加,屏幕亮度会以幂律方式增长,导致暗部区域亮度变化缓慢,亮部区域变化剧烈。
3.2.2 LCD/OLED的Gamma特性
现代LCD和OLED显示器虽然物理原理不同,但为了兼容已有的视频标准和色彩空间,其电光转换函数(EOTF)仍然被设计为近似 Gamma 2.2 曲线。部分高端显示器支持硬件校准,可以切换不同的Gamma曲线(如 sRGB、DCI-P3、BT.1886)。
| 设备类型 | 物理Gamma范围 | 标准EOTF | 备注 |
|---|---|---|---|
| CRT显示器 | 2.2 ~ 2.5 | Gamma 2.2 | 原始物理特性,无补偿 |
| LCD显示器 | 2.0 ~ 2.4 | Gamma 2.2 / sRGB | 通过液晶分子扭转控制透光率 |
| OLED显示器 | 2.2 ~ 2.4 | Gamma 2.2 / BT.1886 | 自发光像素,黑位更低 |
| 投影仪 | 2.0 ~ 2.6 | Gamma 2.2 / 2.4 | 受环境光影响较大 |
3.3 Gamma编码与解码
为了在有限的比特深度(如8bit、10bit)内更高效地存储和传输亮度信息,人眼对暗部变化更敏感的特性被利用起来。Gamma编码在信号源端对线性光信号进行预扭曲,Gamma解码在显示端进行逆扭曲,从而在整体上恢复线性光感知。
3.3.1 Gamma编码(Encoding Gamma)
编码Gamma通常在相机、渲染引擎或图像编码器中执行。它将线性场景光信号转换为非线性编码信号:
V_encoded = (V_linear)^(1/γ_display)
对于标准sRGB色彩空间,编码Gamma近似为 1/2.2 ≈ 0.45,并在接近0的区域使用线性段以避免无穷大斜率:
V_srgb =
12.92 × V_linear, 当 V_linear ≤ 0.0031308
1.055 × (V_linear)^(1/2.4) - 0.055, 当 V_linear > 0.0031308
3.3.2 Gamma解码(Decoding Gamma)
解码Gamma在显示设备或驱动中执行。它将接收到的非线性编码信号转换为驱动显示面板的线性光信号:
V_linear = (V_encoded)^γ_display
在DRM CRTC驱动中,Gamma解码通常通过硬件Gamma LUT实现。LUT的每个条目存储了从编码值到线性值的映射结果。
| 特性 | Gamma编码 | Gamma解码 |
|---|---|---|
| 执行位置 | 信号源端(相机、GPU渲染、图像编码) | 显示端(显示器、CRTC Gamma LUT) |
| 数学形式 | V_out = V_in^(1/γ) | V_out = V_in^γ |
| 典型γ值 | 1/2.2 ≈ 0.45 (sRGB) | 2.2 (标准显示) |
| 作用 | 分配更多比特给暗部,减少量化噪声 | 恢复线性光,补偿显示设备非线性 |
| DRM实现 | 通常由用户空间或GPU着色器完成 | CRTC Gamma LUT / Degamma LUT |
3.4 Gamma校正与DRM CRTC的关联
在DRM/KMS框架中,CRTC的Gamma LUT(查找表)直接实现了Gamma解码功能。当用户空间设置CRTC Gamma LUT时,驱动将LUT数据加载到硬件寄存器中,硬件在扫描输出过程中对每个像素的RGB值进行查表映射。
- 硬件Gamma LUT:通常为256条目(8bit)或1024条目(10bit),每个条目包含R、G、B三个通道的映射值。
- 软件Gamma LUT:通过
drm_crtc_set_gamma()或drm_mode_gamma_set_ioctl()接口设置,驱动负责将用户空间数据转换为硬件格式。 - Degamma LUT:部分硬件支持独立的Degamma阶段,用于在Gamma校正之前进行额外的色彩空间转换(如从sRGB到线性RGB)。