echo () в MATLAB не будет выводить нужную информацию из класса Java - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть скрипт анализа в MATLAB, который использует MIJI и плагин Java под названием TrackMate. Он инициализируется с помощью следующего сценария и открывает файл изображения для анализа.

% add java paths and script folder
javaaddpath '\mij.jar';
javaaddpath '\ij-1.51n.jar';
addpath '\Fiji.app\scripts';
Miji(false);

% Get currently selected image
% imp = ij.IJ.openImage('http://fiji.sc/samples/FakeTracks.tif')
imp = ij.ImagePlus('\B1R1 16000 Frames 405 561nm HILO.tif');
imp.show()

Создается объект модели и настроек, который сообщает TrackMate, как анализировать изображение.

%----------------------------
% Create the model object now
%----------------------------   
% Some of the parameters we configure below need to have
% a reference to the model at creation. So we create an
% empty model now.

model = fiji.plugin.trackmate.Model();    

% Send all messages to ImageJ log window.
model.setLogger(fiji.plugin.trackmate.Logger.IJ_LOGGER)

%------------------------
% Prepare settings object
%------------------------      
settings = fiji.plugin.trackmate.Settings();
settings.setFrom(imp)

Модель возвращает следующие компоненты при вызове get(model);

  Class: [1×1 java.lang.Class]
           FeatureModel: [1×1 fiji.plugin.trackmate.FeatureModel]
                 Logger: [1×1 fiji.plugin.trackmate.Logger$5]
    ModelChangeListener: [1 java.util.LinkedHashSet]
             SpaceUnits: 'pixels'
                  Spots: [1×1 fiji.plugin.trackmate.SpotCollection]
              TimeUnits: 'frames'
             TrackModel: [1×1 fiji.plugin.trackmate.TrackModel]

Интерес представляет компонент FeatureModel , который содержит результаты анализа из TrackMate. При запуске featMod = get(model,'FeatureModel') следующее возвращается как FeatureModel 1x1;

Spot features declared:
   - QUALITY: Quality, 'Quality' (QUALITY) - double valued.
   - POSITION_X: X, 'X' (POSITION) - double valued.
   - POSITION_Y: Y, 'Y' (POSITION) - double valued.
   - POSITION_Z: Z, 'Z' (POSITION) - double valued.
   - POSITION_T: T, 'T' (TIME) - double valued.
   - FRAME: Frame, 'Frame' (NONE) - integer valued.
   - RADIUS: Radius, 'R' (LENGTH) - double valued.
   - VISIBILITY: Visibility, 'Visibility' (NONE) - integer valued.

Edge features declared:

Track features declared:
   - TRACK_DURATION: Duration of track, 'Duration' (TIME) - double valued.
   - TRACK_START: Track start, 'T start' (TIME) - double valued.
   - TRACK_STOP: Track stop, 'T stop' (TIME) - double valued.
   - TRACK_DISPLACEMENT: Track displacement, 'Displacement' (LENGTH) - double valued.

Я могу вывести отдельные значения в виде строки Java, указав featMod.echo(), однако это говорит только о значениях из функций трека, объявленных компонента featMod, а не Spot объявлены функции , что является выводом, необходимым для завершения анализа.

Как получить значения из объявленных компонентов точечных объектов? Я не могу понять, почему он не дает мне желаемый вывод, а дает мне другой компонент.

Когда я пытаюсь вызвать его конкретно с помощью featMod.echo('SpotFeatures'), я получаю сообщение об ошибке;

Не найден метод 'echo' с соответствующей подписью для класса 'fiji.plugin.trackmate.FeatureModel'.

1 Ответ

0 голосов
/ 25 июля 2019

У меня была такая же проблема, она была решена на форуме изображений пользователем emartini https://forum.image.sc/t/problem-exporting-xml-from-trackmate-in-matlab/27242/3

код, который нужно добавить

import fiji.plugin.trackmate.io.TmXmlWriter %add this import

outfile=java.io.File('F:\Projects\Matlab\Test_track_july25.xml'); %%or your file name 
writer = fiji.plugin.trackmate.io.TmXmlWriter(outfile); 
writer.appendModel( trackmate.getModel() ) %trackmate instantiate like this before 
trackmate = TrackMate(model, settings) writer.appendSettings( trackmate.getSettings() ) writer.writeToFile()
...