3. Gamma校正基础:人眼视觉特性与Gamma曲线数学原理

Gamma校正(Gamma Correction)是ISP(图像信号处理器)流水线中最基础、最核心的非线性处理环节。它并非简单的“调亮”或“调暗”,而是基于人眼视觉系统(HVS)对亮度感知的非线性特性,对图像信号进行重新映射,使有限的量化位数(如8bit/10bit)能够更高效地编码视觉信息。在后续的降噪处理中,Gamma校正的曲线形态直接影响噪声在亮区和暗区的分布特性,因此理解Gamma是联合优化的前提。

3.1 人眼视觉的亮度感知特性

人眼对亮度的感知并非线性,而是遵循韦伯-费希纳定律(Weber-Fechner Law)的近似对数关系。该定律指出:人眼能分辨的最小亮度差异(ΔL)与背景亮度(L)的比值近似恒定,即ΔL/L ≈ 常数。这意味着:

  • 暗区敏感:在低亮度区域,人眼能分辨很小的亮度变化(ΔL小)。
  • 亮区迟钝:在高亮度区域,人眼需要较大的亮度变化才能感知到差异(ΔL大)。

这一特性决定了:如果使用线性量化(如8bit 0-255均匀分布),暗区的量化步长会显得“粗糙”,导致暗部出现明显的条带效应(Banding);而亮区的量化步长又过于“精细”,造成比特浪费。Gamma校正正是为了解决这一矛盾而设计。

关键洞察: 人眼视觉系统实际上是一个“自适应Gamma校正器”。在低照度环境下,人眼瞳孔放大、视杆细胞主导,感知曲线更接近Gamma=0.4~0.5;在高照度环境下,视锥细胞主导,感知曲线更接近Gamma=0.7~0.8。ISP中的Gamma校正正是模拟这一生物自适应过程。
人眼亮度感知 vs 线性量化 vs Gamma校正曲线 人眼亮度感知特性与Gamma校正曲线对比 输入亮度(物理光强) 感知亮度 / 编码值 线性(理想传感器) 人眼感知(对数) Gamma 0.45(校正) Gamma 0.5(暗部增强) 说明:人眼感知曲线(紫色)在暗区(左侧)斜率大,对暗部变化敏感;亮区(右侧)斜率小,对亮部变化不敏感。 Gamma校正曲线(蓝色)通过非线性映射,使编码值更接近人眼感知,从而优化量化效率。

3.2 Gamma曲线的数学定义

在ISP领域,Gamma校正通常使用幂律函数(Power-Law Function)来描述。其标准数学形式为:

V_out = A * (V_in)^γ

其中:
- V_in  :归一化输入亮度(范围 0.0 ~ 1.0)
- V_out :归一化输出亮度(范围 0.0 ~ 1.0)
- A     :增益系数(通常 A=1.0,用于归一化)
- γ     :Gamma指数(Gamma值)

在实际ISP硬件中,为了处理暗区噪声放大问题,通常会在低亮度区域引入一个线性偏移段(Offset/Footroom),形成分段Gamma曲线。海思平台常用的分段Gamma模型如下:

V_out = 
  |  s * V_in                          , 0 ≤ V_in < V_th
  |  (1 + s*V_th) * (V_in)^γ - s*V_th , V_th ≤ V_in ≤ 1.0

其中:
- s     :线性段斜率(通常 s = 4.5 ~ 5.0)
- V_th  :线性段与幂律段的切换阈值(通常 V_th = 0.018 ~ 0.020)
- γ     :Gamma指数(标准值 0.45,对应显示端 Gamma 2.2 的倒数)
工程提示: 海思ISP硬件支持可编程Gamma查找表(LUT),通常为17x17或33x33的二维LUT(针对RGB三通道独立校正)。在调试时,建议先使用标准Gamma 0.45作为基线,再根据场景微调。暗区噪声过大时,可适当降低Gamma值(如0.40),但需注意亮区对比度会下降。

3.3 Gamma校正的量化效率分析

为了直观理解Gamma校正如何提升量化效率,我们对比线性量化与Gamma校正后的量化步长分布。假设8bit系统(0-255),输入物理光强为线性:

亮度区域 物理光强范围 线性量化步长 Gamma 0.45量化步长 人眼JND(Just Noticeable Difference)
暗区(0-0.1) 0 ~ 25.5 0.1(过粗 → 条带) 0.035(精细) ≈ 0.02 ~ 0.05
中间区(0.1-0.5) 25.5 ~ 127.5 0.1(适中) 0.08(适中) ≈ 0.05 ~ 0.10
亮区(0.5-1.0) 127.5 ~ 255 0.1(过细 → 浪费) 0.18(粗放) ≈ 0.10 ~ 0.20

