3、HDR图像采集原理:多帧曝光合成技术、传感器响应曲线、高动态场景的曝光策略

各位同学,今天我们来聊聊HDR图像采集的核心。说白了,就是手机摄像头怎么把一张“亮处不过曝、暗处不欠曝”的照片拍出来。

我刚开始做HDR算法时,踩过一个坑:以为只要拍三张不同曝光的照片,叠在一起就完事了。结果呢?运动物体全是鬼影,暗部噪点像雪花一样。嗯,这里面的门道,远比想象中多。

3.1 多帧曝光合成技术

多帧曝光,是HDR的基石。你想想看,人眼能同时看清亮部和暗部,但传感器不行。它的动态范围有限,大概60-70dB。而真实场景,比如逆光人像,动态范围能到120dB以上。

怎么办?拍多张。

  • 短曝光帧:捕捉高亮区域细节,比如天空、灯光。曝光时间通常在1/1000秒以内。
  • 中曝光帧:覆盖主体区域,比如人脸、建筑。曝光时间接近自动曝光值。
  • 长曝光帧:提取暗部细节,比如阴影、树丛。曝光时间可能到1/10秒甚至更长。

我习惯用三帧方案,但有些场景需要五帧甚至七帧。为什么?因为传感器响应曲线不是线性的,后面会讲。

核心要点:多帧合成的本质,是用时间换动态范围。每一帧都只负责一个亮度区间,最后通过权重融合,拼出一张完整的HDR图像。

这里有个避坑指南:我曾经在夜景HDR中用了五帧合成,结果手抖导致三帧全废。后来我学乖了,运动场景用三帧,静止场景才敢上五帧。

3.2 传感器响应曲线

传感器响应曲线,简称CRF。它描述了传感器输出的像素值与实际场景亮度的关系。

理想情况下,CRF是线性的:亮度翻倍,像素值也翻倍。但现实不是这样。传感器有饱和区、线性区、噪声区。

区域 特点 问题
饱和区 像素值达到最大值,不再变化 高光过曝,细节丢失
线性区 像素值与亮度成正比 正常曝光范围
噪声区 信号弱,噪声占比高 暗部噪点,信噪比低

我做过一个实验:用同一颗传感器,分别拍0.1秒和1秒的暗部区域。结果1秒帧的像素值虽然高了,但噪声也放大了10倍。说白了,长曝光不是万能的。

所以,多帧合成时,我们需要知道每一帧的CRF,才能正确映射亮度值。否则,合成出来的图像会有明显的亮度断层。

我的经验:在手机端,CRF通常不是线性的。我建议用多项式拟合,或者直接用查表法。查表法虽然占内存,但速度快,适合实时处理。

3.3 高动态场景的曝光策略

高动态场景,比如逆光、夜景、室内外混合光。这些场景的亮度跨度很大,曝光策略直接决定HDR成败。

我常用的策略有三种:

  1. 固定EV步长:比如-2EV、0EV、+2EV。简单粗暴,但容易欠曝或过曝。
  2. 自适应EV步长:根据场景直方图动态调整。比如亮部多,就多拍短曝光帧。
  3. 基于亮度映射的曝光:先拍一帧预览,分析亮度分布,再决定每帧的曝光参数。

我个人比较推荐第三种。为什么?因为固定步长在极端场景下会失效。比如大逆光,-2EV可能还是过曝,+2EV可能还是欠曝。自适应步长虽然好,但计算量大,手机端容易发热。

这里我画了一张流程图,帮你理解整个曝光策略的决策过程:

高动态场景曝光策略流程图 场景亮度分析 动态范围 > 100dB? 五帧合成 三帧合成 计算EV步长 计算EV步长 多帧采集与合成 输出HDR图像

你看,决策的核心是动态范围。如果场景动态范围超过100dB,我建议用五帧甚至七帧。否则,三帧就够了。别贪多,帧数越多,鬼影和噪声越难处理。

注意:曝光策略不是死的。我曾经在逆光人像中用了五帧,结果人脸因为轻微晃动出现了重影。后来我改成三帧+AI补光,效果反而更好。记住,算法要服务于场景,而不是反过来。

最后,说一个我踩过的坑:曝光时间设置。长曝光帧如果超过1/10秒,手持拍摄基本会糊。我建议用OIS(光学防抖)配合,或者干脆限制最长曝光时间。嗯,手机端的物理限制,有时候比算法更难突破。

好了,这一章的内容就到这里。多帧曝光、传感器响应曲线、曝光策略,这三者是HDR采集的三大支柱。理解透了,后面的合成和调优才能事半功倍。

本章小结

  • 多帧合成用时间换动态范围,帧数不是越多越好
  • 传感器响应曲线决定亮度映射的准确性,查表法适合手机端
  • 曝光策略要动态调整,固定步长在极端场景下会失效

专注资料整理