ncut算法matlab程序,Ncut算法的MATLAB代码下载及实现在MATLAB上正常运行

这里我所使用的平台是:win7(64bit)+MATLAB2014a(64bit)

Ncut算法全称应该是:Multiscale Normalized Cut image segmentation,是图像分割算法。可以说是我目前研究生生涯使用到的分割效果比较理想的一种图像分割算法,

进入下载地址界面后,你会看到如下面截图所示的地方,这里我们下载最新的ncut_multiscale_1_6.zip.

8ea76dbb8e9e063cf4b01dab51eb155c.png

下载完成后,我们将压缩文件进行解压,我们可以看到解压的文件中即有.m文件,也有.cpp文件,如下图所示(部分截图)。

9abee01dab6aad5cdc3127bb81303585.png

因为.cpp文件需要我们进行编译才能调用,因此,接下来简述下最重要的编译环节,编译我们需要在解压的文件夹中创建complieDir_simple.m文件,代码如下所示:

function compileDir_simple(Cdir);if nargin<1Cdir=pwd;

end

files= dir(fullfile(Cdir,‘*.cpp‘));

oldDir=pwd;

cd(Cdir);for j=1:length(files)try

% cm = sprintf(‘mex %s‘,files(j).name);

cm= sprintf(‘mex -largeArrayDims %s‘,files(j).name);

disp(cm);

eval(cm);catchdisp(lasterr);

disp(‘IGNORE if the file is a C++ file which is not a mex file (ie without a mexFunction inside)‘);

end

end

cd(oldDir);

创建完成后,我们之间点击MATLAB中的运行按钮就可以对cpp文件进行编译了,编译完成后你会发现文件夹中多了后缀为.mexw64的文件,这里w代表的是windows系统,64代表系统为64位的。

接下来我们测试下,是否可以对ncut算法进行调用,ncut算法的调用,我们只需调用ncut_multiscale.m文件就行(如下截图所示)。也就是调用这个[classes,X,lambda,Xr,W,C,timing] = ncut_multiscale(image,nsegs,options);

86aeb9f97ebd8c3eb37cd689c15ed8f1.png

这里我给一个我使用的测试代码,先在当前存放ncut代码的文件夹里创建一个test.m 的文件,当然文件名你可以随意去了,代码如下所示:

image = imread(‘v48752.jpg‘);

ncut=10;

im=image;

n=ncut;

region= ncut_multiscale(image,10);

[x,y,c]=size(image);

im1=region;for m=1:ncutfor i=1:xfor j=1:yif im1(i,j) ==m

im(i,j,1)=255*abs(sin(255-m*60));

im(i,j,2)=255*abs(cos(m));

im(i,j,3)=255*abs(sin(m*20));

end

end

end

end

figure;

imshow(im)

这里调用的图片为ncut算法解压后文件中自带的图片,你在文件中可以找到。

如果你使用的matlab版本为2013a及以上的版本,则运行后应该会报错说未找到cholinc函数,这是因为cholinc函数在MATLAB2012版本后就被弃用了,2013a以下的版本到这一步应该是可以运行成功了。对于遇到的cholinc函数报错问题可以用ichol函数代替,具体怎么代替,这里举一个代码中需替换的例子:

R = cholinc(C,‘0‘);  替换为  R = ichol(C,struct(‘type‘,‘ict‘,‘droptol‘,0,‘shape‘,‘upper‘));(想了解为何这样替换的可以查看这个链接:http://stackoverflow.com/questions/12895228/ichol-as-cholinc-replacement-nonpositive-pivot)

代码中另外两处的替换如下图所示:

be67aab6b5624703af35c58f93b287a2.png

解决了这个问题,我们就可以正常运行下载的ncut算法了。最终运行test.m文件结果如下图所示:

输入:

ea2b2e1cfffa16697d5e27f80b554e30.png

输出:

b1f25c92d9ee05b17ea2bc2242d6212e.png

到此为止就实现了ncut代码的正常运行了。

这里再补充一下啊,ncut算法还可以用于聚类,具体代码的下载及bug的修复可以看以下链接:

原文:http://www.cnblogs.com/c-happy/p/6422766.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值