MIJ:在Matlab中执行imageJ(斐济)宏直到结束

MIJ:在Matlab中执行imageJ(斐济)宏直到结束,matlab,imagej,imagej-macro,Matlab,Imagej,Imagej Macro,我使用MIJ在Matlab中执行ImageJ宏。宏必须在“for”循环中执行多次。问题是Matlab不会等到宏结束。最初,我通过“while”循环解决了这个问题,检查宏生成的“Results”表是否为空。但是,它只在第一次解决了问题,然后从第二次开始,“结果”表不再是空的。 我还考虑在宏的末尾生成一个变量,并用它来检查宏是否完成,但我不知道如何在Matlab中读取它 你对我如何解决这个问题有什么建议吗 提前多谢了, 阿莱西亚 下面是我的代码示例: javaaddpath 'C:/Program

我使用MIJ在Matlab中执行ImageJ宏。宏必须在“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

编辑:忽略下面的内容,我在正确的轨道上,但没有像我本应该那样注意。我认为这个问题是将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循环递增

Hi pᴇʜ,谢谢您的回复。是的,它只在第一次工作,因为“结果”表保留了以前的值。我试图删除您建议的行,但问题仍然存在,因为imageJ结果表仍然满。无论如何,我找到了另一种解决问题的方法:我在imageJ宏中添加了一行,在开始时,我清除了“results”表。现在它起作用了。无论如何谢谢你!当然,我想可能会发生类似的事情。很高兴你找到了答案:-)如果可能的话,如果你能将这个问题标记为已解决,以防其他人有类似的问题并正在寻找解决方案,那就太好了