先說平台:
win7 x64,matlab 2012a x64,親測運行。
ncut 是個圖像切割方法,以后再回顧具體算法吧,網上很多流程的是Jianbo Shi 這位2000年寫的,名字應該是:Data Clustering with Normalized Cuts
問題是普遍流行是他2004修改版,然后其官網上最新也是2009版,那時候還沒有問題,可是隨着matlab 更新,不再支持 windows 下直接調用.dll文件了,而其公布的代碼windows 平台是使用dll 的,如果還有 函數的.h頭文件那還可以部分修改調用,問題是沒有啊。
在沒有修復前主要問題是不能調用函數 :sparsifyc spmtimesd。
去下2009年的代碼,作者真是懶,相關代碼還是2004年,根本沒有更新,只是添加了其他代碼,2009版本有一堆封裝了的cpp函數查看不了啊,還好有作者有寫指引,可是指引不全阿。根據指引切換解壓目錄 運行 compileDir_simple ,可是第一次運行根本就是全部出錯嘛,哪有作者說的可以忽略。
錯誤:
Error: Could not detect a compiler on local system which can compile the specified input file(s)...
compileDir_simple語句其實就是生成當前平台運行的能夠運行的動態鏈接庫,dll 屬於動態鏈接庫,但不是所有。語句有了,其實很可能就是缺少配置C++編譯器。運行:
mex -setup
根據指引選擇。我用的是 Microsoft Visual C++ 2010 in F:\Program Files (x86)\Microsoft Visual Studio 10.0
然后才運行編譯命令:
compileDir_simple
這個我運行時候還是會有部分出錯,但缺少的成功了!

解釋下后序,mexw64,指在windows64 平台使用,mexglx指在linux 平台,mexmac指在mac 平台。
這時候將生產的都放到函數目錄下,ncutw,我主要是使用是基於相似度矩陣做ncut,所以基於圖的ncut 我沒有運行。
放到了目錄下運行還是會出錯的,因為代碼是基於32位 編寫,所以,需要對代碼進一步修改,將全部的:
int32() -> int64()。
這時候,成功運行了,我跑了20個數據集,沒有問題,基於圖的ncut我沒有跑,用到的時候再看看吧。
隨着matlab 的更新,很多就的代碼需要更新,例如上面的情況,其實有個簡單的解決便是下個舊版本的matlab。
可是,2010 或之前的版本 使用int64,是可以,但不支持運算操作阿。
例如 int64(a) - int64(b) ,會提示 減法出錯。
另附作者的連接:
http://www.cis.upenn.edu/~jshi/software/
