2014-01-10 137 views
0

我已經爲ImageJ/FIJI寫入了一個宏,用於對我的共聚焦顯微鏡圖像進行去卷積並運行「3D Object Counter」插件。宏成功運行所有必需的命令並將所有必需的數據保存在指定的位置。將閾值設置爲autoThreshold的函數

但是,我發現3D-OC autotreshold(如插件對話框中所示)嚴格導致對象丟失或分割。 爲了解決這個問題,我想通過類似於在這裏(來源:How to get threshold value used by auto threshold Plugin)完成規定的功能的東西,以減少autothreshold這就造成了這樣的代碼:

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)以下MSG遇到:

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

任何關於如何將3D-OC閾值指定爲變量的建議或幫助都將非常感謝(當然,任何工作:))。

乾杯

編輯:下面的測試簡的反應(這完美的作品)之後,似乎我需要調用由3D-OC插件設置的閾值。有人知道怎麼做嗎?

回答

1

getThreshold(lower, upper)函數返回提供的變量中的下限和上限閾值。無需爲新變量分配任何值,並且如您所見,setThreshold不具有任何返回值。

相反,您可以使用值(S)從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"); 

您可能需要使用較低的,而不是上的閾值,取決於你是否計數明亮或黑暗的物體。

+0

一月,謝謝你。它完全按照規定完成。不過,我似乎從一開始就理解我的問題。 ImageJ中的閾值函數都沒有返回與3D對象計數器插件相同的下限。你是否知道有什麼方法可以調用這個插件自動確定的閾值(這樣就可以像上面描述的那樣處理它)? – user3180258

+0

似乎3D對象計數器正在使用圖像堆棧的_last slice_來生成閾值(請參見[源代碼](https://github.com/fiji/fiji/blob/master/src-plugins/3D_Objects_Counter/src /main/java/_3D_objects_counter.java#L76-85)) –

+0

道歉爲不標記爲答案Jan – user3180258