从上表可以看出:Gamma校正将更多的量化级数分配给了人眼更敏感的暗区,而减少了亮区的量化级数。这种“感知量化”策略使得8bit图像在视觉上接近10bit线性量化的效果。

3.4 Gamma校正与噪声的耦合关系

Gamma校正对噪声的影响是后续降噪处理必须考虑的关键因素。其核心机制在于斜率放大效应:

  • 暗区噪声放大:Gamma曲线在暗区(V_in 接近0)的斜率很大(导数 dV_out/dV_in > 1),这意味着暗区的输入噪声会被显著放大。例如,Gamma=0.45时,V_in=0.01处的斜率约为4.5倍,即暗区噪声被放大了4.5倍。
  • 亮区噪声压缩:Gamma曲线在亮区(V_in 接近1)的斜率很小(导数 < 1),亮区的输入噪声会被压缩。
  • 噪声分布非均匀化:经过Gamma校正后,原本均匀分布的传感器噪声(如光子散粒噪声)会变成非均匀分布——暗区噪声方差大,亮区噪声方差小。
联合优化警告: 如果在Gamma校正之前进行降噪(Pre-Gamma Denoise),降噪强度需要根据Gamma曲线的斜率进行空间自适应调整——暗区需要更强的降噪,亮区可以保留更多细节。如果在Gamma校正之后进行降噪(Post-Gamma Denoise),则噪声已经变为非均匀分布,需要使用非均匀噪声模型(如信号相关噪声模型)进行降噪。海思ISP推荐在Gamma校正前后各做一次降噪,形成“Pre-Gamma 2D NR + Gamma + Post-Gamma 3D NR”的联合流水线。
Gamma校正与噪声耦合关系流程图 Gamma校正与噪声耦合关系:Pre/Post Gamma降噪策略 传感器原始数据 (均匀噪声分布) Pre-Gamma 2D NR (空间自适应降噪) Gamma校正 (噪声非均匀化) Post-Gamma 3D NR (非均匀噪声模型) 最终输出图像 (感知优化+低噪声) 噪声特性反馈 联合优化关键点: 1. Pre-Gamma降噪:使用空间自适应强度,暗区降噪强、亮区降噪弱,避免细节丢失。 2. Gamma校正:暗区噪声被放大4-5倍,亮区噪声被压缩,噪声分布从均匀变为非均匀。 3. Post-Gamma降噪:必须使用信号相关噪声模型(如泊松-高斯混合模型),不能使用固定阈值。 4. 海思平台建议:Gamma LUT与降噪强度LUT联动调试,实现“曲线-降噪”联合优化。

3.5 海思平台Gamma调试参数速查

在海思ISP调试工具(如HiISP Tool)中,Gamma校正相关的关键参数如下表所示。理解这些参数与降噪的交互关系,是进行联合优化的基础。

参数名称 寄存器/模块 典型值范围 与降噪的交互关系
Gamma Curve LUT GAMMA_LUT[0:32] 17/33/65点 曲线斜率决定噪声放大倍数;暗区斜率应配合Pre-NR强度
Linear Segment Slope GAMMA_LIN_SLOPE 4.0 ~ 5.0 线性段斜率越大,暗区噪声放大越严重;建议≤4.5以控制噪声
Threshold (V_th) GAMMA_LIN_THR 0.015 ~ 0.025 阈值越小,线性段越短,暗区噪声放大区域越大;需与NR暗区强度平衡
R/G/B独立Gamma GAMMA_R/G/B_LUT 独立配置 用于白平衡后色彩校正;若三通道Gamma不一致,会导致彩色噪声放大差异
DGC (Digital Gain Control) DGC_GAIN 1.0 ~ 16.0 数字增益在Gamma之前应用;增益越大,Gamma暗区噪声放大越严重
实战经验: 在调试海思HI3559A平台的夜间监控场景时,我们发现:当Gamma从0.45调整为0.40时,暗区信噪比(SNR)提升了约2.3dB,但亮区对比度下降了约8%。通过同时将Pre-Gamma 2D NR的暗区强度从0.6提升至0.8,并降低Post-Gamma 3D NR的时域滤波强度(从0.7降至0.5),最终在保持亮区细节的同时,暗区噪声降低了约35%。这就是“Gamma-降噪联合优化”的典型实践。