imageJ宏将每个子文件夹作为堆栈打开

时间:2017-11-11 10:38:13

标签: macros stack imagej

大家,

我有一个包含多个子文件夹的文件夹,每个子文件夹包含18个tif(.tif)文件。 我想在imageJ中将每个子文件夹文件打开为堆栈。

使用一些在线宏文档, 我可以打开每个子文件夹中的文件,并做一些事情,比如将16位文件更改为8位文件。

但是正如我的分析所要求的那样,我需要打开每个子floder作为堆栈, 我有一些问题要用宏来堆叠,

这是我目前的代码,

inputDir = getDirectory("choose the input directory"); 
outputDir = getDirectory("choose the output directory"); 

processDir(inputDir, outputDir); 

function processDir(inputDir, outputDir) { 
    listdir = getFileList(inputDir); 
    for (j = 0; j < listdir.length; j++) { 
        print("Processing: " + listdir[j]); 
        File.makeDirectory(outputDir + listdir[j]); 
        outputFolder = outputDir + listdir[j]; 
        inputFolder = inputDir + listdir[j]; 
        setBatchMode(true); 
        processFolder(inputFolder); 
        setBatchMode(false); 
    } 
} 

function processFolder(inputFolder) { 
    list = getFileList(inputFolder); 
    for (i = 0; i < list.length; i++) { 
        processFile(inputFolder, outputFolder, list[i]); 
    } 
} 

function processFile(inputFolder, outputFolder, file) { 
    print("Processing: " + inputFolder + file); 
    open(inputFolder + file); 
    run("Image Sequence...", "open=[inputFolder + file] number=18 starting=1 increment=1 scale=100 file=[] or=[] sort");
    run("Enhance Contrast", "saturated=0.35"); 
    run("Apply LUT", "stack"); 
    setAutoThreshold("Otsu dark"); 
    setThreshold(60, 255); 
    run("Convert to Mask", " "); 

    print("Saving to: " + outputFolder); 

    saveAs("tiff", outputFolder+file); 
    close(); 
}

如果你能告诉我如何打开子文件夹作为堆栈。

提前谢谢。

3 个答案:

答案 0 :(得分:0)

我对R以外的其他语言并不十分精通,所以这个答案包含很多&#34; snippetting&#34;来自网站。从那时起已经过了几天,我还没有复制这些消息来源。很多道歉。

我已经成功地整理了一个脚本,该脚本能够从给定目录中的每个子文件夹创建一个堆栈,然后执行&#34;某些事情&#34;在我的情况下,使用堆栈制作一个gif并将其保存在子文件夹的名称下。我将完全保留代码,因为它可以工作,对于想要类似事物的人来说可能会有用。(??)

dir = getDirectory("Choose directory");

listFiles(dir); 

list = getFileList(dir);

function listFiles(dir) { 
        list = getFileList(dir); 
        for (i=0; i<list.length; i++) { 

                setBatchMode(true);
for (i=0; i<list.length; i++) {
    file = dir + list[i];
    open(file);
    title = getTitle();
saveAs("Gif", dir+title);
close();
    }
setBatchMode(false); 

        } 
} 

我认为@Duerna代码的主要区别在于嵌套for循环。希望这会有所帮助。

答案 1 :(得分:0)

我在这里创建了一个宏,该宏遍历文件夹并导入图像序列并将其另存为图像序列。您可以在open和save命令之间的for循环中详细说明您要执行的操作。希望这会有所帮助!

inputDir = getDirectory('Choose Input Directory'); 
outputDir = getDirectory('Choose Output Directory'); 

listdir = getFileList(inputDir);

for(i=0; i< listdir.length; i++) {
    print("Processing: " + inputDir + listdir[i]);
    File.makeDirectory(outputDir +listdir[i]);
    inputFolder = inputDir + listdir[i];
    outputFolder = outputDir + listdir[i];
    inputFiles = getFileList(inputFolder);
    inputFile = inputFolder + inputFiles[0];
    run("Image Sequence...", "open=[inputFile] convert_to_rgb sort");
    run("Image Sequence... ", "format=TIFF save=[outputFolder]");
    close();
}

答案 2 :(得分:0)

inputDir1 = getDirectory("Choose the folder "); 
inputDir2 = getDirectory("Choose where to save the image Stack ");
run("Image Sequence...", "open="+inputDir1+" sort");
filename= getTitle();
saveAs("Tiff", inputDir2+filename+".tif");
close()