基于Eigen和OpenCV的图像算法加速
2017-12-29秦肖臻
舒 畅,秦肖臻
(华中科技大学 自动化学院,湖北 武汉 430074)
基于Eigen和OpenCV的图像算法加速
舒 畅,秦肖臻
(华中科技大学 自动化学院,湖北 武汉430074)
OpenCV作为一款免费、开源的计算机视觉库已广泛应用于图像处理的各种项目开发中。在算法实现中,高性能的线性代数运算库能提升算法的执行效率和算法实现灵活性。介绍了Eigen线性代数运算库,并在矩阵运算效率上与OpenCV进行了比较。以基于SVD分解的图像压缩算法为例,将Eigen和OpenCV进行联合编程并给出了主要代码。
OpenCV;Eigen;图像处理;算法加速
0 引言
在数字图像处理中,先将图像传感器获取的数据进行采样和量化。处理后的图像数据可以等价为一个实数矩阵,该矩阵中的每个元素称为像素[1]。因此向量和矩阵等线性代数运算成为数字图像处理的基本和必备工具。
OpenCV[2]封装了部分常用的线性代数运算操作,比如矩阵相乘、求逆、矩阵奇异值分解(SVD)以及解线性方程组等。这些数学操作是大部分图像处理算法的基本构成单元,对其进行软件优化和硬件加速[3]可以很大程度上缩短图像处理算法的运行时间,提升算法的实时性。将OpenCV与Eigen进行联合编程可以很大程度突破大型矩阵运算时的速度瓶颈。
1 Eigen库介绍
1.1 Eigen简介
Eigen[4]是基于C++模板技术、为线性代数计算进行高度优化的开源库。著名深度学习框架TensorFlow[5]中的许多核心算法实现也借助[6]于Eigen库。Eigen具有如下特点。
(1)与OpenCV相比,Eigen原生支持复数型矩阵和动态维度矩阵,给算法实现带来了很大的便利和灵活性。
(2)除了运算上的优化和通过C++模板技术支持惰性求值(Lazy Evaluation),同时还可以对SSE 2/3/4,ARM NEON等指令集进行专门的向量化(Vectorization)编译加速。……
