0

我想将两组荧光显微镜图像合并成一个绿色和蓝色图像,但我在使用宏时遇到了问题(以前没有使用过 ImageJ)。我有一个 FITC-images 文件夹被涂成绿色,一个 DAPI-images 文件夹被涂成蓝色。我一直在使用我在网上找到的宏的修改版本:

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 是第一个文件夹中第一个文件的名称。

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

任何帮助,将不胜感激!

4

1 回答 1

0

如果您还没有解决这个问题,在 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);

希望这可以帮助。

于 2017-04-26T14:36:31.873 回答