我想将两组荧光显微镜图像合并成一个绿色&蓝色图像,但我遇到了宏的问题(以前没有使用过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不是&#34; C2(绿色)的有效选择:&#34;
x是第一个文件夹中第一个文件的名称。
如果我手动合并图像,两个一个,则没有错误。所以我假设问题出在宏代码中。 我在网上发现了几个这种错误的案例,但似乎没有一个适合这些人的解决方案适合我。
任何帮助将不胜感激!
答案 0 :(得分:0)
如果你没有解决这个问题,那么获得ImageJ问题帮助的好地方就是forum。
我可以提出一些想法:
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);
希望这有帮助。