Разные результаты с приложением и кодом в ImageJ

Моя проблема возникла, когда я попытался запустить анализ изображения с помощью 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", "");

person raistlin    schedule 23.07.2014    source источник


Ответы (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 и использовать API ImageJ более низкого уровня, вот как это выглядит в 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");
person Jan Eglinger    schedule 24.07.2014
comment
Спасибо за немедленный ответ. Вы совершенно правы насчет моего кода. Я новичок в ImageJ. Я пытался найти учебник по API, но ничего не нашел. Знаете ли вы какую-либо книгу или сайт, связанный с использованием ImageJ Api, кроме официального сайта? - person raistlin; 24.07.2014
comment
@raistlin Это руководство Вернера Бейлера может оказаться полезным; лучше всего задавать вопросы в списке рассылки ImageJ; и вы найдете дополнительные ресурсы о плагинах и scripting на вики Фиджи. Поскольку это вики, не стесняйтесь добавлять информацию, полезную для тех, кто может оказаться в той же ситуации, что и вы сейчас. - person Jan Eglinger; 25.07.2014