Mag*_*sol 6 java image-processing imagej
我正在查看ImageJ中的数据集图像集(一堆.tif图像,大约130帧),我对数据集有疑问.这是一系列显微镜图像,每个框架是一个平面,比前一个框架高出/低于3-4微米.随着我对数据集的深入研究,光散射使背景更加明亮,因此样本的主要特征更加暗淡.
但是,ImageJ的亮度和对比度功能使用直方图来表示整个图像堆栈.当我在堆栈深处的图像上单击"自动"和"重置"时,产生的对比度是完美的:所有功能都非常好.然而,然后,在堆栈开始时,大多数功能已经饱和.
我尝试从堆栈中的各个点手动提取一些图像,然后分别在每个点上执行自动 - >亮度和对比度重置,然后将它们重新转换为堆栈,看起来非常稳固.如何以编程方式(例如使用插件)为整个堆栈执行此操作?什么是相关的API调用?
开始编写此类脚本的一个好方法是使用 ImageJ 的宏记录器 - 您可以使用Plugins > Macros > Record .... 对于此示例,我假设您已将Record:选项框切换为JavaScript,但如果您更熟悉 ImageJ 宏语言或用 Java 编写插件,那么其他选项之一可能是更好的选择。如果您随后打开图像并使用Image > Stacks > Set Slice ...并选择(例如)切片 20,您应该会看到:
imp.setSlice(20);
Run Code Online (Sandbox Code Playgroud)
...出现在录音机中。现在,如果您运行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");
Run Code Online (Sandbox Code Playgroud)
...您应该看到只有切片 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");
}
Run Code Online (Sandbox Code Playgroud)
(如果您使用的是 Fiji,那么脚本编辑器(例如 via File > New > Script)是试验此类脚本的简单方法。)
当然,使用归一化选项确实会导致像素值被更改,这意味着在这种情况下您将丢失信息,因此我不会将生成的堆栈用于定量结果。
我希望这有一些用处。
| 归档时间: |
|
| 查看次数: |
15756 次 |
| 最近记录: |