我为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插件设置的阈值。有谁知道怎么做?
答案 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");
您可能必须使用较低的阈值而不是较高的阈值,具体取决于您是计算亮对象还是暗对象。