【问题标题】:Different results with application and code in ImageJImageJ 中的应用程序和代码的不同结果
【发布时间】:2014-07-24 17:22:36
【问题描述】:

当我尝试使用 ImageJ 运行图片分析并尝试计算孔隙率时,出现了我的问题。

我记录了宏并在 java 中运行相同的过程。这两次执行的结果不同,我不知道为什么。你能帮忙吗?

我尝试使用ImageJ API 再次编写代码。我运行的两个示例如下所示:

    ImagePlus imp = new ImagePlus();
    imp = IJ.openImage("path_to_image");
    int measurements = Measurements.AREA + Measurements.MEAN +Measurements.STD_DEV +    Measurements.AREA_FRACTION;
    ResultsTable rt = new ResultsTable();
    Analyzer analyzer = new Analyzer(imp, measurements, rt);
    IJ.setAutoThreshold(imp, "Default");
    System.out.println(rt.MIN);

还有记录的代码

    imp = IJ.openImage("path_to_image");
    IJ.run("Set Measurements...", "area mean standard modal min median area_fraction limit redirect=None decimal=3");
    IJ.setAutoThreshold(imp, "Default");
    IJ.run(imp, "Measure", "");

【问题讨论】:

    标签: java imagej


    【解决方案1】:

    你的代码有几个问题:

    您记录的代码似乎是 Javascript,而不是 ImageJ 宏代码,因此这里是您的脚本的一些版本,它们都采用 Blobs 示例图像(File > Open Samples > Blobs (25K)),设置默认阈值并测量相同的参数。

    ImageJ1 宏:

    run("Blobs (25K)");
    setAutoThreshold("Default");
    run("Set Measurements...", "area mean standard modal min median area_fraction limit redirect=None decimal=3");
    run("Measure");
    

    Javascript:

    importClass(Packages.ij.IJ);
    
    imp = IJ.openImage("http://imagej.nih.gov/ij/images/blobs.gif");
    IJ.setAutoThreshold(imp, "Default");
    IJ.run("Set Measurements...", "area mean standard modal min median area_fraction limit redirect=None decimal=3");
    IJ.run(imp, "Measure", "");
    imp.show();
    

    Beanshell(最接近Java代码):

    import ij.IJ;
    
    imp = IJ.openImage("http://imagej.nih.gov/ij/images/blobs.gif");
    IJ.setAutoThreshold(imp, "Default");
    IJ.run("Set Measurements...", "area mean standard modal min median area_fraction limit redirect=None decimal=3");
    IJ.run(imp, "Measure", "");
    imp.show();
    

    如果您想避免调用 IJ 并使用较低级别的 ImageJ API,那么它在 Beanshell 中的外观如下:

    import ij.ImagePlus;
    import ij.IJ;
    import ij.measure.Measurements;
    import ij.measure.ResultsTable;
    import ij.plugin.filter.Analyzer;
    
    ImagePlus imp = IJ.openImage("http://imagej.nih.gov/ij/images/blobs.gif");
    // IJ.setAutoThreshold(imp, "Default");
    imp.getProcessor().setAutoThreshold("Default");
    
    // IJ.run("Set Measurements...", "area mean standard modal min median area_fraction limit redirect=None decimal=3");
    int measurements = Measurements.AREA + Measurements.MEAN + Measurements.MIN_MAX + Measurements.STD_DEV + Measurements.MODE + Measurements.MEDIAN + Measurements.AREA_FRACTION + Measurements.LIMIT;
    
    // IJ.run(imp, "Measure", "");
    ResultsTable rt = new ResultsTable();
    Analyzer analyzer = new Analyzer(imp, measurements, rt);
    analyzer.measure();
    
    Double result = rt.getValue("Min", rt.getCounter() - 1); // get value of interest
    IJ.log(result.toString()); // print to log window
    // Alternatively, show the full results table
    // rt.show("New Results");
    

    【讨论】:

    • 感谢您的即时答复。你对我的代码是完全正确的。我是 ImageJ 的新手。我试图找到一种 API 教程,但我找不到任何东西。除了官方网站,你知道任何与使用 ImageJ Api 相关的书籍或网站吗?
    • @raistlin 这个tutorial by Werner Bailer 可能有用;提问的最佳地点通常是ImageJ mailing list;您会在斐济 wiki 上找到更多关于 pluginsscripting 的资源。由于它是一个 wiki,因此请随意添加对可能与您现在处于相同情况的其他人有用的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多