1、 数字宽动态
在做数字宽动态时,我想到了3种实现的方法,分别如下:
a、 调节gamma曲线来实现
b、 调节GBCE曲线来实现
c、 直方图均衡化
下面就拿GBCE来简单的讲解一下:
GBCE曲线如下:
曲线暗部斜率越多,那么图像暗部提高亮度越高;
中部斜率越大,图像的通透性越好;
亮部斜率越大,图像亮部抑制亮度越强;
通过调节曲线,生成GBCE表,分别调节几组table表,用来作为不同的宽动态等级,然后融合到源码里面。在issdrv_alg2AApi.c里面的issAlg_captAProcessTI函数进行修改。
我的是添加一个函数update_gbce(output_params.iss_drv_config,ti2a_output_params.sensorGain);
2、sensor宽动态
由于项目的需要,需把宽动态的功能实现,于是结合sony提供IMX185的宽动态寄存器配置说明文档和SDK3.8源码进行相关配置。
1、 配置sensor端寄存器为WDR模式,这个按照sony提供的IMX185宽动态寄存器配置说明文档来配置(必须严格按照文档来配置)。
2、 设置AE曝光比为16:1
3、 修改2A相关WDR相关参数
4、 设置ISP里面WDR模块为HighQuality(这个在ISP入口函数处修改,也可以在参数配置文件里面修改),配置ISP里面WDR Link处理参数(解压缩数据参数);SDK3.8源码不支持WDR与线性模式的实时却换(每次切换都得重起ISP),我们可以修改是否调用WDR库来实现这一功能;
5、 在编译时一定得把WDR_ON改为yes,这个在Rule.make里面修改
打开WDR之后出现问题:
1、 图像清晰度受损比较大,整体图像给人一种蒙蒙的感觉,白平衡好像有点不对,图像整体偏绿(偏冷色)。
2、 图像在高亮度和低亮度处会泛红
3、 丢帧严重,配置为25帧的,结果只剩下10帧左右
泛红可以通过调节相关的sensor寄存器和曝光步长得到相应的缓解,丢帧(由于比较急,可以帧率配置为50帧,以满足项目所需的25帧需求,但这不是最终的解决办法);白平衡重做了很多次,都没有解决图像白的地方不白的现象。不知道是不是RGB中的几个分量没设置好,还是怎么样,到目前为此,上面的几个问题,一直还没得到完美的解决办法。
WDR的实现有想过不是用原厂提供的WDR库,自己去实现
1、 软件实现,在cameraLink里面把数据流提取来进行两帧合成一帧,可是这样需要消耗大量的系统资源,处理时间等,行不通。
2、 加一片FPGA芯片,加一片FPGA芯片的话那是最好的了,处理速度和效果都很好,而且还能实现其他的很多功能,但增加成本。