ImageJ

2014-07-23 32 views
0

中的應用程序和代碼的不同結果我試圖使用ImageJ運行圖片分析並嘗試計算孔隙度時出現了我的問題。ImageJ

我記錄了這些宏,並在java中運行相同的過程。這兩次處決的結果是不同的,我不知道爲什麼。你能幫忙嗎?

我試圖用ImageJ API再次編寫代碼。兩個樣品我運行顯示如下:

ImagePlus imp = new ImagePlus(); 
    imp = IJ.openImage("path_to_image"); 
    int measurements = Measurements.AREA + Measurements.MEAN +Measurements.STD_DEV + Measurements.AREA_FRACTION; 
    ResultsTable rt = new ResultsTable(); 
    Analyzer analyzer = new Analyzer(imp, measurements, rt); 
    IJ.setAutoThreshold(imp, "Default"); 
    System.out.println(rt.MIN); 

並與記錄的代碼

imp = IJ.openImage("path_to_image"); 
    IJ.run("Set Measurements...", "area mean standard modal min median area_fraction limit redirect=None decimal=3"); 
    IJ.setAutoThreshold(imp, "Default"); 
    IJ.run(imp, "Measure", ""); 

回答

2

你的代碼中有幾個問題:

您錄製的代碼似乎是JavaScript中,沒有ImageJ的宏代碼,所以這裏有你的腳本的某些版本中,所有參加斑點樣本圖像(文件>打開樣品>斑點(25K) ),設置默認閾值並測量相同的參數。

ImageJ1宏:

run("Blobs (25K)"); 
setAutoThreshold("Default"); 
run("Set Measurements...", "area mean standard modal min median area_fraction limit redirect=None decimal=3"); 
run("Measure"); 

的Javascript:

importClass(Packages.ij.IJ); 

imp = IJ.openImage("http://imagej.nih.gov/ij/images/blobs.gif"); 
IJ.setAutoThreshold(imp, "Default"); 
IJ.run("Set Measurements...", "area mean standard modal min median area_fraction limit redirect=None decimal=3"); 
IJ.run(imp, "Measure", ""); 
imp.show(); 

的BeanShell(最接近的Java代碼):

import ij.IJ; 

imp = IJ.openImage("http://imagej.nih.gov/ij/images/blobs.gif"); 
IJ.setAutoThreshold(imp, "Default"); 
IJ.run("Set Measurements...", "area mean standard modal min median area_fraction limit redirect=None decimal=3"); 
IJ.run(imp, "Measure", ""); 
imp.show(); 

如果你想避免IJ和使用電話較低級別的ImageJ API,這是它在Beanshell中的外觀:

import ij.ImagePlus; 
import ij.IJ; 
import ij.measure.Measurements; 
import ij.measure.ResultsTable; 
import ij.plugin.filter.Analyzer; 

ImagePlus imp = IJ.openImage("http://imagej.nih.gov/ij/images/blobs.gif"); 
// IJ.setAutoThreshold(imp, "Default"); 
imp.getProcessor().setAutoThreshold("Default"); 

// IJ.run("Set Measurements...", "area mean standard modal min median area_fraction limit redirect=None decimal=3"); 
int measurements = Measurements.AREA + Measurements.MEAN + Measurements.MIN_MAX + Measurements.STD_DEV + Measurements.MODE + Measurements.MEDIAN + Measurements.AREA_FRACTION + Measurements.LIMIT; 

// IJ.run(imp, "Measure", ""); 
ResultsTable rt = new ResultsTable(); 
Analyzer analyzer = new Analyzer(imp, measurements, rt); 
analyzer.measure(); 

Double result = rt.getValue("Min", rt.getCounter() - 1); // get value of interest 
IJ.log(result.toString()); // print to log window 
// Alternatively, show the full results table 
// rt.show("New Results"); 
+0

謝謝你的直接回答。你對我的代碼完全正確。我是ImageJ中的新人。我試圖找到這種API的教程,但我找不到任何東西。你知道任何與使用ImageJ Api相關的書籍或網站,除了官方網站嗎? – raistlin

+0

@raistlin這個[Werner Bailer的教程](http://rsb.info.nih.gov/ij/docs/pdfs/tutorial12.pdf)可能是有用的;提問的最佳地點通常是[ImageJ郵件列表](http://imagej.nih.gov/ij/list.html);您可以在斐濟wiki上找到關於[plugins](http://fiji.sc/Introduction_into_Developing_Plugins)和[腳本](http://fiji.sc/Category:Scripting)的更多資源。由於它是一個wiki,隨時可以添加對其他可能與您現在處於相同情況的人有用的信息。 –