最近做图像处理相关的工作,涉及到图像数据的协方差矩阵及其逆矩阵的求解,比如在PCA算法以及RXD异常检测算法中都需要求解协方差矩阵;虽然可以自己基于指针的方法求解,但是对于数据较大时,效率很难保证(也许是笔者能力有限吧),但是在求逆矩阵时还是得需要用到其它库(当然大牛也可以自己写),所以就在网上查找了相关第三方开源矩阵库;总体来说,比较推荐的库有Armadillo,Eigen等,其中,Armadillo可以配合其它库进行加速,比如“Armadillo + BLAS + LAPACK”组合或“Armadillo + OpenBLAS”组合,第二种组合推荐的比较多,那么为什么呢?原因是因为OpenBLAS对intel cpu会进行一些优化,所以速度上也就有了一定的提升,另外值得一提的是OpenBLAS是由中国人负责开发的。Eigen也是比较推荐的一个,使用比较方便,只需要在工程中包含相应的头文件即可使用。好了,关于上面提到的两个库,有兴趣的读者可以自行Google或百度了解更多。
先来一张图,关于线性代数库的一些基本关系:
1. Armadillo
首先是下载Armadillo,目前最新版是armadillo-7.400.1.tar.xz,下载好后解压出来,然后将里面的头文件即include文件夹拷贝出来,放到你想放的位置,比如我将拷贝出来的放到“D:\Code\3rdPart\Armadillo-7.400.1”目录下。
2. Armadillo + BLAS + LAPACK
下载BLAS和LAPACK,网上有挺多地址可以下载到,不同地址下载下来的可能会存在效率不同问题,但是应该区别不会太大吧。这里推荐一个下载地址,也是Armadillo例子中自带BLAS和LAPACK的来源,点我下载。(貌似需要翻墙)
这里我以Win-32-Debug版为例介绍,同样将下载下来的文件解压,然后将里面的文件拷贝到你想放置的位置,比如我放置在“D:\Code\3rdPart\LAPACK&BLAS\LAPACK-3.2.1_Debug_x86”目录下,目录下包括blas_win32_MTd.dll,blas_wi