开始编写此类脚本的一个好方法是使用 ImageJ 的宏记录器 - 您可以使用Plugins > Macros > Record ...
. 对于此示例,我假设您已将Record:
选项框切换为JavaScript
,但如果您更熟悉 ImageJ 宏语言或用 Java 编写插件,则其他选项之一可能是更好的选择。如果您随后打开图像并使用Image > Stacks > Set Slice ...
并选择(例如)第 20 片,您应该会看到:
imp.setSlice(20);
...出现在录音机中。现在,如果您运行Image > Adjust > Brightness/Contrast...
并选择Auto
,您应该在记录器中看到这相当于运行Enhance Contrast
保持 0.35% 的饱和像素。正如您所指出的,问题在于这会调整整个堆栈的最小值和最大值,而不仅仅是那个切片。但是,您可以通过运行Enhance Contrast
使用不同的选项来运行Process > Enhance Contrast
. ImageJ 文档 wiki上有关该选项的部分解释说,如果您想更改像素值而不是设置堆栈的最小值和最大值,则需要选择“标准化”选项。如果我选择这样做,宏记录器会记录:
imp.setSlice(20);
IJ.run(imp, "Enhance Contrast", "saturated=0.35 normalize");
...你应该看到只有第 20 片被改变了。然后,您可以将其包装在一个循环中,该循环在每个切片上运行相同的增强功能:
var imp = IJ.getImage();
var n = imp.getStackSize();
for( var i = 0; i < n; ++i) {
imp.setSlice(i+1);
IJ.run(imp, "Enhance Contrast", "saturated=4 normalize");
}
(如果您使用的是 Fiji,那么脚本编辑器(例如 via File > New > Script
)是一种尝试此类脚本的简单方法。)
当然,使用 normalize 选项确实会导致像素值被更改,这意味着在这种情况下您会丢失信息,因此我不会将结果堆栈用于定量结果。
我希望这有点用。