0

我正在使用 MIJ 在 Matlab 中执行 ImageJ 宏。宏必须在“for”循环中多次执行。问题是 Matlab 不会等到宏结束。最初我用“while”循环解决了这个问题,检查从宏生成的“结果”表是否为空。但是,它只是第一次解决了问题,然后从第二次开始,“结果”表不再为空。我也想过在宏的末尾生成一个变量并用它来检查宏是否完成,但我不知道如何在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
4

1 回答 1

0

编辑:忽略下面,我在正确的轨道上,但没有像我应该的那样关注。我认为这个问题是在您将 res_Hough 设置为 0 之后的那一行(即 res_Hough=MIJ.getResultsTable();)。尝试删除它,以便下一行是 while 循环,然后我们可以检查输出,看看下面是否也适用

如果我理解正确,您正在使用 while 循环连续 ping 直到表已满,然后将这些值存储在 res_Hough 中,对吗?我想知道这是否是 ImageJ/FIJI 固有的限制。我认为可能是这种情况的原因是,对您的问题的一个非常简单的解释是该表保留了以前的值,因此在第一个循环之后将始终是满的,除非以某种方式手动清除。你认为可能是这样吗?也许在 while 循环之后添加一个 print 语句,看看它是否在 for 循环期间打印相同的值。

我想接下来要做的是让我真正尝试提供解决方案,而不管上述情况如何。我的想法是尝试对前一个迭代的表值进行 while 循环检查,直到它们不同,然后存储更新的值。那有意义吗?就像是:

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

其中 i 由 for 循环递增

于 2019-10-07T23:05:06.743 回答