MIJ: выполнить макрос imageJ (Фиджи) до конца в Matlab - PullRequest
0 голосов
/ 07 октября 2019

Я использую MIJ для выполнения макроса ImageJ в Matlab. Макрос должен выполняться несколько раз в цикле «for». Проблема в том, что Matlab не ждет окончания макроса. Первоначально я решил проблему с помощью цикла while, проверяя, была ли таблица «Results», сгенерированная из макроса, пустой или нет. Однако, это решает проблему только в первый раз, затем со второго раза таблица «Результаты» больше не пуста. Я также подумал о генерации переменной в конце макроса и использовании ее для проверки завершения макроса, но я не знаю, как читать ее в Matlab.

Есть ли у вас какие-либо предположения о том, как яможет решить проблему?

Заранее большое спасибо, Алеся

Вот пример моего кода:

javaaddpath 'C:/Program Files/MATLAB/R2019a_x64/java/ij.jar'
javaaddpath 'C:/Program Files/MATLAB/R2019a_x64/java/mij.jar'
MIJ.start('C:/fiji-win64/Fiji.app/plugins');

IJ=ij.IJ(); 

macro_path=... 
'C:/Macro_waterinoil.ijm'; 
for pos=1:16
    im = mijread(strcat('E:/droplets.tif'));
    figure(1)
    imshow(im,[0 255])

   IJ.runMacroFile(java.lang.String(macro_path)); 

    res_Hough=0;  
    res_Hough=MIJ.getResultsTable();


    while res_Hough==0;   
        res_Hough=MIJ.getResultsTable();        
    end

    im_res=MIJ.getCurrentImage();

    MIJ.run('Clear Results');
    MIJ.run('Close All');
end

1 Ответ

0 голосов
/ 08 октября 2019

Редактировать: Игнорировать ниже, я был на правильном пути, но не уделял так много внимания, как следовало бы. Я думаю, что эта проблема - строка сразу после того, как вы установите res_Hough в 0 (т.е. res_Hough = MIJ.getResultsTable ();). Попробуйте удалить его, чтобы следующая строка представляла собой цикл while, тогда мы можем проверить вывод и посмотреть, может ли нижеприведенное также применить

Если я правильно понял, вы используете цикл while для непрерывного пинга до тех пор, покатаблица заполнена, затем сохраните эти значения в res_Hough, верно? Мне интересно, если это ограничение присуще ImageJ / FIJI. Причина, по которой я думаю, может быть в том, что очень простое объяснение вашей проблемы состоит в том, что таблица сохраняет предыдущие значения и поэтому всегда будет заполнена после первого цикла, пока не будет очищена вручную каким-либо образом. Как вы думаете, это может быть так? Возможно, добавьте оператор print после цикла while и посмотрите, печатает ли он те же значения на протяжении цикла for.

Полагаю, что в следующий раз я действительно попытаюсь предложить решение независимо от того,вышесказанное. Моя идея состоит в том, чтобы попробовать проверить цикл по сравнению со значениями таблицы предыдущей итерации, пока они не станут другими, а затем спрятать обновленные значения. Имеет ли это смысл? Что-то вроде:

while (res_Hough[i]==0) or (res_Hough[i-1]==MIJ.getResultsTable());
    res_Hough[i]=MIJ.getResultsTable();

Где я увеличивается на цикл for

...