论文部分内容阅读
OpenCV(Open Source Computer Vision Library)是能够实现有关图像处理和计算机视觉方面的跨平台计算机视觉库,该视觉库中包含很多有关视觉处理和图像处理方面的通用算法,正是由于其丰富的底层支持促使其功能的多样性与实用性,因此OpenCV已经成为了计算机视觉领域最强大的开源工具之一。数字信号处理器(DSP)目前广泛应用于通信、计算机、网络、工业控制、军事装备等重要领域,扮演者不可或缺的角色。FT-M7002(以下简称M7002)是一款完全自主的高性能DSP。开发一款基于M7002 DSP的图像处理平台,能够极大地推动该DSP在图像处理领域以及人工智能领域的应用。但是目前鲜有针对该DSP平台的交叉编译移植以及对OpenCV库进行移植优化的研究。因此本文探索一种将OpenCV通过Linux操作系统进行交叉编译移植到DSP平台的一般方法,以及总结出对OpenCV进行优化的一般方法,能够降低实现通用DSP图像处理平台的研发门槛,进而提高对M7002DSP的开发效率。本文的主要工作包括以下几个方面:1、完成OpenCV2.4.9(以下简称OpenCV)底层所有的约80万行源代码在M7002上的移植与优化实现。本文针对实现FT-M7000 IDE工具链能够支持C++语言以及完成OpenCV源代码在M7002平台上移植的问题,深入分析了OpenCV的底层支持与M7002平台底层支持的差异性,然后结合交叉编译的原理,提出在Linux系统下,通过交叉编译生成M7002平台上的工具链,然后对OpenCV所依赖的各种库进行交叉编译,之后重新编写对应平台的toolchain脚本文件,该文件辅助Cmake编译OpenCV源码来生成对应的构建文件,最后对OpenCV库进行交叉编译,该过程中针对平台以及平台底层库的差异对OpenCV的库完成相应的补充与裁剪,最终总结并实现OpenCV移植到M7002平台上的通用方法。该方法填补了通过交叉编译将OpenCV移植到DSP平台上的技术空缺。随后对移植OpenCV库的正确性进行了充分的测试,然后又运用了开cache以及开编译优化选项的常规优化方法对OpenCV的库进行优化,实现OpenCV在M7002上的运行提速。2、针对如何充分发挥M7002的运算性能问题。本文通过分析OpenCV函数底层是怎样实现相应的图像处理功能的算法特点以及M7002体系结构的特点,提出了对OpenCV的功能函数进行向量化改造来实现OpenCV运行提速的优化思想。该优化思想主要是在功能函数的底层加入计时函数,寻找出运行时间占比较高的数个算法函数,然后对这部分算法进行向量移植和优化。本文首先移植了OpenCV像素操作类的算法函数,并且总结出针对像素运算进行向量化移植和优化的通用方法,在保证计算正确的前提下实现了最高13.7倍的运行提速。然后又分析了底层通过复杂的数学运算对像素进行操作来实现图像处理功能的函数,并且分析函数底层算法的实现原理,确定可以向量化改造的循环代码段,然后利用上述总结的一般方法进行改造发现改造后的结果也是正确的。3、分析移植后向量C代码的特点,对移植后的向量C代码进行优化。首先用常用的C代码优化方法——循环展开对移植后向量C进行优化,优化后性能仅仅提升30%左右。最后根据移植后向量C代码所实现的具体行为,得出用双缓冲的优化方法对向量C代码进行优化,优化后的运行性能相比移植后的向量C代码提升约50%左右。