183、Gamma校正与色调映射:从线性RAW到视觉感知优化的非线性变换一个让我失眠三天的Bug2018年某款旗舰机项目,夜景模式拍出来的照片,暗部细节全黑,亮部过曝成一片死白。我盯着屏幕上的RAW图——明明Sensor输出的线性数据动态范围有12档,直方图分布也很健康,怎么经过ISP pipeline就变成这副鬼样子?当时团队里刚来的算法同事信誓旦旦说“Gamma校正就是套个标准曲线”,结果调了三天,照片要么灰蒙蒙像蒙了层雾,要么对比度夸张得像漫画。最后我拿着示波器去抓Sensor输出端的模拟信号,才发现问题出在Gamma校正和色调映射的衔接处——线性数据被错误地做了两次非线性变换。这个坑让我意识到,Gamma校正和色调映射这两个看似简单的模块,其实是整个ISP pipeline里最容易出幺蛾子的地方。今天就把这些年踩过的坑和总结的经验掰开揉碎讲清楚。线性RAW为什么不能直接给人看先说说最基础的概念。Sensor输出的RAW数据本质上是光子计数,光子和电子的转换在理想情况下是线性的——你拍一个18%灰卡,Sensor输出的数字值就是满量程的18%。但人眼对亮度的感知不是线性的,我们天生对暗部变化更敏感,对亮部变化比较迟钝。举个例子:你在暗光环境下,从0.1 lux增加到0.2 lux,人眼能明显感觉到变亮了;但在阳光下从10000 lux增加到20000 lux,你几乎察觉不到变化。这就是韦伯-费希纳定律说的,人眼感知的亮度变化和物理亮度的对数成正比。所以线性RAW直接显示在屏幕上,暗部会