Ошибка в пакетном объединении изображений (x.tif недопустим для "C2 (зеленый):")

Я хочу объединить два набора изображений флуоресцентного микроскопа в зелено-синее изображение, но у меня возникли проблемы с макросом (я ранее не использовал ImageJ). У меня есть папка с изображениями FITC зеленого цвета и папка с изображениями DAPI синего цвета. Я использовал эту модифицированную версию макроса, который я нашел в Интернете:

macro "batch_merge_channel"{
    count = 1;
  setBatchMode(true);
    file1= getDirectory("Choose a Directory");
    list1= getFileList(file1); 
    n1=lengthOf(list1);
    file2= getDirectory("Choose a Directory");
    list2= getFileList(file2); 
    n2=lengthOf(list2);
    open(file1+list1[1]);
    open(file2+list2[1]);
    small = n1;
    if(small<n2)
        small = n2;
        for(i=0;i<small;i++)
    {
          run("Merge Channels...", "c2="+list1[1]+ " c3="+list2[1]+ " keep"); 
          name = substring(list1, 0, 13)+")_merge";
          saveAs("tiff", "C:\\Merge\\"+name);
          first += 2;
          close();
          setBatchMode(false);
      }

Это, однако, возвращает ошибку

x.tif не является правильным выбором для "C2 (зеленый):"

где x - это имя первого файла в первой папке.

Если я объединяю изображения вручную, два на два, ошибки не возникает. Я предполагаю, что проблема в коде макроса. Я обнаружил несколько случаев этой ошибки в Интернете, но ни одно из решений, которые, казалось бы, не работали для этих людей, не работает для меня.

Любая помощь будет оценена!

1 ответ

Если вы еще не решили эту проблему, то отличным местом для получения помощи по вопросам ImageJ является форум.

Я могу предложить пару идей:

  • Ваше изображение успешно открыто макросом? Вы можете установить пакетный режим на false, чтобы проверить это.
  • Это выглядит как for цикл не использует переменную i, Работает на первой паре изображений (list1[1], list2[1]), затем закрывает объединенное изображение, но затем пытается снова обработать изображение 1. Чтобы фактически просмотреть все изображения в папке, вы должны поместить в цикл что-то вроде этого (вам не нужно "держать" - лучше не указывать его, чтобы исходные изображения автоматически закрывались) open(file1+list1[i]); open(file2+list2[i]); run("Merge Channels...", "c2="+list1[i]+ " c3="+list2[i]); - Отключение пакетного режима следует выполнять после цикла, а не внутри цикла.

Вот версия, которая работает для меня.

// @File(label = "Green images", style = "directory") file1
// @File(label = "Blue images", style = "directory") file2
// @File(label = "Output directory", style = "directory") output

// Do not delete or move the top 3 lines! They contain essential parameters

setBatchMode(true);
list1= getFileList(file1); 
n1=lengthOf(list1);
print("n1 = ",n1);
list2= getFileList(file2); 
n2=lengthOf(list2);
small = n1;
if(small<n2)
 small = n2;
for(i=0;i<small;i++)
    {
 image1=list1[i];
 image2=list2[i];
    open(file1+File.separator+list1[i]);
    open(file2+File.separator+list2[i]);
 print("processing image",i);
 run("Merge Channels...", "c2=&image1 c3=&image2"); 
    name = substring(image1, 0, 13)+"_merge";
 saveAs("tiff", output+File.separator+name);
 close();
 }
setBatchMode(false);

Надеюсь это поможет.

Другие вопросы по тегам