使用Matlab 2013a进行标准化切割

时间:2013-05-08 14:23:46

标签: matlab image-processing cluster-analysis image-segmentation arpack

我正在使用http://www.cis.upenn.edu/~jshi/software/Ncut_9.zip中的规范化剪切包 (在Windows 7上)

这曾经与Matlab2010a一起使用。但是我已升级到Matlab2013a(32位学生版),现在我收到以下错误:

Error using arpackc
Expect 2 output arguments

Error in eigs_new (line 240)
        arpackc( aupdfun, ido, ...

Error in ncut (line 83)
[vbar,s,convergence] =
eigs_new(@mex_w_times_x_symmetric,size(P,1),nbEigenValues,'LA',options,tril(P));

Error in ncutW (line 9)
[NcutEigenvectors,NcutEigenvalues] =
ncut(W,nbcluster);

Error in NcutImage (line 18)
[NcutDiscrete,NcutEigenvectors,NcutEigenvalues]
= ncutW(W,nbSegments);

Error in demoNcutImage (line 25)
[SegLabel,NcutDiscrete,NcutEigenvectors,NcutEigenvalues,W,imageEdges]=
NcutImage(I,nbSegments);

显然new_eigs()中的ncuts函数与最新的Matlab中的ARPACK版本不兼容。

  • 有人知道解决方法吗?
  • 规范化使用Matlab的eigs()函数的修改版本。为什么我不能只使用Matlab的内置eigs()代替eigs_new()(它似乎确实有用)。

3 个答案:

答案 0 :(得分:7)

有两种解决方案:

  1. 使用Matlab的eigs()函数代替规范化剪切包中提供的eigs_new()。我想eigs_new()旨在解决与先前版本的Matlab的兼容性问题,现在本身就是一个问题。

  2. 修改eigs_new()。如果arpackc()中有eigs_new()来电,请拨打eigs()工具箱版本中的电话。 所以,例如:

    arpackc( aupdfun, ido, ...
     bmat, intconvert(n), whch, nev, tol, resid, ncv, ...
        v, ldv, iparam, ipntr, workd, workl, lworkl, info );
    
  3. 变为

        [ido, info] = arpackc( aupdfun, ido, bmat, intconvert(n), whch, ...
            nev, tol, resid, ncv, v, ldv, iparam, ipntr, workd, workl, ...
            lworkl, info );
    

    只有两个地方必须更改才能使其正常工作(尽管其他调用arpackc()并未实际执行)。

    我仍然不确定为什么eigs_new()存在。

答案 1 :(得分:5)

在matlab2014a 64bit windows中, 你只需要改变

[vbar,s,convergence] = eigs_new(@mex_w_times_x_symmetric,size(P,1),nbEigenValues,'LA',options,tril(P));

在ncut.m的第81行 成

[vbar,s,convergence] = eigs(@mex_w_times_x_symmetric,size(P,1),nbEigenValues,'LA',options,tril(P));

然后eigs_new.m没用,不关心。 2014年的Becaus(或超过2009年)arpackc已被eigs取代。 你可以阅读eigs的帮助以获得更多帮助。

答案 2 :(得分:0)

我以前使用过这段代码。对于32-64位问题,我做了一些更改。我还将此eigs_new行更改为

[vbar,s,convergence] = eigs2(@mex_w_times_x_symmetric,size(P,1),nbEigenValues,'LA',options,tril(P)); 

应该工作......