Ncut算法的MATLAB代码下载及实现在MATLAB上正常运行

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

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

代码的下载地址:http://timotheecour.com/software/ncut_multiscale/ncut_multiscale.html

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

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

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

function compileDir_simple(Cdir);
if nargin<1
    Cdir=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);
    catch
        disp(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);

这里我给一个我使用的测试代码,先在当前存放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:ncut
for i=1:x
    for j=1:y
        if 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

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

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

输入:

输出:

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

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

http://www.cnblogs.com/Azhu/p/4145166.html作者给出了详细说明。

时间: 2024-10-20 02:14:24

Ncut算法的MATLAB代码下载及实现在MATLAB上正常运行的相关文章

在C#的Web项目中调用Matlab代码的方法

为了毕设的图形检索方向的研究,本人需要在信科的师兄师姐们已经完成的C#界面中,调用现在研究的算法的Matlab代码,以便看到实验的效果.前段时间已经拖延了1个多月,一方面因为实习越来越多事情,时间减少了很多:但更重要在于C#调用Matlab的方法真心麻烦,C#的Web项目中进行这个操作貌似会碰到更多细节上的问题.而且总是很不稳定,操作系统.Matlab或VS的版本.遗漏一些文件或步骤都会造成失败!这个问题本人已经搞了很长时间,直至前几天,在同学的帮助下,自己再弄一遍,总算成功了!下面我及时把这个

调试和运行matlab代码(源程序)的技巧和教程

转载请标明出处:专注matlab代码下载的网站http://www.downma.com/ 本文主要给大家分享使用matlab编写代码,完成课程设计.毕业设计或者研究项目时,matlab调试程序的技巧和方法. 快速完成一个项目,最简单的方法就是利用前人的开源代码,然后根据自己项目的具体需求和参数,对已有代码进行调试,并增加或删减部分功能,最终实现自己项目的全部功能.所谓"站在前人的肩膀上". 闲话少叙,我们先从最基本的matlab软件安装开始,已经成功安装matlab软件的可以直接跳过

Latex中Matlab代码的环境

需要用到listings宏包 使用方法: 导言区\usepackage{listings}\lstset{language=Matlab}      %代码语言使用的是matlab\lstset{breaklines}                   %自动将长的代码行换行排版\lstset{extendedchars=false}  %解决代码跨页时,章节标题,页眉等汉字不显示的问题 正文区:\begin{lstlisting}此处写下Matlab代码 \end{lstlisting}

java桶式排序算法代码下载

原文:java桶式排序算法代码下载 代码下载地址:http://www.zuidaima.com/share/1550463272176640.htm 桶式排序: * 桶式排序不再是基于比较的了,它和基数排序同属于分配类的排序, * 这类排序的特点是事先要知道待排 序列的一些特征. * 桶式排序事先要知道待排 序列在一个范围内,而且这个范围应该不是很大的. * 比如知道待排序列在[0,M)内,那么可以分配M个桶,第I个桶记录I的出现情况, * 最后根据每个桶收到的位置信息把数据输出成有序的形式.

Poisson image editing算法实现的Matlab代码解析

之前我发了数篇系列博文来仔细研究Poisson Image Editing算法,每次重新审视和深入,仿佛都能有更为深刻的认识和很大的收获.这应该算是我这个系列的完结篇,会用用Matlab代码一点一点的演示,原文作者到底是如何设计和实现他那个强大且影响深远的算法的.希望你在看本文之前务必参考一下文章来了解算法原理,本文将主要讲解编程实现的问题,对于前面讲过的内容,我不会深究.但我个人总体的感觉是,现在图像处理算法对数学的要求是越来越高了,像泊松融合.泊松抠图这样的算法如果没有偏微分方程(本算法中涉

java基数排序算法代码下载

原文:java基数排序算法代码下载 代码下载地址:http://www.zuidaima.com/share/1550463272684544.htm 基数排序:基数排序可以说是扩展了的桶式排序, * 比如当待排序列在一个很大的范围内,比如0到999999内,那么用桶式排序是很浪费空间的. * 而基数排序把每个排序码拆成由d个排序码,比如任何一个6位数(不满六位前面补0)拆成6个排序码, * 分别是个位的,十位的,百位的.... * 排序时,分6次完成,每次按第i个排序码来排. * 一般有两种方

SAR成像学习(四)距离方向成像matlab代码解析 2

如果发射信号是线性调频信号,上一次讲的距离成像算法流程(匹配滤波方法)依然可以用,但那个流程要求T x =4X 0 c >T p  .如果T x <T p  ,即幅宽相对较小的情况,上一讲中的流程会带来一个问题,解决这个问题的办法是pulse compression.本文将会讨论这个puse compression的原理和实现. 1 what is pulse compression 对于线性调频信号:p(t)=a(t)exp(jβt+jαt 2 ) ,信号持续时间为T p  ,瞬时频率为β+

Python 爬虫的工具列表 附Github代码下载链接

这个列表包含与网页抓取和数据处理的Python库 网络 通用 urllib -网络库(stdlib). requests -网络库. grab – 网络库(基于pycurl). pycurl – 网络库(绑定libcurl). urllib3 – Python HTTP库,安全连接池.支持文件post.可用性高. httplib2 – 网络库. RoboBrowser – 一个简单的.极具Python风格的Python库,无需独立的浏览器即可浏览网页. MechanicalSoup -一个与网站

Latex 中插入 Matlab 代码

这篇文章将介绍如何在 Latex 排版过程中添加 Matlab 代码 功能效果 主要有如下排版功能: 语法高亮 自动添加边框 自动添加行号 先上图,大家感受一下效果 listings 包 首先确保你能使用使用 listings 包 简单快捷的使用方法如下 \usepackage{listings} \lstset{language=Matlab} \begin{lstlisting} % Plot function f(x) = 2*x^3 - x - 2 ezplot('2*x^3-x-2',