zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    python's is&==区别
    python's decorator&wrapper
    objects & values & types
    linux sort命令
    partial function
    proc文件系统
    readlink 获取当前进程对应proc/self/exe
    Workgroup&Domain(Realm)
    python传值&值引用
    Unpacking Argument Lists
  • 原文地址:https://www.cnblogs.com/Azhu/p/4145166.html
Copyright © 2011-2022 走看看