自迁移出 MediaWiki 以来,本页内容尚未经过审查。如果您愿意帮忙,请查看帮助指南!
如何对完整目录应用通用操作
通常您希望对给定目录中的所有应用图像通用操作。本教程试图帮助您这一点。另外,Script Editor通过Templates › ImageJ Macro › Process Folder提供了一个模板,有助于快速入门。
##步骤1:录制宏
首先,启动宏录制器:

这将打开宏录制器窗口:

现在对单个图像执行操作。确保最后保存图像。
示例:裁剪图像。首先,选择一个形状:

然后修剪它。

保存后,录音窗口将显示:

点击创建按钮,您将得到:

##步骤2:使用宏通用
现在的问题是这个宏包含您保存的文件的逐字名称,但是当然,您不想将目录中的所有文件保存为clown.jpg!
解决方案只是宏包装在一个函数中,该函数采用占位符作为文件名。我们调用的函数名为action:
function action(output, filename) {
makeRectangle(10, 10, 300, 180);
run("Crop");
saveAs("Jpeg", output + filename);
}
正如您所看到的,我们保存的文件的完整路径(由记录器用引号括起来)(“/home/fiji/images/clown.jpg”)被剪切输出为目录的完整路径和附加有加附件的文件名(输出+文件名),它们作为所谓的参数传递给函数。
原因是你希望ImageJ用变量名保存处理后的图像。对于单个图像,该函数的调用方式如下:
action("home/fiji/output-images/", "bridge.gif");
现在,让我们增强该功能,打开自身图像,并在保存结果后关闭图像:
function action(input, output, filename) {
open(input + filename);
makeRectangle(10, 10, 300, 180);
run("Crop");
saveAs("Jpeg", output + filename);
close();
}
该函数现在采用三个参数:输入和输出目录以及文件名。这些需要是三个参数,因为图像应保存到与原始图像不同的目录中(以便在最终宏的后续运行中输出图像不会被误认为是输入图像)。
##步骤3:迭代给定目录中的所有图像
定义通用 action 函数后,您可以在输入目录中的每个图像上调用它:
input = "/home/fiji/input/";
output = "/home/fiji/images/";
list = getFileList(input);
for (i = 0; i < list.length; i++){
action(input, output, list[i]);
}
现在,这有点复杂:首先,定义一个变量input。原因是输入目录不仅需要获取图像列表,还需要传递给action函数。
为了使宏更容易修改,输出目录也存储在变量中(名称为output)。
下一行定义了一个变量 list,它获取内置函数 getFileList 的结果。结果是一个称为的 array,一个包含多个 list.length 项的列表,由数字 0, …, list.length-1 索引。这些项目是给定 input 名称 目录中文件的。
for 循环除了将整数 0, …, list.length-1 分配给变量 i 并使用每个设置执行 { 和 } 之间的行之外,什么也不做。
for循环中执行的行使用目录列表中的第i个文件名(通过list[i]获得)调用action函数。
有时,当 ImageJ 必须打开或关闭窗口并其执行操作时,它可能会感到困惑,在这种情况下,它可能会希望扩展操作被无序调用。为了防止这种情况,请启用批处理模式:
input = "/home/fiji/input/";
output = "/home/fiji/images/";
setBatchMode(true);
list = getFileList(input);
for (i = 0; i < list.length; i++){
action(input, output, list[i]);
}
setBatchMode(false);
替代方案:多图像处理器
如果您的宏不使用图像的实际名称(例如外汇助手),您可以使用多图像处理器插件。
为了能够使用这个插件,您需要将宏保存到文件中;该宏需要直接执行操作,即文件中可以有一个函数,但必须在定义后调用它。然而,稍微调整宏录制器的输出通常会更容易。
在我们的例子中,该文件将只包含这些行:
makeRectangle(10, 10, 300, 180);
run("Crop");
在 Process 菜单中找到 Multiple ImageProcessor 插件:

该对话框需要像这样填写:
