1. Gamma 校正基础:数学原理与视觉生理学背景

Gamma 校正是 ISP 流水线中最基础、最核心的非线性变换之一。它直接利用人眼对亮度感知的非线性特性,在保持视觉信息完整性的同时,优化量化精度与显示匹配。本章从视觉生理学出发,推导 Gamma 校正的数学形式,并建立工程直觉。

1.1 人眼亮度感知的非线性特性

人眼对物理亮度的响应并非线性,而是遵循 Stevens 幂律 或近似对数关系。实验表明,人眼在暗区对亮度变化更敏感,在亮区则相对迟钝。这种机制使视觉系统能在极大动态范围(约 10^10:1)中保持对比度分辨能力。

关键生理事实: 人眼感知亮度 ≈ (物理亮度)^(0.33~0.5)。这意味着物理亮度翻倍时,人眼感知到的亮度变化远小于翻倍。

下图展示了物理亮度与人眼感知亮度之间的非线性映射关系:

人眼亮度感知非线性曲线 物理亮度(线性) 感知亮度 0 0.5 1.0 0 0.5 1.0 线性(γ=1.0) 人眼感知(γ≈0.45) 暗区:高灵敏度 亮区:低灵敏度

1.2 Gamma 校正的数学定义

Gamma 校正通过幂律变换将线性域信号映射到感知均匀域,或反之。其标准形式为:

V_out = A · V_in^γ

其中:
  V_in  :输入归一化亮度(0~1)
  V_out :输出归一化亮度(0~1)
  γ     :Gamma 指数(gamma value)
  A     :增益系数(通常 A=1)

在 ISP 和显示系统中,通常使用两个方向的 Gamma:

应用方向 Gamma 值 数学形式 典型场景
编码 Gamma(线性→感知) γ ≈ 0.45 V_out = V_in^0.45 ISP 内部、图像传感器原始数据
解码 Gamma(感知→线性) γ ≈ 2.2 V_out = V_in^2.2 显示器、sRGB 标准
sRGB 近似 分段函数 线性段 + 幂律段 互联网、消费电子
工程记忆口诀: 编码用 0.45(压缩暗部),解码用 2.2(扩展暗部)。两者互为倒数:0.45 × 2.2 ≈ 1.0。

1.3 为什么需要 Gamma 校正?——量化效率分析

如果不对传感器数据进行 Gamma 编码,直接使用线性量化,会导致暗部量化台阶过大、亮部量化台阶过小,严重浪费码字资源。以下表格对比了 8-bit 线性量化与 Gamma 编码后的量化步长:

物理亮度区间 线性量化步长(8-bit) Gamma 编码步长(γ=0.45) 人眼感知差异
0.00 ~ 0.05(暗部) 0.00039(过粗) 0.00012(精细) ✅ 匹配人眼高灵敏度
0.05 ~ 0.50(中间) 0.00176 0.00102 ✅ 适中
0.50 ~ 1.00(亮部) 0.00196(过细) 0.00345(粗放) ✅ 匹配人眼低灵敏度

可见,Gamma 编码将有限的码字资源重新分配:暗部获得更多量化级,亮部减少冗余量化级,从而在整体上降低视觉可感知的量化噪声。

1.4 Gamma 校正在 ISP 流水线中的位置

下图展示了 Gamma 校正模块在典型 ISP 流水线中的前后级关系:

ISP 流水线中 Gamma 校正的位置 RAW 输入 黑电平校正 LSC / AWB Gamma 校正 降噪 / 锐化 色彩校正 输出 线性域 → 感知域 γ = 0.45
工程注意: Gamma 校正必须在黑电平校正(BLC)和镜头阴影校正(LSC)之后执行,因为这些模块要求输入为线性数据。如果在 Gamma 之后做 BLC,会引入非线性偏移,导致暗部偏色。

1.5 sRGB 标准中的 Gamma 近似

sRGB 标准没有直接使用纯幂律 γ=2.2,而是采用分段函数,在极暗区使用线性段以避免无穷大斜率带来的噪声放大:

V_out = 
  12.92 · V_in                  , 当 V_in ≤ 0.0031308
  1.055 · V_in^(1/2.4) - 0.055 , 当 V_in > 0.0031308

这种分段设计在工程上有两个关键优势:

  • 避免暗部噪声放大: 线性段斜率 12.92 限制了暗部增益,防止传感器读出噪声被过度放大。
  • 兼容 CRT 显示: 早期 CRT 的物理响应近似 γ=2.2,sRGB 的 1/2.4 指数配合线性段,整体逼近 2.2 曲线。

1.6 本章小结

核心概念 要点
人眼感知特性 暗区敏感、亮区迟钝,遵循幂律(γ≈0.33~0.5)
Gamma 数学形式 V_out = V_in^γ,编码 γ=0.45,解码 γ=2.2
量化效率 Gamma 编码将更多码字分配给暗部,减少视觉量化噪声
ISP 位置 位于 BLC/LSC 之后、降噪/色彩校正之前
sRGB 分段设计 线性段 + 幂律段,避免暗部噪声放大