将阈值设置为autoThreshold的函数

时间:2014-01-10 04:09:52

标签: macros imagej

我为ImageJ / FIJI编写了一个宏来解卷积我的共聚焦显微镜图像并运行“3D对象计数器”插件。宏成功运行所有必需的命令,并将所有必需的数据保存在指定的位置。

但是,我发现3D-OC自动阈值(如插件对话框中所示)是严格的,导致对象丢失或分裂。 为了解决这个问题,我想通过一个类似于此处所做的预定函数来减少自动阈值(来自:How to get threshold value used by auto threshold Plugin),这导致了这段代码:

setAutoThreshold();
   getThreshold(lower,upper);
   v=setThreshold(lower,upper*0.5);
   run("3D Objects Counter", "threshold="v" slice=10 min.=400 max.=20971520 objects statistics summary");

我们的想法是调用AutoThreshold值,修改它们并将它们设置为变量。但是,当运行这些行时,将返回以下错误:

Number or numeric function expected in line 3.
v=<setThreshold>(lower,upper*0.5);

如果变量直接插入运行的阈值键(3D-OC),则会遇到以下消息:

Numeric value expected in run() function
Key:"threshold"
Value or variable name:"setThreshold(lower,upper*0.5"

关于如何将3D-OC阈值指定为所描述的变量的任何建议或帮助将不胜感激(当然,任何工作都可以:))。

干杯

编辑:在下面测试Jan的响应后(效果很好),看来我需要调用3D-OC插件设置的阈值。有谁知道怎么做?

1 个答案:

答案 0 :(得分:1)

getThreshold(lower, upper)函数返回提供的变量中的下限和上限阈值。无需为新变量分配任何值,正如您所观察到的,setThreshold没有任何返回值。

相反,您可以使用从getThreshold返回的值,并将它们用作run方法中的参数(以正确的方式,通过字符串连接,请参阅here) :

setAutoThreshold();
getThreshold(lower, v);
run("3D Objects Counter", "threshold=" + v + " slice=10 min.=400 max.=20971520 objects statistics summary");

或者,您可以在第二个参数中使用&v以避免最后一行中的字符串连接(请参阅documentation for the run() macro function):

run("3D Objects Counter", "threshold=&v slice=10 min.=400 max.=20971520 objects statistics summary");

您可能必须使用较低的阈值而不是较高的阈值,具体取决于您是计算亮对象还是暗对象。