Ncut matlab 代码bug 修复(适用于R2014a)

来源:互联网 发布:淘宝曼妮芬内衣怎么样 编辑:程序博客网 时间:2024/06/07 00:41

1 源代码下载地址:

http://www.cis.upenn.edu/~jshi/software/

我的网盘中下载: http://pan.baidu.com/s/1i5no3fJ


2 运行方法

a) 当前路径指到下载的源文件

 b)  在命令行中输入 mex -setup 

  根据指引选择。我用的是VS10 对就选择的是Microsoft Visual C++ 2010。(注:对于其他VS版本不保证能运行通过,因为没有亲测。)

c) 在命令行中输入  compileDir_simple

ReadMe.txt 里面也有涉及.

d) 试运行demo

3 试运行示例程序

3.1 按照教程做

地址:http://www.cis.upenn.edu/~jshi/software/demo1.html
 按照教程在运行 [NcutDiscrete,NcutEigenvectors,NcutEigenvalues] = ncutW(W,nbCluster); 时后会报错.其定位应当是eig_new.m 的240行处.(如果不是,
你有三种选择: 1 放弃, 2 重做前面的步骤, 3 下面的内容自己调试.)大致会是"arpackc(" 的参数有问题.将其修改为如下的形式就可以了.
[ido,info] = arpackc( aupdfun, ido, ...
         bmat, intconvert(n), whch, nev, tol, resid, ncv, ...
            v, ldv, iparam, ipntr, workd, workl, lworkl, info );
其他的错误也同样是这个问题. 
但是到了319行,这样处理就行不通了, 需要修改成
    if issymA
%         [ido, info] = arpackc( eupdfun, rvec, 'A', select, ...
%             d, v, ldv, sigma, ...
%          bmat, intconvert(n), whch, nev, tol, resid, ncv, ...
%             v, ldv, iparam, ipntr, workd, workl, lworkl, info );
%         if strcmp(whch,'LM') || strcmp(whch,'LA')
%             d = flipud(d);
%             if (rvec == 1)
%                 v(:,1:k) = v(:,k:-1:1);
%             end
%         end
%         if ((strcmp(whch,'SM') || strcmp(whch,'SA')) && (rvec == 0))
%             d = flipud(d);
%         end
    else
        % If sigma is complex, isrealprob=true and we use [c,z]neupd.
        % So use sigmar=sigma and sigmai=0 here in dneupd.
没错,就是注释掉了这一部分. 这必然后引发别的问题,但是我在测试的时候发现他对我的程序几乎没有影响,运行demo1及demo2时效果与示例效果相同.
所以,暂时认为可以这样修改。如果您发现了这样修改带来的了什么样的坏的效果还请不吝赐教。
对于示例程序我只做了这些工作。我所有的处理均保存在了网盘的文件里。

3.2 使用网盘中的代码


如果下载的是网盘中的源码,可以直接运行demo_NcutClustering.m(demo1)或者demo_NcutImage.m(demo2).(注:b,c两步不可少)

4 示例的截图

4.1 Demo1 截图


demo1

4.2 Demo2 截图

demo2

5 参考文章

http://www.lxway.com/589116164.htm

http://www.cis.upenn.edu/~jshi/software/demo1.html

0 0
原创粉丝点击