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成败。
我常用的策略有三种:
- 固定EV步长:比如-2EV、0EV、+2EV。简单粗暴,但容易欠曝或过曝。
- 自适应EV步长:根据场景直方图动态调整。比如亮部多,就多拍短曝光帧。
- 基于亮度映射的曝光:先拍一帧预览,分析亮度分布,再决定每帧的曝光参数。
我个人比较推荐第三种。为什么?因为固定步长在极端场景下会失效。比如大逆光,-2EV可能还是过曝,+2EV可能还是欠曝。自适应步长虽然好,但计算量大,手机端容易发热。
这里我画了一张流程图,帮你理解整个曝光策略的决策过程:
你看,决策的核心是动态范围。如果场景动态范围超过100dB,我建议用五帧甚至七帧。否则,三帧就够了。别贪多,帧数越多,鬼影和噪声越难处理。
注意:曝光策略不是死的。我曾经在逆光人像中用了五帧,结果人脸因为轻微晃动出现了重影。后来我改成三帧+AI补光,效果反而更好。记住,算法要服务于场景,而不是反过来。
最后,说一个我踩过的坑:曝光时间设置。长曝光帧如果超过1/10秒,手持拍摄基本会糊。我建议用OIS(光学防抖)配合,或者干脆限制最长曝光时间。嗯,手机端的物理限制,有时候比算法更难突破。
好了,这一章的内容就到这里。多帧曝光、传感器响应曲线、曝光策略,这三者是HDR采集的三大支柱。理解透了,后面的合成和调优才能事半功倍。
本章小结:
- 多帧合成用时间换动态范围,帧数不是越多越好
- 传感器响应曲线决定亮度映射的准确性,查表法适合手机端
- 曝光策略要动态调整,固定步长在极端场景下会失效