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