我正在imagej中构建一个插件,它会在进行分析之前对图像进行一些预处理。我希望这个插件能够在单个图像和堆栈上运行。以下是我的插件代码示例:
import ij.*;
import ij.process.*;
import ij.gui.*;
import java.awt.*;
import ij.plugin.*;
public class My_Analysis implements PlugIn {
public void run(String arg) {
ImagePlus imp = IJ.getImage();
IJ.run(imp, "Find Edges", "stack");
Prefs.blackBackground = true;
IJ.run(imp, "Make Binary", "stack");
IJ.run(imp, "Erode", "stack");
}
}
之后还有更多,但它只是参考分析而我并不认为这是相关的。另外,我在代码的前面有一个GenericDialog,但也没有认为它是相关的,并且不想让样本陷入困境。当然,如果有人认为有必要,我可以包括所有内容。
我的问题是,这可以在单个图像上精美地工作,但Make Binary会反转堆栈中的黑/白。我敢打赌,我可以简单地将Prefs.blackBackground切换为false,这将解决它,但随后它不会在单个图像上工作。
另一条信息是,如果我采用"堆栈"在Make Binary行之外,它会弹出一个对话框,提示我选择几个选项,其中一个选项是背景是否为黑色。如果我选择此选项,它会正确执行Make Binary,但不会将它应用于整个堆栈或其他东西,因为我最终只分析了第一个图像和其他图像。堆栈看起来很奇怪。
非常感谢任何帮助。非常感谢你。
答案 0 :(得分:1)
我同意ImageJ1.x的这种行为不一致。我不确定是否有意,但可以在ImageJ forum或mailing list上报告,因此可能会修复。
另一条信息是,如果我采用"堆栈"走出了 制作二进制行,它会弹出一个提示我的对话框 选择几个选项,其中一个是背景是否 黑色。
这确实是这里工作解决方案的路径:只需添加关键字black
即可重现脚本或宏中的行为,例如:这个Groovy脚本在单个图像和堆栈上运行相同:
import ij.IJ;
import ij.ImagePlus;
import ij.Prefs;
ImagePlus imp = IJ.getImage();
IJ.run(imp, "Find Edges", "stack");
Prefs.blackBackground = true;
IJ.run(imp, "Make Binary", "stack black"); // this line changed
IJ.run(imp, "Erode", "stack");
您可以使用Macro recorder并运行进程>获取所需的关键字二元>在堆栈上创建二进制。