Макрос ImageJ для преобразования многоканальных Tiff в Tiff только с указанными каналами

У меня есть довольно простой вопрос по программированию, я надеялся, что кто-нибудь может мне помочь.

Я работаю с файлами Tiff с несколькими каналами (все они содержатся в файле .lif в формате Leica). Мне нужен способ легко конвертировать все мои Tiff в Tiff, содержащие только несколько каналов (которые я указываю). Сейчас я делаю это вручную для каждого изображения, и это утомительно. У меня нет опыта написания макросов, поэтому буду очень признателен за помощь или отправную точку. Я уверен, что это не сложный макрос для написания.

На данный момент я использую следующую ручную процедуру и команды после того, как открыл все свои Tiff:

  1. Изображение > Подборки > Стек в изображения – разделяет сложенные изображения на отдельные изображения.
  2. Закрыть изображения Я не хочу быть в стеке.
  3. Изображение > Стопки > Изображения в стопку — возвращает оставшиеся изображения в стопку и переименовывает ее.
  4. Image > Hyperstacks > Stack to Hyperstack — здесь я меняю так, чтобы у изображения было 3 канала.
  5. Сохраните новый Tiff с нужными каналами и именем.
  6. Закройте Tiff и повторите для всех Tiff.

Мне нужен макрос, который повторяет описанные выше шаги для всех открытых Tiff, позволяя пользователю указывать каналы (например, сохранять каналы: 2,3 и 5). Я знаю, что это очень простая задача программирования, но мне действительно не помешала бы помощь в ее выполнении.

Спасибо! Йоханнес


person Johannes Holm    schedule 22.06.2015    source источник


Ответы (2)


Есть несколько менее сложных возможностей для создания стека только с подмножеством каналов:

  • Image > Stacks > Tools > Make Substack..., который позволяет указать каналы/фрагменты и записывается как:

    run("Make Substack...", "channels=1,3-5");
    
  • Изображение > Дублировать..., где можно выбрать непрерывный диапазон каналов, например:

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

Чтобы применить эту процедуру ко всем изображениям в папке, просмотрите шаблон Process Folder в Script. Редактор (Шаблоны > Макрос IJ1 > Папка процесса) и в документации на вики Фиджи:

person Jan Eglinger    schedule 22.06.2015
comment
Спасибо! Именно то, что мне было нужно, чтобы начать. Я опубликую обновление, когда, надеюсь, у меня будет время реализовать его и получить работающий макрос. - person Johannes Holm; 26.06.2015

Спасибо за помощь, Ян Эглингер, вернувшись из отпуска, мне удалось написать макрос, который с вашей помощью был прост :) На основе шаблона это выглядит так (я просто дал им инкрементные имена, которые подходят для моей цели, но могут быть сделал более всесторонне, я думаю):

/*
 * 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("*");
}
person Johannes Holm    schedule 24.07.2015