069、自动曝光AE测光策略全局/中心/点测光与曝光时间增益分配去年在调试某款旗舰手机的前置摄像头时遇到一个让人抓狂的bug用户在逆光自拍时人脸总是过曝背景却正常。我盯着log看了三天发现AE算法在测光时把背景的高光区域和脸部的暗部区域做了“平均”结果就是人脸亮得像灯泡。这个案例让我重新审视了测光策略的本质——不是算法不够聪明而是我们没告诉它“该看哪里”。测光策略的底层逻辑亮度统计的“权重游戏”AE的核心任务是把场景亮度映射到sensor的动态范围内。测光策略决定了“哪些像素的亮度值值得被加权计算”。全局测光、中心测光、点测光本质上是不同的权重分布函数。全局测光平均测光把整个画面所有像素的亮度值加起来除以像素总数。听起来公平但实际场景中天空、灯光等高亮区域会“绑架”平均值。比如在逆光场景下背景亮度可能是人脸亮度的10倍全局平均后AE会认为场景足够亮于是缩短曝光时间或降低增益人脸就黑了。这个策略只适合光照均匀的场景比如阴天的户外。中心测光给画面中心区域更高的权重边缘区域权重递减。权重分布通常是一个高斯函数中心区域比如画面中央60%的区域的亮度贡献占70%以上。这个策略在手机摄影中很常见因为用户通常把主体放在画面中央。但有个坑如果主体不在中心比如三分法构图中心测光就会失效。我在调试某款车载摄像头时遇到过驾驶员把车停在路边主体在画面左侧中心测光导致左侧人脸过曝右侧天空正常。点测光只取画面中一个极小区域比如1%-5%的像素的亮度值。这个区域通常是一个圆形或矩形位置由用户手动选择或算法自动跟踪。点测光是最“专一”的但也是最危险的——如果点选的位置恰好是反光点或阴影整个画面的曝光就会崩掉。比如在舞台灯光下点测光打在演员脸上背景全黑打在背景上人脸全白。曝光时间与增益分配的“跷跷板效应”测光策略决定了“目标亮度”但如何实现这个目标亮度取决于曝光时间shutter和模拟增益analog gain的分配。这里有个核心矛盾曝光时间越长运动模糊越严重增益越高噪声越明显。曝光时间优先策略先尽量拉长曝光时间直到达到目标亮度如果还不够再增加增益。这个策略适合静态场景比如夜景长曝光。但用在运动场景比如拍奔跑的小孩就会翻车——曝光时间太长画面全是拖影。我在调试安防摄像头时客户要求夜间抓拍车牌曝光时间超过30ms车牌全是模糊的后来改成增益优先才解决。增益优先策略先尽量提高增益直到达到目标亮度如果还不够再拉长曝光时间。这个策略适合低光动态场景但增益过高会导致噪声爆炸。手机夜景模式就是典型的增益优先但会配合多帧降噪来压制噪声。混合策略ISO优先设定一个目标ISO增益在这个ISO下优先调整曝光时间如果曝光时间超过阈值比如1/30s再降低ISO并拉长曝光时间。这个策略在手机HDR中很常见比如在逆光场景下AE会先尝试用低ISO低增益和短曝光时间拍一帧如果暗部太暗再切换到高ISO和长曝光时间拍另一帧最后合成。实战中的“测光分配”组合拳场景一逆光人像手机前置测光策略点测光测光点锁定在人脸区域通过人脸检测框。曝光分配增益优先因为人脸是暗部需要高增益来提亮同时曝光时间控制在1/60s以内避免手抖模糊。但有个细节如果背景太亮点测光会导致背景过曝这时需要开启HDR用短曝光帧保留背景细节长曝光帧提亮人脸。场景二车载ADAS夜间测光策略全局测光但加权区域是画面下半部分路面区域。因为车载摄像头关注的是路面上的行人、车辆而不是天空。曝光分配曝光时间优先因为车载场景要求低延迟通常1/30s以内增益不能太高否则噪声会干扰目标检测。这里踩过坑某次调试时AE算法把曝光时间拉到1/15s结果车辆在高速行驶时路面标线全是模糊的后来强制曝光时间上限为1/30s。场景三安防监控低光测光策略中心测光因为监控场景通常关注画面中央区域比如门口。曝光分配增益优先但增益上限设为12dB约4倍超过这个值就拉长曝光时间。因为安防场景允许一定的运动模糊比如人走动但噪声不能太大否则压缩后的视频会全是马赛克。别这样写不要用固定增益上限要根据sensor的噪声特性动态调整。比如某款sensor在增益超过18dB时暗电流噪声会急剧增加这时应该优先拉长曝光时间。个人经验性建议测光策略不是固定的要结合场景切换。我在手机项目中用了一个“场景分类器”来动态切换测光策略逆光用点测光人脸夜景用全局测光避免点测光打在灯光上运动场景用中心测光主体在中央。这个分类器只需要几个简单的特征亮度直方图、运动矢量、人脸检测结果不需要深度学习。曝光时间与增益的分配要关注sensor的“拐点”。每个sensor都有一个“最佳增益区间”在这个区间内信噪比随增益线性提升超过这个区间噪声会急剧恶化。比如某款sensor在增益16dB以下时噪声表现良好超过16dB暗电流噪声翻倍。所以我的分配策略是优先在16dB以内调整增益如果还不够再拉长曝光时间。点测光一定要配合“防抖”。点测光对场景变化极其敏感如果用户手抖了一下测光点偏移整个画面亮度就会突变。我在手机项目中给点测光加了“时间平滑”——当前帧的测光结果只占30%权重历史帧占70%这样即使测光点偏移亮度变化也是渐进的不会出现“闪烁”感。别迷信“全局测光最公平”。在真实场景中全局测光往往是最差的因为它会被高亮区域“绑架”。比如在逆光场景下全局测光会导致人脸全黑在夜景场景下全局测光会导致灯光过曝。我建议把全局测光作为“保底策略”只在其他策略失效时使用。调试时先看“亮度直方图”。不要只看平均亮度要看直方图的分布。如果直方图集中在低亮区暗部说明曝光不足集中在高亮区亮部说明过曝。测光策略的目标是让直方图尽量“居中”但不要“削峰”——比如在逆光场景下直方图应该是双峰分布一个峰在暗部一个峰在亮部而不是单峰居中。最后说一句AE调试没有银弹。每个场景、每个sensor、每个镜头都有自己的脾气。我见过最离谱的案例是某款sensor在低光下增益从0dB跳到6dB时噪声反而下降了——因为sensor内部有个“增益补偿电路”在6dB时才开始工作。所以别信手册信实测。