批量合并图像时出错(x.tif不是" C2(绿色)的有效选择:")

时间:2017-04-20 02:53:43

标签: imagej imagej-macro

我想将两组荧光显微镜图像合并成一个绿色&蓝色图像,但我遇到了宏的问题(以前没有使用过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是第一个文件夹中第一个文件的名称。

如果我手动合并图像,两个一个,则没有错误。所以我假设问题出在宏代码中。 我在网上发现了几个这种错误的案例,但似乎没有一个适合这些人的解决方案适合我。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

如果你没有解决这个问题,那么获得ImageJ问题帮助的好地方就是forum

我可以提出一些想法:

  • 宏是否成功打开了您的图片?您可以将批处理模式设置为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);

希望这有帮助。