1. HDR成像基础:从一张“废片”说起

各位同学,咱们今天聊HDR。说实话,我第一次接触HDR这个概念,是在一次很狼狈的项目调试中。

当时我在调一个手机摄像头模组,大晴天拍逆光人像。预览画面里人脸黑得像剪影,背景却白得刺眼。我心想,这要是交到用户手里,不得被骂死?

后来才知道,这就是典型的动态范围不够。嗯,咱们今天就把这个事儿彻底讲透。

1.1 什么是动态范围?

动态范围,说白了就是相机能同时记录的最亮和最暗之间的跨度。

你想想看,人眼在同一个场景里,能看清阳光下的白云,也能看清阴影里的纹理。但传感器不行,它有个物理极限。

动态范围(Dynamic Range) = 最大不饱和信号 / 噪声底噪

单位常用 dB(分贝)或 stops(档)。

举个例子:

  • 一个8bit的传感器,理论动态范围是 20·log₁₀(255/1) ≈ 48dB
  • 人眼在单次场景中,大约能感知 100dB 左右
  • 现实场景中,一个阳光明媚的户外,动态范围可能高达 120dB

你看,差距就出来了。传感器拍到的,只是真实世界的一小部分。

1.2 LDR vs HDR:一张图看懂

对比项 LDR(低动态范围) HDR(高动态范围)
位深 8bit(0-255) 10bit/12bit/16bit
动态范围 ~48dB 80-120dB
亮部细节 容易过曝,一片死白 云层纹理清晰可见
暗部细节 容易欠曝,一片死黑 阴影里也能看到物体轮廓
存储格式 JPEG、PNG RAW、EXR、HDR
显示设备 普通显示器 HDR显示器、手机屏幕

我习惯把LDR比作「一张欠曝或过曝的废片」,而HDR是「把多张不同曝光的照片合成一张,亮部和暗部都保留」。

一个小技巧: 判断一张图是不是HDR,看直方图。LDR的直方图两端会「撞墙」,HDR的直方图分布更均匀,两端不会突然截断。

1.3 多帧HDR的核心逻辑

既然单帧拍不全,那就多拍几帧。

多帧HDR的基本流程,我画了张图,你看一眼就明白:

多帧HDR融合流程 短曝光帧 正常曝光帧 长曝光帧 运动对齐 (去鬼影) 权重融合 (亮度映射) HDR 输出 核心思路:用多帧不同曝光补偿单帧的物理限制,保留全场景细节

流程不复杂,但每一步都有坑。后面咱们会花大量时间讲对齐和融合的细节。

1.4 HDR的应用场景

HDR不是炫技,是刚需。我挑三个最常见的场景聊聊。

手机摄影

这是大家最熟悉的。你打开手机相机,默认就是多帧HDR模式。拍逆光人像、夜景、大光比场景,系统自动触发。

我记得有一次测试,某款手机在夕阳下拍人,不开HDR人脸全黑,开了HDR人脸肤色还原得特别好。用户感知不到HDR的存在,但效果摆在那。

安防监控

监控摄像头24小时工作,场景复杂到离谱:

  • 白天:阳光直射+阴影区,动态范围轻松超过100dB
  • 夜晚:车灯照射区域过曝,周围一片漆黑
  • 逆光:出入口监控,人脸在背光下完全看不清

没有HDR,监控画面就是废的。我做过一个项目,客户要求「车牌和行人同时看清」,单帧根本做不到,上了多帧HDR才过。

自动驾驶

这个场景更苛刻。车载摄像头要在高速运动下,同时看清:

  • 隧道出口的强光
  • 树荫下的行人
  • 对面车灯照射下的路牌

而且不能有鬼影,因为鬼影会导致目标检测误判。嗯,这里要注意,自动驾驶的HDR对实时性和去鬼影要求极高,后面我们会专门讲。

避坑提醒: 我曾经在安防项目里直接用手机HDR算法移植到IPC上,结果帧率掉到10fps,发热严重。嵌入式平台的算力和带宽是硬约束,算法必须「瘦身」。

1.5 本章小结

咱们这一章,把HDR的底子打好了:

  • 动态范围是传感器和人眼的差距
  • LDR存不住亮部和暗部细节,HDR可以
  • 多帧HDR的核心是「多帧输入 → 对齐 → 融合 → 输出」
  • 手机、安防、自动驾驶,每个场景对HDR的要求都不一样