1

我有一个非常简单的编程问题,希望有人能帮助我。

我正在处理具有多个通道的 Tiff 文件(所有通道都包含在 .lif 文件中,这是 Leica 格式)。我想要一种方法来轻松地将我的所有 Tiff 转换为仅包含几个通道(我指定)的 Tiff。现在我正在手动完成每个图像,这很乏味。我没有编写宏的经验,非常感谢一些帮助或起点。我确信这不是一个复杂的宏。

到目前为止,在打开所有 Tiff 后,我正在使用以下手动例程和命令:

  1. Image > Stacks > Stack to Images - 将堆叠的图像分离成单独的图像
  2. 关闭我不想在堆栈中的图像。
  3. Image > Stacks > Images to Stack - 将剩余的图像返回到堆栈并重命名。
  4. Image > Hyperstacks > Stack to Hyperstack - 在这里我改变它,使图像有 3 个通道。
  5. 使用所需的频道和名称保存新的 Tiff。
  6. 关闭 Tiff 并对所有 Tiff 重复。

我想要的是一个宏,它为所有打开的 Tiff 循环上述步骤,让用户指定频道(例如,保留频道:2,3 和 5)。我知道这是一个非常简单的编程任务,但我真的可以使用一些帮助来完成它。

谢谢!约翰内斯

4

2 回答 2

2

有几种不太复杂的可能性来创建仅包含通道子集的堆栈:

  • Image > Stacks > Tools > Make Substack...,可让您指定通道/切片,并记录为:

    run("Make Substack...", "channels=1,3-5");
    
  • Image > Duplicate...,您可以在其中选择连续范围的通道,例如:

    run("Duplicate...", "duplicate channels=1-5");
    

要将此过程应用于文件夹中的所有图像,请查看脚本编辑器中的处理文件夹模板(模板 > IJ1 宏 >处理文件夹)和 Fiji wiki 上的文档:

于 2015-06-22T20:02:58.147 回答
1

感谢 Jan Eglinger 的帮助,从假期回来我设法编写了宏,在你的帮助下这很简单:) 基于模板,它看起来像这样(我只是给了它们增量名称,这对我的目的来说很好,但可能是我猜想更全面):

/*
 * Macro to for converting multichannel Tiffs to Tiffs with only specified channels, processes multiple images in a folder
 */

input = getDirectory("Input directory");
output = getDirectory("Output directory");

Dialog.create("File type");
Dialog.addString("File suffix: ", ".tif", 5);
Dialog.show();
suffix = Dialog.getString();

processFolder(input);

function processFolder(input) {
    list = getFileList(input);
    for (i = 0; i < list.length; i++) {
        if(File.isDirectory(input + list[i]))
            processFolder("" + input + list[i]);
        if(endsWith(list[i], suffix))
            processFile(input, output, list[i]);
    }
}

function processFile(input, output, file) {
    open(input + file);
    print("Processing: " + input + file);
    run("Make Substack...", "channels=1,2,4"); //Specify which channels should be in the final tif
    print("Saving to: " + output);
    saveAs("Tiff", output + i);
    close("*");
}
于 2015-07-24T12:59:56.610 回答