簡體   English   中英

如何使用ImageJ中的線程打開文件夾? (JAVA)

[英]How would I open a folder using threads in ImageJ? (Java)

作為我的ImageJ插件中的項目的一部分,我需要打開多達3000張圖像作為ImageStack。 用戶選擇一個包含所有文件的文件夾

DirectoryChooser dirChoos = new DirectoryChooser("Select Folder");
String filePath = dirChoos.getDirectory();

我當前打開文件的方法是

FolderOpener opener = new FolderOpener();
ImagePlus imp = opener.openFolder(filePath);
ImageStack stack = imp.getImageStack();

這可行,但是對於較大的文件夾,這會使插件的運行時間增加4或5分鍾。 雖然我知道打開大文件夾顯然會花費更多時間,但是如果我可以減少一點的話,那將是很好的。

我正在嘗試實現的方法是

File folder = new File(filePath);
String[] listOfFiles = Folder.list();
Arrays.sort(listOfFiles); // to make sure the stack is in the right order

通過使用Arrays.copyOfRange將listOfFiles拆分(為參數着想,分成3個),並將其傳遞給擴展Thread的對象

openFolder r1 = new openFolder(listOfFiles_part1);
openFolder r2 = new openFolder(listOfFiles_part2);
openFolder r3 = new openFolder(listOfFiles_part3);

new Thread(r1).start();
new Thread(r2).start();
new Thread(r3).start();

openFolder的方法使用listOfFiles_part從文件中形成ImagePlus實例的數組

int len = Array.getLength(listOfFiles_part)
ImagePlus[] impArray = new ImagePlus[len];
for (int a = 0; a < len; a++ ) {
     impArray[a] = new ImagePlus((listOfFiles_part[a]).getPath());
}

然后,返回impArrays,並從數組中形成一個ImageStack。

但是,這似乎有點讓人費解,到目前為止,我還沒有實現太多的運氣。

有沒有更好的方法來使用線程從文件夾中獲取ImageStack? (使用線程是否還會加快進程?)

任何幫助,將不勝感激。 干杯

有一種以上的方法。 如果您使用Java 8,則並行方法更簡單

List<ImagePlus> impArray = new ArrayList<ImagePlus>();
listOfFiles_part.parallelStream()
.forEachOrdered(i -> impArray.add(new ImagePlus(i.getPath()));

否則,您可能會使用線程池,因為您不知道取決於硬件的優化線程數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM