3. 夜景模式算法原理:多帧降噪、HDR与亮度增强
夜景模式,说白了就是让手机在暗光下拍出能看的照片。你想想看,传感器就那么点大,进光量有限,单帧拍出来不是噪点满天飞就是暗成一片。高通平台的解决方案很直接——用多帧换质量。
我个人习惯把夜景算法拆成三个核心模块:多帧降噪(MFNR)、HDR合成和亮度增强。这三个模块不是独立工作的,它们之间有很强的依赖关系。我在项目中遇到过不少因为流程顺序搞错导致效果崩掉的案例,后面会细说。
3.1 多帧降噪(MFNR)——夜景的基石
MFNR,全称Multi-Frame Noise Reduction。原理很简单:拍多张图,对齐后叠加平均。为什么能降噪?因为噪声是随机的,信号是确定的。叠加N帧,信号强度变成N倍,噪声强度只变成√N倍,信噪比就提升了√N倍。
信噪比提升公式:
SNR提升 = 10 * log10(N) dB,其中N为叠加帧数
4帧叠加 → 6dB提升,8帧叠加 → 9dB提升,16帧叠加 → 12dB提升
但这里有个坑——帧数不是越多越好。我曾经在骁龙855平台上试过32帧叠加,结果手抖造成的运动模糊完全没法看。嗯,这里要注意:帧数受限于手持稳定性和场景运动。
MFNR的关键步骤
- Burst采集:连续抓取N帧RAW图,帧间隔通常控制在30-50ms
- 全局运动估计:用陀螺仪数据做粗对齐,补偿手持抖动
- 局部运动匹配:分块做光流或块匹配,处理场景中的运动物体
- 时域滤波:对对齐后的像素做加权平均,运动区域降低权重
- 空域后处理:对合成结果做边缘保留滤波,去除残留噪声
我的经验:局部运动匹配是MFNR的瓶颈。高通平台上有HVX向量扩展可以用,我建议把块匹配算法写成HVX指令,能快3-5倍。别用纯CPU做,帧率扛不住。
3.2 HDR合成——拉回高光细节
夜景场景经常有高动态范围——霓虹灯招牌亮得刺眼,地面暗得看不清。单帧曝光根本顾不过来。HDR合成的思路是:拍多帧不同曝光的图,把亮部用短曝光帧的细节,暗部用长曝光帧的细节。
高通平台的HDR合成通常分两种模式:
| 模式 | 帧数 | 曝光策略 | 适用场景 |
|---|---|---|---|
| 标准HDR | 3帧 | 短-中-长曝光 | 普通夜景带灯光 |
| 超级HDR | 5-7帧 | 多级曝光阶梯 | 极端高反差场景 |
HDR合成的核心是权重映射。每个像素的最终值由多帧加权得到,权重取决于像素的亮度、对比度和运动状态。我踩过一个坑:权重图没做时域平滑,结果合成出来的天空出现带状伪影,像水波纹一样。后来加了高斯金字塔多尺度融合才解决。
避坑指南:我曾经在HDR合成时直接用了线性权重,结果亮部过渡区域出现明显的拼接痕迹。后来改用sigmoid曲线做权重映射,过渡自然多了。记住:权重函数要平滑,不能有突变。
3.3 亮度增强——把暗部提亮但不放大噪声
MFNR和HDR做完后,图像的信噪比和动态范围都改善了,但整体亮度可能还是偏暗。亮度增强就是做最后的提亮处理。
最简单的做法是直接乘增益系数。但这样做会把残留噪声也放大。我见过不少方案在亮度增强后噪声又炸了,前两步白做了。
正确的做法是亮度感知的增益控制:
- 暗部区域:用较大增益,配合空域降噪抑制噪声放大
- 亮部区域:用较小增益,防止过曝
- 边缘区域:保持增益一致性,避免出现光晕
高通平台上有专门的亮度增强硬件模块——LCE(Local Contrast Enhancement)。它基于亮度直方图做自适应映射,能同时提升亮度和对比度。我在项目中习惯把LCE放在MFNR和HDR之后,作为最后一道工序。
3.4 信噪比与动态范围的权衡
这是夜景算法最核心的权衡。你想想看:
- 多帧叠加提升信噪比,但会压缩动态范围(因为平均操作会抹平亮暗差异)
- HDR合成扩展动态范围,但会引入额外的噪声(短曝光帧噪声大)
- 亮度增强提升视觉亮度,但会放大噪声
这三者之间是互相制约的。我总结了一个经验公式:
最终图像质量 = SNR提升 × DR扩展 × 亮度增益 / 噪声放大系数
噪声放大系数 = f(增益, 残留噪声水平)
在实际调优时,我建议先固定帧数(比如8帧),然后调整HDR的曝光阶梯,最后微调亮度增强曲线。不要三个参数一起调,否则你根本不知道哪个参数起了作用。
3.5 夜景算法整体流程
下面这张图是我在项目中常用的夜景算法流水线,你可以看到三个模块的衔接关系:
流程顺序很关键。我见过有人把HDR放在MFNR前面,结果短曝光帧的噪声被HDR权重放大,后续MFNR都救不回来。正确的顺序是:先做MFNR降噪,再做HDR扩展动态范围,最后做LCE亮度增强。
3.6 实战中的参数调优建议
最后分享几个我在高通平台上调夜景算法的经验:
- 帧数选择:手持场景用6-8帧,上脚架可以用12-16帧。超过16帧收益递减明显。
- 曝光策略:基准曝光对准中间调,短曝光比基准低2-3EV,长曝光比基准高2-3EV。
- 对齐精度:全局对齐误差控制在1像素以内,局部对齐误差控制在0.5像素以内。
- 权重平滑:HDR权重图一定要做高斯模糊,核大小建议7x7到15x15。
- 亮度增益:最大增益不要超过4倍(12dB),否则噪声会失控。
小技巧:调试时先关掉LCE,只调MFNR和HDR的参数。等前两步效果满意了,再打开LCE做最后的亮度微调。这样能快速定位问题出在哪个环节。