Ncut matlab 代碼bug 修復


先說平台:

    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/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM