Ncut matlab 代碼bug 修復

先說平臺:linux

    win7 x64,matlab 2012a x64,親測運行。算法

 

    ncut 是個圖像切割方法,之後再回顧具體算法吧,網上不少流程的是Jianbo Shi 這位2000年寫的,名字應該是:Data Clustering with Normalized Cutswindows

    問題是廣泛流行是他2004修改版,而後其官網上最新也是2009版,那時候尚未問題,但是隨着matlab 更新,再也不支持 windows 下直接調用.dll文件了,而其公佈的代碼windows 平臺是使用dll 的,若是還有 函數的.h頭文件那還能夠部分修改調用,問題是沒有啊。函數

     在沒有修復前主要問題是不能調用函數 :sparsifyc    spmtimesd。spa

     去下2009年的代碼,做者真是懶,相關代碼仍是2004年,根本沒有更新,只是添加了其餘代碼,2009版本有一堆封裝了的cpp函數查看不了啊,還好有做者有寫指引,但是指引不全阿。根據指引切換解壓目錄 運行 compileDir_simple ,但是第一次運行根本就是所有出錯嘛,哪有做者說的能夠忽略。code

錯誤:orm

Error: Could not detect a compiler on local system which can compile the specified input file(s)...

     compileDir_simple語句其實就是生成當前平臺運行的可以運行的動態連接庫,dll 屬於動態連接庫,但不是全部。語句有了,其實極可能就是缺乏配置C++編譯器。運行:blog

mex -setup

     根據指引選擇。我用的是 Microsoft Visual C++ 2010 in F:\Program Files (x86)\Microsoft Visual Studio 10.0ci

而後才運行編譯命令:input

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/

相關文章
相關標籤/搜索