3、HDR合成算法:基于权重映射的合成、拉普拉斯金字塔融合、梯度域合成
HDR合成,说白了就是把几张不同曝光的照片,拼成一张亮部不过曝、暗部不死黑的图。听起来简单,但怎么拼得自然、没有接缝、没有鬼影,这里面的门道可不少。
我个人习惯把主流方法分成三类:权重映射、金字塔融合、梯度域合成。它们各有各的脾气,适用场景也不一样。今天咱们就一个一个掰开聊。
3.1 基于权重映射的合成
这是最直观的思路。给每张输入图像的每个像素算一个“好”的程度,也就是权重。然后按权重加权平均。
核心公式:
HDR(x,y) = Σ( W_i(x,y) * I_i(x,y) ) / Σ( W_i(x,y) )
其中 i 是曝光序号,W_i 是权重图,I_i 是线性化后的辐射度值。
权重怎么设计?我见过三种主流策略:
| 权重类型 | 设计思路 | 优点 | 缺点 |
|---|---|---|---|
| 饱和度权重 | 颜色越鲜艳,权重越高 | 色彩还原好 | 对灰度区域不敏感 |
| 对比度权重 | 局部梯度越大,权重越高 | 保留纹理细节 | 容易放大噪声 |
| 曝光度权重 | 像素值越接近中间灰,权重越高 | 抑制过曝/欠曝 | 平坦区域权重低 |
实际项目中,我通常把三种权重乘在一起,再做个高斯模糊让过渡平滑。嗯,这里要注意:权重图不能直接硬切,否则合成结果会有明显的拼接痕迹。
我的经验:权重图一定要做边缘保留滤波,比如引导滤波。直接高斯模糊会把边缘也糊掉,导致光晕。我曾经在这个坑里爬了三天。
3.2 拉普拉斯金字塔融合
权重映射有个硬伤:它在空间域做加权平均,高频细节和低频亮度混在一起处理。结果就是,亮部细节和暗部细节很难同时保留。
拉普拉斯金字塔融合,说白了就是把图像拆成不同频率的“切片”,每个切片单独融合,再拼回去。你想想看,低频负责亮度过渡,高频负责纹理细节,各管各的,效果自然好。
流程分四步:
- 构建高斯金字塔:对每张输入图像,逐层下采样,得到一系列模糊版本。
- 构建拉普拉斯金字塔:用高斯金字塔的相邻层做差,得到带通细节层。
- 构建权重金字塔:对权重图也做高斯金字塔,保证每层的权重平滑。
- 逐层融合:每层拉普拉斯图像乘以对应层的权重,累加重建。
重建公式:
L_fused(l) = Σ( G_Wi(l) * L_i(l) )
最终HDR = 重建所有L_fused(l) + 最高层高斯残差
其中 l 是金字塔层数,G_Wi 是权重的高斯金字塔,L_i 是输入图像的拉普拉斯金字塔。
我记得第一次在项目中用这个方法,处理一组夜景长曝光序列。之前用权重映射,路灯周围总有光晕。换成金字塔融合后,光晕消失了,连远处楼宇的窗格纹理都清晰可见。那一刻我觉得,嗯,这方法值得推广。
避坑指南:金字塔层数不是越多越好。层数太多,最低频层会包含整张图的亮度信息,一旦权重有偏差,整体色调会偏色。我一般设4~6层,具体看图像尺寸。
3.3 梯度域合成
这个方法更高级一点。它不直接操作像素值,而是操作像素之间的差异——也就是梯度。合成时,先拼梯度场,再通过解泊松方程重建出最终的HDR图像。
为什么会这样?因为人眼对亮度变化比亮度更敏感。梯度域合成能保证局部对比度最大程度保留,同时全局亮度自然过渡。
核心步骤:
- 梯度计算:对每张输入图像,计算x方向和y方向的梯度。
- 梯度融合:对每个像素位置,从所有输入中选择梯度幅值最大的那个。这叫“最大梯度选择”。
- 梯度场修正:确保融合后的梯度场是“可积的”,否则重建会出伪影。
- 泊松重建:解一个稀疏线性方程组,从梯度场恢复出像素值。
泊松方程:
∇²HDR = div(G_fused)
其中 ∇² 是拉普拉斯算子,div 是散度,G_fused 是融合后的梯度场。
这个方法效果确实好,但代价也大。解泊松方程需要迭代,计算量是金字塔融合的几十倍。我在嵌入式平台上试过一次,单帧1080p图像跑了将近两秒,根本没法实时。
我的建议:如果追求极致画质,且不要求实时,梯度域合成是首选。如果是手机拍照这种场景,还是老老实实用金字塔融合吧。
3.4 三种方法对比
| 维度 | 权重映射 | 拉普拉斯金字塔 | 梯度域合成 |
|---|---|---|---|
| 计算复杂度 | 低 | 中 | 高 |
| 细节保留 | 一般 | 好 | 极好 |
| 光晕抑制 | 差 | 好 | 极好 |
| 色调一致性 | 好 | 中 | 好 |
| 实时性 | 支持 | 支持 | 不支持 |
| 实现难度 | 低 | 中 | 高 |
3.5 知识结构图
下面这张图概括了三种方法的核心流程和关系,方便你对照理解。
3.6 实际项目中的选择建议
我做了这么多年HDR,总结下来就一句话:没有最好的方法,只有最合适的场景。
- 移动端实时预览:用权重映射,配合快速引导滤波。牺牲一点画质,换帧率。
- 专业相机/后期软件:用拉普拉斯金字塔融合。效果好,速度快,实现也成熟。
- 科研/电影级HDR:上梯度域合成。计算量大,但效果确实无可挑剔。
一个小技巧:如果你不确定选哪个,先跑金字塔融合。它是最稳妥的折中方案。我曾经在一个安防项目中,用金字塔融合处理了上万组监控序列,没出过一次偏色或光晕问题。