087、Gamma校正与色调映射:从CRT曲线到HDR场景的亮度映射优化
087、Gamma校正与色调映射:从CRT曲线到HDR场景的亮度映射优化去年在调试一款旗舰手机的后置主摄时,遇到一个让人抓狂的问题:预览画面在低亮度场景下,暗部细节像是被一层灰雾盖住,提亮后噪点又炸裂。客户反馈说“画面不通透”,但ISP的AE和AWB都正常,RAW域数据也没问题。折腾了两天,最后发现是Gamma校正的查找表(LUT)在暗部区域映射得太激进,把原本应该保留的暗部对比度给压平了。这个坑让我重新审视了Gamma校正这个看似“老掉牙”的环节——它远不止是CRT时代的遗产,在HDR和宽动态场景下,Gamma和色调映射的配合直接决定了最终画质的“呼吸感”。从CRT的物理特性说起:为什么Gamma是2.2?Gamma校正的起源很朴素:老式CRT显示器的电子枪电压与亮度之间不是线性关系,而是近似于幂函数,指数约为2.5。为了让显示出的画面看起来线性,需要在信号端预先做反向补偿,即施加一个1/2.5≈0.4的指数校正。后来行业标准化为2.2,因为人眼对暗部变化更敏感,2.2的Gamma曲线在暗部提供了更细腻的量化步长。但这里有个容易忽略的点:Gamma校正不是简单的“输入=输出^2.2”。实际ISP里用的Gamma LUT通常是分段多项式拟合的,比如在暗部区域用更密的采样点,亮部区域用稀疏点。我见过有人直接拿Excel算个幂函数就写进寄存器,结果暗部出现明显的阶梯状伪影——因为8bit数据在暗部只有几十个码值,幂函数映射后相邻码值的跳变太大。正确的做法是:先确定输入输出范围(比如0-4095的12bit数据映射到0-1023的10bit),然后用分段线性插值或三次样条拟合,确保每段斜率
