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的基本流程,我画了张图,你看一眼就明白:
流程不复杂,但每一步都有坑。后面咱们会花大量时间讲对齐和融合的细节。
1.4 HDR的应用场景
HDR不是炫技,是刚需。我挑三个最常见的场景聊聊。
手机摄影
这是大家最熟悉的。你打开手机相机,默认就是多帧HDR模式。拍逆光人像、夜景、大光比场景,系统自动触发。
我记得有一次测试,某款手机在夕阳下拍人,不开HDR人脸全黑,开了HDR人脸肤色还原得特别好。用户感知不到HDR的存在,但效果摆在那。
安防监控
监控摄像头24小时工作,场景复杂到离谱:
- 白天:阳光直射+阴影区,动态范围轻松超过100dB
- 夜晚:车灯照射区域过曝,周围一片漆黑
- 逆光:出入口监控,人脸在背光下完全看不清
没有HDR,监控画面就是废的。我做过一个项目,客户要求「车牌和行人同时看清」,单帧根本做不到,上了多帧HDR才过。
自动驾驶
这个场景更苛刻。车载摄像头要在高速运动下,同时看清:
- 隧道出口的强光
- 树荫下的行人
- 对面车灯照射下的路牌
而且不能有鬼影,因为鬼影会导致目标检测误判。嗯,这里要注意,自动驾驶的HDR对实时性和去鬼影要求极高,后面我们会专门讲。
避坑提醒: 我曾经在安防项目里直接用手机HDR算法移植到IPC上,结果帧率掉到10fps,发热严重。嵌入式平台的算力和带宽是硬约束,算法必须「瘦身」。
1.5 本章小结
咱们这一章,把HDR的底子打好了:
- 动态范围是传感器和人眼的差距
- LDR存不住亮部和暗部细节,HDR可以
- 多帧HDR的核心是「多帧输入 → 对齐 → 融合 → 输出」
- 手机、安防、自动驾驶,每个场景对HDR的要求都不一样