java 读取图片给 matlab_如何将MATLAB图像处理程序转换为java?
將Matlab代碼轉換為Java代碼有幾個一般的缺陷.我將Matlab轉換成C代碼,所以我的建議來自于這些經驗.
>如果你在Matlab中使用for循環,一般來說,你做錯了.添加矩陣(圖像等)是相當簡單的:
a = b c;
不管圖像的大小.過濾也是一個相當簡單的調用:
a = imfilter(‘median’,b); #or這樣的事情,我現在不在我的matlab機器的前面.
類似的函數調用存在于JAI(Java Advanced Imaging)中,因此可以查看是否可以找到它們.我不知道你的中位數過濾要求的具體細節(我認為medfilt1是一個3×3的本地中值過濾內核,而不是數據上運行的一維過濾內核,因為這意味著你只能在一個過濾器方向),所以看看the documentation.中有什么但是,如果你自己編寫,上面的內容可以像一個雙重嵌套的for循環一樣簡單,或者是一個復雜的類,實現類似于
MyMatrix a = MyMatrix.Add(b,c);
我的觀點是,Matlab的簡單性可以掩蓋您需要做出的所有設計決策,以使其成為一個高效的java程序.
>記住,當你做循環,matlab和java有反向行/列順序. Matlab是專欄,java是row-major.你將需要重寫你的循環來考慮這個變化,否則你的代碼會比它慢.
>就個人而言,除了我需要完成的具體操作之外,我會傾向于避免JAI.例如,只需將其用于中值過濾操作等等.我認為使用它是一個優化,但這只是因為我是老學校,而且首先要寫我自己的圖像處理操作.如果您采用這種方法,您可以將代碼編寫為您想要的代碼,然后可以添加JAI調用,并確保輸出與您的代碼已經相符.在C中使用諸如JAI或Intel IPP之類的高級庫的問題是存在很多特定于庫的陷阱(如平鋪),或者每一行是否分配像位圖一樣具有幾個額外的像素,或其他這樣的細節),并且您不想處理這些問題,同時移動您的代碼. JAI很快,但它不是一個魔法子彈;如果你不知道如何使用它,更好地確保你有一些東西,你有一些快速.
>如果我可以在線條之間讀一點點,看起來你正在對醫學成像數據進行某種分割.我不知道在DICOM圖像中讀取什么是java庫,但gdcm適用于C和C#,還有java包裝器. Matlab掩蓋了圖像處理的便利性,特別是DICOM圖像處理,因此您可能會發現自己必須學習一些DICOM庫才能處理圖像文件操作.多年來,我學到了DICOM標準的一小部分; specification是非常完整的,也許太過分了,但你可以弄清楚如何做你所需要做的令人難以置信的細節.如果您正在嘗試分割醫療數據,則將樣條曲線保存在數據上是不正確的事情,以使您的圖像與其他DICOM讀取器一起運行.看一下輪廓線的規定.
編輯響應更多信息:
樣條擬合可能最好從數字方法而不是圖書館方法完成.可能有一種方法可以在JAI中執行此操作,但我對該語言不夠熟悉.
相反,我會查看數字食譜,特別是Chapter 3,用于樣條擬合的代碼.代碼是一個基礎,而不是零基礎,所以它需要一些翻譯,但它是完全可行的.
如果你想從邊界去除噪點,你可能還想嘗試模糊你最近得出的點的邊緣.不知道您想要做的樣條曲線(有很多變體),很難用另一種語言推薦一個完全相同的結果.
編輯2.5:如果通過拼圖從一個貢獻的圖書館,你的意思是像this code?如果最糟糕的情況是最糟糕的,你至少要有源代碼.如果你最終不得不做這樣的事情,另一個非常有用的提示是,Matlab是雙重的,沒有別的,除非你強制它(即使這樣,很多操作不適用于非雙打).所以,為了保持合理的協議,你還需要用雙打代碼.我也做了幾個測試.如果你最終重寫代碼(或類似的東西),擁有一組已知的輸入和預期的輸出(在一定的合理的誤差范圍內,你必須定義什么是“合理”的意思),這對于確保您正在復制的輪(不是真正重新創造)與原始距離相同.在最后一句話中可能有太多的泛化表達.
另一個編輯:如果上面所有的都太頭痛了,那么考慮JA建設者已經指出了.否則,我概述的方法,或類似的方法,可能是你最終的地方.
總結
以上是生活随笔為你收集整理的java 读取图片给 matlab_如何将MATLAB图像处理程序转换为java?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 价值1100亿元!300多年前沉船画面曝
- 下一篇: 9499元 苹果MacBook Air上