在高通CamX架构中,MFHR(Multi-Frame High Dynamic Range) 是一种结合多帧降噪(MFNR)与高动态范围(HDR)的混合成像技术,旨在通过多帧融合提升复杂光照场景下的图像质量。以下是其核心原理、实现流程及CamX中的配置细节:
1. MFHR的核心原理
-
技术目标:
在单次拍摄中,通过多帧不同曝光图像的融合,实现:-
动态范围扩展:保留高光和暗部细节。
-
噪声抑制:利用多帧平均减少随机噪声。
-
运动补偿:对齐多帧中的动态物体,避免重影。
-
-
与HDR/MFNR的区别:
技术 输入帧数 处理重点 输出特性 HDR 2-3帧(不同曝光) 动态范围扩展 高对比度场景细节保留 MFNR 4-8帧(相同曝光) 降噪 低光场景纯净度提升 MFHR 4-8帧(不同曝光) 动态范围+降噪+对齐 综合低光与高对比场景优化
2. MFHR在CamX中的实现流程
(1) 数据流架构
Sensor → IFE(实时流) → BPS(离线流) → IPE(后处理) → JPEG编码/显示 │ └─────> MFHR Pipeline(多帧对齐、融合、降噪)
(2) 关键步骤
-
多帧采集:
-
触发条件:检测场景光照对比度(如通过3A统计信息),自动启用MFHR模式。
-
帧配置:按不同曝光参数(如短曝光+长曝光组合)采集多帧RAW数据。
-
-
对齐与融合:
-
对齐算法:基于特征点或光流法对齐多帧,补偿手抖或物体移动。
-
融合策略:
-
权重映射:根据像素亮度分配权重(高光区依赖短曝光帧,暗区依赖长曝光帧)。
-
噪声感知融合:结合MFNR的时域降噪,抑制融合后的残留噪声。
-
-
-
色调映射(Tone Mapping):
-
将高动态范围的融合结果压缩至标准范围(如sRGB),保留细节并避免过曝/欠曝。
-
3. CamX中的配置与优化
(1) XML配置
-
Usecase选择:在
camxoverridesettings.txt
中强制指定MFHR用例:<Usecase Name="UsecaseMFHR"> <Pipeline>PipelineMFHR</Pipeline> <Targets> <Target Name="TARGET_BUFFER_RAW_MULTIFRAME" /> <Target Name="TARGET_BUFFER_YUV_OUT" /> </Targets> </Usecase>
-
Pipeline定义:
<!-- PipelineMFHR.xml --> <Pipeline> <PipelineName>MFHRPipeline</PipelineName> <NodesList> <!-- 输入节点:接收多帧RAW数据 --> <Node NodeId="0" NodeInstance="BPS" ... /> <!-- 处理节点:对齐与融合 --> <Node NodeId="255" NodeInstance="MFHRNode" NodeType="SW" ... /> <!-- 输出节点:传递到IPE --> <Node NodeId="1" NodeInstance="IPE" ... /> </NodesList> <PortLinkages> <Link SourceNode="0" SourcePort="0" SinkNode="255" SinkPort="0" ... /> <Link SourceNode="255" SourcePort="0" SinkNode="1" SinkPort="0" ... /> </PortLinkages> </Pipeline>
(2) 算法集成
-
自定义Node开发:
-
代码路径:
chi-cdk/oem/qcom/node/mfhr/
-
核心函数:
// 多帧对齐与融合 VOID MFHRNode::ExecuteProcessRequest( CHINODEPROCESSREQUESTINFO* pProcessRequestInfo) { // 从输入端口获取多帧RAW数据 ChiBuffer* pInputBuffers = pProcessRequestInfo->inputBuffers; // 执行对齐与融合 AlignAndFuseFrames(pInputBuffers, &pOutputBuffer); // 传递到下游节点 SubmitOutputBuffer(pProcessRequestInfo, pOutputBuffer); }
-
(3) 性能优化
-
并行处理:
-
利用QDSP(Hexagon DSP)运行对齐算法,减少CPU负载。
-
配置离线流线程优先级,避免与实时流竞争资源。
-
-
内存优化:
-
复用RAW数据缓冲区,减少DDR带宽占用。
-
启用压缩格式(如UBWC)存储中间帧。
-
4. 调试与验证
(1) 日志分析
-
启用MFHR日志:
adb shell setprop persist.vendor.camera.mfhr.debug 1
-
关键日志标记:
CamX: [MFHR] Align time: 12ms, Fusion time: 8ms # 处理耗时 CamX: [ERROR][MFHR] Motion vector estimation failed! # 对齐失败
(2) 数据抓取
-
Dump中间帧:
adb shell setprop persist.vendor.camera.dump.mfhr 3 # 级别3:RAW+YUV
-
文件路径:
/data/vendor/camera/dump/mfhr/
(3) 客观指标
-
动态范围测试:使用X-Rite色卡或灰阶图,测量亮度范围(dB)。
-
噪声评估:在暗箱中拍摄低光场景,计算PSNR/SSIM。
5. 常见问题与解决
问题现象 | 可能原因 | 解决方案 |
---|---|---|
融合后图像模糊 | 运动补偿算法失效 | 检查对齐日志,优化特征点检测阈值 |
高光区域过曝 | 曝光参数配置不当 | 调整短曝光帧的AE收敛速度 |
处理延迟过高 | DSP资源竞争 | 分配专用DSP线程或降低帧数 |
6. 扩展阅读
-
高通文档:
CamX Advanced Imaging Tuning Guide(需高通账户)。 -
开源实现参考:
Google HDR+ Pipeline(多帧融合算法设计思路)。
通过以上配置与优化,MFHR可在CamX架构中实现高效的多帧高动态范围成像,显著提升复杂光照场景下的用户体验。