gpt4 book ai didi

java - 一堆图像的 ImageJ 亮度和对比度

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:19:18 26 4
gpt4 key购买 nike

我正在查看 ImageJ 中的图像数据集(一堆 .tif 图像,大约 130 帧),我对数据集有疑问。这是一系列显微镜图像,每一帧都是一个平面,比前一帧高/低 3-4 微米。随着我深入研究数据集,光散射使背景更亮,因此标本的主要特征变得更暗。

但是,ImageJ 的亮度和对比度功能使用直方图表示整个图像堆栈。当我在堆栈深处的图像上单击“自动”和“重置”时,产生的对比度非常完美:所有功能都非常亮。然而,回到堆栈的开始,大多数特征已经饱和。

我已经尝试从堆栈中的不同点手动提取一些图像,并分别对每个图像执行自动 -> 亮度和对比度重置,然后将它们重新转换为堆栈,它看起来非常可靠。我如何以编程方式(例如使用插件)为整个堆栈执行此操作?相关的 API 调用是什么?

最佳答案

开始编写此类脚本的一个好方法是使用 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% 饱和像素。正如您所指出的,这样做的问题在于,这会调整整个堆栈的最小值和最大值,而不仅仅是那个切片。但是,您可以通过运行 Process > Enhance Contrast 以不同的选项运行 Enhance ContrastImageJ documentation 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,那么脚本编辑器(例如通过 File > New > Script)是试验此类脚本的简单方法。)

当然,使用归一化选项确实会导致像素值发生变化,这意味着在这种情况下您会丢失信息,因此我不会将生成的堆栈用于定量结果。

希望对你有用。

关于java - 一堆图像的 ImageJ 亮度和对比度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4473768/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com