這里我所使用的平台是:win7(64bit)+MATLAB2014a(64bit)
Ncut算法,又稱為歸一化割法(Normalized Cut),是圖像分割算法。可以說是我目前研究生生涯使用到的分割效果比較理想的一種圖像分割算法,
代碼的下載地址: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位的,如果你是在linux64bit下編譯的話,會出現mexa64,它是linux64位下編譯和使用的版本。
接下來我們測試下,是否可以對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作者給出了詳細說明。
如果按上面的方法仍編譯不成功的話,可以下載本人編譯好的代碼,直接調用運行就行
百度網盤:http://pan.baidu.com/s/1o7XKpq6
本人親測成功
win+Matlab2014a_64位
win+Matlab2015b_32位
ubuntu64位+Matlab2015b_64bit
能否在matlab2014以上其他版本運行,各位可以親測下
