ImageJ Macro,用于将多通道Tiff转换为仅具有指定通道的Tiff

时间:2015-06-22 14:55:16

标签: tiff imagej imagej-macro

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

我正在处理带有多个频道的Tiff文件(全部包含在.lif文件中,这是Leica格式)。我希望有一种方法可以轻松地将我的所有Tiff转换为只包含几个通道(我指定的)的Tiff。现在我手动完成每个图像,这很乏味。我没有编写宏的经验和一些帮助或起点将非常感激。我确定它不是一个复杂的宏。

截至目前,我已打开所有Tiff后使用以下手动例程和命令:

  1. 图片>堆栈>堆叠到图像 - 将堆叠的图像分离为单个图像
  2. 关闭图片我不想堆叠。
  3. 图片>堆栈>要堆叠的图像 - 将剩余的图像返回到堆栈并重命名。
  4. 图片> Hyperstacks> Stack to Hyperstack - 在这里我改变它,使图像有3个通道。
  5. 使用所需的频道和名称保存新的Tiff。
  6. 关闭Tiff并重复所有Tiff。
  7. 我想要的是一个宏,它为所有打开的Tiff循环上述步骤,让用户指定频道(例如,保留频道:2,3和5)。我知道这是一个非常简单的编程任务,但我真的可以使用一些帮助来完成它。

    谢谢! 约翰内斯

2 个答案:

答案 0 :(得分:1)

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

  • 图片>堆栈>工具>制作Substack ... ,可让您指定频道/切片,gets recorded为:

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

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

要将此过程应用于文件夹中的所有图像,请查看Script Editor中的处理文件夹模板(模板> IJ1宏> {{3 }} )以及斐济维基上的文档:

答案 1 :(得分:0)

感谢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("*");
}