Ошибка в пакетном объединении изображений (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);
Надеюсь это поможет.