Ncut matlab 代码bug 修复
先说平台:
win7 x64,matlab 2012a x64,亲测运行。
ncut 是个图像切割方法,以后再回顾具体算法吧,网上很多流程的是Jianbo Shi 这位2000年写的,名字应该是:Data Clustering with Normalized Cuts
问题是普遍流行是他2004修改版,然后其官网上最新也是2009版,那时候还没有问题,可是随着matlab 更新,不再支持 windows 下直接调用.dll文件了,而其公布的代码windows 平台是使用dll 的,如果还有 函数的.h头文件那还可以部分修改调用,问题是没有啊。
在没有修复前主要问题是不能调用函数 :sparsifyc spmtimesd。
去下2009年的代码,作者真是懒,相关代码还是2004年,根本没有更新,只是添加了其他代码,2009版本有一堆封装了的cpp函数查看不了啊,还好有作者有写指引,可是指引不全阿。根据指引切换解压目录 运行 compileDir_simple ,可是第一次运行根本就是全部出错嘛,哪有作者说的可以忽略。
错误:
Error: Could not detect a compiler on local system which can compile the specified input file(s)...
compileDir_simple语句其实就是生成当前平台运行的能够运行的动态链接库,dll 属于动态链接库,但不是所有。语句有了,其实很可能就是缺少配置C++编译器。运行:
mex -setup
根据指引选择。我用的是 Microsoft Visual C++ 2010 in F:\Program Files (x86)\Microsoft Visual Studio 10.0
然后才运行编译命令:
compileDir_simple
这个我运行时候还是会有部分出错,但缺少的成功了!
解释下后序,mexw64,指在windows64 平台使用,mexglx指在linux 平台,mexmac指在mac 平台。
这时候将生产的都放到函数目录下,ncutw,我主要是使用是基于相似度矩阵做ncut,所以基于图的ncut 我没有运行。
放到了目录下运行还是会出错的,因为代码是基于32位 编写,所以,需要对代码进一步修改,将全部的:
int32() -> int64()。
这时候,成功运行了,我跑了20个数据集,没有问题,基于图的ncut我没有跑,用到的时候再看看吧。
随着matlab 的更新,很多就的代码需要更新,例如上面的情况,其实有个简单的解决便是下个旧版本的matlab。
可是,2010 或之前的版本 使用int64,是可以,但不支持运算操作阿。
例如 int64(a) - int64(b) ,会提示 减法出错。
另附作者的连接:
http://www.cis.upenn.edu/~jshi/software/