由于传统的图像传感器的动态范围比较低,因此,如果用传统的图像传感器拍摄高动态范围的场景,就会要么亮处过曝,丢失很多细节;要么暗处曝光不足,细节难以分辨。为了记录高动态范围场景的每一个细节,可以采用多次曝光图像合成的方法。
WDR算法的目的就是将从sensor输出的长短帧数据合成为一帧20bit的数据。如图1所示,长短帧数据是先缓存在DDR中,然后同时给WDR模块进行合成。合成的原则是择优选取,即对于比较亮的区域,采用短帧数据,而对于比较暗的区域,采用长帧数据。
图1 WDR算法合成模型
- 本模块可以通过 hi_isp_wdr_merge_mode 来决定合成的方式。若该值为0,则用传统的WDR功能合成;若该值为1,则打开 Fusion功能,即用来改善Flicker现象;其中 hi_isp_wdr_combine_attr结构体用来控制传统的WDR功能,而 hi_isp_fusion_attr结构体用来控制Fusion功能。
- 传统的WDR,包括以下功能:
- 可以去除鬼影。通过 hi_isp_wdr_combine_attr来选择融合区域是采用短帧还是长帧;
- 可以通过short_threshold和long_threshold来控制选择长短帧的范围。即对于大于short_threshold的像素选择短帧,小于long_threshold的像素选择长帧,而对于在两者之间的像素采用长短帧融合的方式;
- 可以通过force_long_low_threshold和force_long_hig_threshold来控制运动区域选择长帧,对于亮度小于force_long_low_threshold的运动区域强制选择长帧,亮度大于force_long_hig_threshold的运动区域不强制选择长帧,对于亮度在两者之间的运动区域采用长短帧融合的方式;
- 可以通过md_thr_low_gain,md_thr_hig_gain来控制运动检测;
- 可以通过md_ref_flicker来决定运动检测是否参考Flicker检测结果;
- 可以通过short_expo_chk来控制WDR融合是否检查短帧数据大小。
- Fusion功能指适用于一般的室内场景(非宽动态)以及夜晚场景,用来改善工频闪问题。其中fusion_threshold [4]是用来控制Fusion选择时每帧的阈值。