一、HDR成像基础:从一张过曝的照片说起
各位同学,今天咱们聊聊HDR成像最基础的东西。说实话,我入行那会儿,HDR还是个挺玄乎的概念。记得我第一次用手机拍夜景,出来的照片要么天空死白一片,要么地面黑成一团——这就是典型的动态范围不够。
那什么是HDR?说白了,就是让一张照片同时保留亮部和暗部的细节。你想想看,人眼能看清从烛光到阳光的细节,但相机传感器做不到。HDR就是用来弥补这个差距的。
1.1 动态范围:到底在说啥?
动态范围这个概念,我习惯用一个比喻来解释:想象你在一个昏暗的房间里,窗外是正午的太阳。人眼能同时看清屋内的陈设和窗外的风景,但相机只能二选一。这个「能看清的最亮和最暗之间的跨度」,就是动态范围。
在数字成像里,动态范围通常用分贝(dB)或档位(EV)来衡量。一个典型的公式是:
DR = 20 * log10(最大信号 / 噪声底噪)
嗯,这里要注意:这个公式算出来的是传感器的物理动态范围。实际拍摄中,场景的动态范围往往更大。
| 成像设备 | 典型动态范围 | 档位(EV) |
|---|---|---|
| 人眼(适应后) | 约 100 dB | ~20 EV |
| 普通手机传感器 | 60-70 dB | 10-12 EV |
| 专业单反 | 75-85 dB | 13-15 EV |
| HDR合成结果 | 90-120 dB | 15-20 EV |
我在项目中遇到过最夸张的场景:一个背光拍摄的金属零件,亮面反射阳光,暗面藏在阴影里。单帧拍摄根本没法同时看清两面。这就是为什么我们需要多帧HDR。
1.2 LDR vs HDR:差距在哪?
LDR(低动态范围)图像,就是我们平时看到的8位JPEG。每个像素只有0-255这256个级别。你想想看,256个灰度级要描述从黑夜到正午的光线变化,怎么可能够?
HDR图像就不一样了。它用浮点数存储亮度值,理论上可以表示从10^-6到10^6 cd/m²的范围。常见的HDR格式有:
- OpenEXR:工业标准,16位浮点,我项目里最常用
- Radiance HDR (.hdr):老牌格式,32位浮点
- RAW格式:严格来说不是HDR,但保留了传感器原始数据
核心区别一句话:LDR是「够用就好」,HDR是「有多少记多少」。LDR会丢失亮部和暗部信息,HDR则完整保留。
举个例子。你拍一张窗边的照片:
- LDR:要么窗外过曝成白色,要么室内欠曝成黑色
- HDR:窗外云彩的纹理、室内书架的细节,全都在
1.3 HDR的应用场景:不只是拍照
很多人以为HDR就是手机里的那个「HDR模式」。其实远不止如此。我这些年做过的项目里,HDR的应用场景五花八门:
- 手机摄影:最广为人知的应用。多帧合成,解决逆光、夜景问题。
- 自动驾驶:车载摄像头必须同时看清隧道内和隧道外的场景。我曾经调试过一个夜间行车场景,单帧根本没法同时看清路牌和路面。
- 安防监控:强光下的车牌、阴影里的人脸,都需要HDR来还原。
- 医疗影像:X光片、内窥镜图像,动态范围直接决定诊断精度。
- 影视后期:电影特效合成、虚拟拍摄,HDR是基础素材格式。
我的经验:做HDR算法,千万别只盯着手机摄影。自动驾驶和安防领域对HDR的需求更刚性,而且对多帧对齐的要求更高——因为场景里物体在动,车辆也在动。
1.4 本章知识体系
下面这张图,是我自己梳理的HDR成像基础框架。你看一眼,就能明白这一章在讲什么,以及后续章节会怎么展开。
避坑提醒:我曾经犯过一个低级错误——直接用LDR图像做HDR合成,结果发现亮部细节全丢了。后来才意识到,LDR本身就已经截断了高光信息,再怎么合成也找不回来。所以,做HDR重建的第一步,就是确保输入的多帧图像包含了足够的曝光信息。