摘 要: 提出一种针对基于暗原色先验去雾算法的优化方法,分为算法级优化和基于DSP的优化。算法优化中主要采用降采样处理,以及针对YUV格式转化的优化;基于DSP优化中采用针对TI C674x系列的优化方法,如编译器优化、浮点转定点、查表法、DMA(直接内存存取)的使用以及线性汇编等。最终针对1080P的YUV格式的交通视频可以达到实时去雾处理,并且有较好的去雾效果。
关键词: 实时;去雾;DSP;优化
0 引言
随着工业的快速发展,空气污染越来越严重,尤其是雾霾对人类造成了严重的影响。雾霾天气造成能见度低下,严重影响驾驶安全和交通监控的性能,所以开发一种基于嵌入式平台能够实时去雾的设备很有必要。
本文针对基于暗原色先验的去雾算法进行优化,主要分为算法上的优化和基于DSP的优化,最终针对1080P YUV格式的交通视频,能够在C674x系列DSP上达到实时去雾的效果,即处理速度在40 ms/帧以内。
1 算法级优化
参考文献[1]中提出的基于暗原色先验的单幅图像去雾方法开辟了图像去雾的一个新的领域。其中使用软抠图的方法对透射率进行精细化,有非常好的视觉效果。但是软抠图复杂度非常高,要想针对高清视频实现实时处理很难实现。后来作者又在参考文献[2]中提出导向滤波代替[1]的软抠图,处理效果相当,速度提高100倍左右。即使速度提高了很多,针对1080P的视频要在C674x系列DSP上达到实时处理还有很大的差距。本文主要就是针对上述去雾方法在算法上进行一些优化。
1.1 降采样处理
本文研究的去雾方法是针对1080P(1 920×1 080)的高清视频,想达到实时处理,每帧的处理时间需要小于等于40 ms。使用基于暗原色先验的去雾方法处理1 920×1 080大小的图像,算法复杂度较高,在DSP上达到实时处理非常困难。本文使用12倍降采样,每12×12的窗口取一个像素点,转换成160×90大小的图像。算法的处理都是针对降采样之后的图像进行的,求得160×90大小的透射率图,最后直接重构成1 920×1 080大小的无雾图像。
1.2 图像格式转换优化
参考文献[1]中是针对RGB格式图像进行去雾处理的,本文针对的是YUV格式的图像,所以必须进行格式转换。针对YUV数据进行无雾重构处理需要分为以下3个步骤:
(1)YUV格式有雾图像转换成RGB格式有雾图像:
(2)RGB格式的有雾图像重构成RGB格式的无雾图像R′G′B′:
其中,Ab、Ag、Ar表示该帧图像3个通道的大气光值。
(3)RGB格式的无雾图像R′G′B′转换成无雾的YUV格式无雾图像Y′U′V′:
本文提出一种针对YUV格式去雾处理的优化计算方法,省略中间转换过程,直接对YUV格式有雾图像重构成YUV的无雾图像。先计算出:
由于一帧图像中的Ab、Ag、Ar是相同的,上面的计算每帧只需要计算一次,大大简化了计算过程。然后重构无雾的YUV图像:
本文提出的针对YUV直接重构的方法在时间上和空间上都有较大的优化效果,时间较之前节省了一半,内存较之前节省了12 MB左右。
2 基于DSP的程序级优化
第1节中是在算法级上进行的优化,想要在DSP上表现出更好的性能,必须针对DSP做进一步优化。本文中的程序级优化是针对TI C674x系列DSP,参考TI提供的技术文档[3-6]进行循序渐进的优化。本章选取其中最关键的几种优化方法,主要分为编译器优化、浮点改定点、查表法、使用DMA、线性汇编等。
2.1 编译器优化
选择-O优化选项。-O优化选项分为3个等级,等级越高优化效果越好。本文中为了尽可能地加快处理速度,选择-O3优化选项。
打开-mt编译器优化选项。通过这个开关,编译器就可以更加合理、大胆地使用软件流水线,从而可以极大地提高代码效率。
去掉-g调试选项。-g选项在调试程序时必须选择,但是-g选项在一定程度上影响程序的执行速度,最后生成可执行文件时关闭-g选项。
2.2 浮点运算修改
DSP针对浮点运算速度非常慢,所以在精度要求不是很高的前提下,浮点运算很有必要改成定点运算。定点运算又可以转换成DSP擅长的整型和移位运算,在DSP中两个short型相乘在一个指令周期内可以完成。
2.3 用查表法代替除法
DSP中没有除法指令,如果计算中有除法的存在,会阻碍DSP的软件流水,无法实现指令的并行处理。所以在DSP中应尽量避免除法运算的使用,使用其他运算进行替代。查表法是一种以空间换取时间的方法,开辟一定的内存存储建表,把所有的可能取值都放在表内。
2.4 DMA的使用
本文针对的是1080P高清视频,每一帧的数据量达到几MB,无法直接存储在DSP片上存储器L2 RAM(最大256 KB)中,必须放在DDR中。存储在DDR中的数据就会出现一个问题,读取和写入光靠CPU自己搬移会非常慢,并且搬移数据时阻碍了CPU的计算功能,这样就很有必要使用DMA控制器。
首先DMA控制器从DDR中搬移需要处理的数据至L2 RAM上;CPU直接从L2 RAM中读取需要处理的数据;处理结果保存在L2 RAM中;DMA控制器再把处理结果搬移到DDR上对应的存储位置。具体的DMA数据搬移路径如图1所示。
2.5 C语言改成线性汇编
通过前面的优化,能得到一个较好的优化效果,但是距离1080P的实时要求还是有一定的差距,所以需要做最后的优化,即线性汇编。
线性汇编的一个优点就是可以不需要自己手动进行资源的配置,并且可以定义变量名,直接对变量名进行操作,而编译器在编译时自动将上面的变量或者参数定义为相对应的寄存器。而且在线性汇编中,程序员不需要写出延迟(NOP)的配置,这些工作编译器都是在编译时自己安排的。
3 实验结果与分析
3.1 处理结果
经过上面优化,在DSP硬件平台上针对交通视频进行实际测试,处理结果如图2所示。
从图2不难发现,经过上述优化之后,针对交通视频仍然有较好的去雾效果。
3.2 优化结果
优化之前移植到DSP上直接测试,针对1080P的YUV格式视频,每帧需要耗时10 s以上。经过上述算法级优化和DSP程序级优化之后,针对1080P的YUV格式视频,在DSP上运行可以达到40ms/帧的速度,实现了实时处理的要求。
4 结论
本文针对基于暗原色先验的去雾算法进行优化,分为算法级优化和DSP程序级优化。最终通过在实际硬件平台上的测试,针对1080 PYUV格式的交通视频能达到实时去雾的效果,并且有较好的去雾效果。本文的优化方法不单单局限在本算法中,可以应用到其他图像算法需要移植到DSP上的场合。本文中的优化方法虽然使得处理速度达到40 ms/帧,但是在今后的工作中需要进一步优化,缩短处理时间,为其他的算法节约出时间。
参考文献
[1] He Kaiming, Sun Jian, Tang Xiaoou. Single image haze removal using dark channel prior[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2011, 33(12): 2341-2353.
[2] He Kaiming, Sun Jian, Tang Xiaoou. Guided image filtering[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2013, 35(6): 1397-1409.
[3] Texas Instruments. TMS320C674x DSP CPU and instruction Set[EB/OL].(2012-03-14)[2015-05-20]. http://www.ti.com/litv/pdtysprufe8b.
[4] Texas Instruments. TMS320C6000 DSP enhanced direct memory access (EDMA) controller reference guide[EB/OL]. (2003-xx-xx)[2015-05-20]. http://www.ti.com/litv/pdf/spru234c.
[5] Texas Instruments. TMS320C6000 optimizing compiler user′s guide[EB/OL]. (2000-xx-xx) [2015-05-20]. http://www.ti.com/litv/pdf/spru187u.
[6] Texas Instruments. TMS320C6000 programmer′s guide[EB/OL].(2003-xx-xx)[2015-05-20]. http://www.ti.com/litv/pdf/spru198k.