Macros 将阈值设置为自动阈值的函数

Macros 将阈值设置为自动阈值的函数,macros,imagej,Macros,Imagej,我已经为ImageJ/FIJI编写了一个宏,用于解卷积共焦显微镜图像并运行“3D对象计数器”插件。宏成功运行所有必需的命令,并将所有必需的数据保存在指定位置 然而,我发现3D-OC自动阈值(如插件对话框中所示)过于严格,导致对象丢失或分割。 为了解决这个问题,我想通过一个预先确定的函数来减少autothreshold,类似于这里(from:)所做的,这导致了以下代码: setAutoThreshold(); getThreshold(lower,upper); v=setThresh

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

然而,我发现3D-OC自动阈值(如插件对话框中所示)过于严格,导致对象丢失或分割。 为了解决这个问题,我想通过一个预先确定的函数来减少autothreshold,类似于这里(from:)所做的,这导致了以下代码:

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");
其想法是调用自动阈值,修改它们并将它们设置为变量。但是,当运行这些行时,将返回以下错误:

Number or numeric function expected in line 3.
v=<setThreshold>(lower,upper*0.5);
对于如何将3D-OC阈值指定为所述变量的任何建议或帮助,我们将不胜感激(当然,任何解决方法都是如此:)

干杯

编辑:在测试了下面Jan的回答(效果非常好)之后,我似乎需要调用3D-OC插件设置的阈值。有人知道怎么做吗?

该函数返回所提供变量中的下限和上限阈值。无需为新变量指定任何值,正如您所观察到的,
setThreshold
没有任何返回值

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

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


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

Jan,谢谢您。它完全符合规定。然而,我似乎没有从一开始就理解我的问题。ImageJ中的阈值函数都没有返回与3D对象计数器插件相同的下限。您是否知道有什么方法可以调用此插件自动确定的阈值(这样就可以按照上面所述进行处理)?似乎3D Objects Counter正在使用图像堆栈的最后一个切片来生成阈值(请参阅)
Numeric value expected in run() function
Key:"threshold"
Value or variable name:"setThreshold(lower,upper*0.5"
setAutoThreshold();
getThreshold(lower, v);
run("3D Objects Counter", "threshold=" + v + " slice=10 min.=400 max.=20971520 objects statistics summary");
run("3D Objects Counter", "threshold=&v slice=10 min.=400 max.=20971520 objects statistics summary");