Normalized Cut的C++源码

2015年08月07日

写在前面


由于工作上需要C++版的Normalized Cut代码,由于不想重复造轮子,于是爬遍几乎整个网络,找到了一个比较靠谱的版本,但期间各种配置,终于搞定,做下记录。

代码原始版在这里

Linux系统下的配置


首先自己在Ubuntu系统上验证了下做了快速验证,步骤如下。

一、环境配置

1 先下载Boost Eigen3 两个库,放到/usr/include路径下(这两个是.h版的库,不需要安装);

2 安装依赖库arpack: sudo apt-get install libarpack2-dev libsuperlu3-dev;

3 git clone源码,进行make。

二、出现的问题及解决方法

make的时候出现错误: no declarations were found by argument-dependent lookup。

解决:跟进去发现找不到的是继承里的虚函数,在makefile里添加 -fpermissive make搞定。

Linux->Window的移植


自己的程序是在VS上编写的,所以需要移植到VS,但开源代码是Linux下的。成功移植的步骤如下:

一、移植ARPACK,参考的这篇文章,有以下几点需要注意。

1 现在已经淘汰FC=g77的Fortran的编译器,需要改为gfortran,修改文件 ARmake.inc:

FC = gfortran 注释掉FFLAGS = -O -cg89

2 修改 second.f 文件为:

SUBROUTINE SECOND( T ) REAL T CALL CPU_TIME(T) RETURN END

二、arcompp.h里加入 #define GNUG ,不然提示找不到 arcomplex标志 。

小注

这个C++版本的Normalized Cut代码和Matlab版的有些出入,作者在源码中也有些相应的说明,我自己在作者源码的基础上又做了些修改,最终聚类效果还不错。


版权声明:本文为博主原创文章,转载请注明出处 本文总阅读量    次