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 拉普拉斯金字塔融合

权重映射有个硬伤:它在空间域做加权平均,高频细节和低频亮度混在一起处理。结果就是,亮部细节和暗部细节很难同时保留。

拉普拉斯金字塔融合,说白了就是把图像拆成不同频率的“切片”,每个切片单独融合,再拼回去。你想想看,低频负责亮度过渡,高频负责纹理细节,各管各的,效果自然好。

流程分四步:

  1. 构建高斯金字塔:对每张输入图像,逐层下采样,得到一系列模糊版本。
  2. 构建拉普拉斯金字塔:用高斯金字塔的相邻层做差,得到带通细节层。
  3. 构建权重金字塔:对权重图也做高斯金字塔,保证每层的权重平滑。
  4. 逐层融合:每层拉普拉斯图像乘以对应层的权重,累加重建。

重建公式:

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 知识结构图

下面这张图概括了三种方法的核心流程和关系,方便你对照理解。

HDR合成算法:三种主流方法 多曝光图像序列 权重映射合成 计算权重图 加权平均 空间域融合 拉普拉斯金字塔 高斯/拉普拉斯分解 逐层加权融合 金字塔重建 梯度域合成 梯度场计算 最大梯度选择 泊松重建 HDR合成结果 权衡:权重映射最快 → 金字塔融合平衡 → 梯度域效果最好但最慢 实际项目中根据实时性要求和画质需求选择

3.6 实际项目中的选择建议

我做了这么多年HDR,总结下来就一句话:没有最好的方法,只有最合适的场景。

  • 移动端实时预览:用权重映射,配合快速引导滤波。牺牲一点画质,换帧率。
  • 专业相机/后期软件:用拉普拉斯金字塔融合。效果好,速度快,实现也成熟。
  • 科研/电影级HDR:上梯度域合成。计算量大,但效果确实无可挑剔。

一个小技巧:如果你不确定选哪个,先跑金字塔融合。它是最稳妥的折中方案。我曾经在一个安防项目中,用金字塔融合处理了上万组监控序列,没出过一次偏色或光晕问题。