我正在使用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
答案 0 :(得分: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();
其中我以for循环递增