2016-01-23 59 views
0

我從三個通道的.svs圖像中裁剪區域讀取並將作物保存爲.tiff圖像。目前,圖像正在使用單獨的RGB通道進行保存。在ImageJ中合併RGB通道Javascript宏

我裁剪圖像是這樣的:

var path = currentFolder + "images" + File.separator + imageName; 
var options = new ImporterOptions(); 
options.setId(path); 
options.setAutoscale(true); 
options.setCrop(true); 
options.setCropRegion(0, new Region(X, Y, deltaX, deltaY)); 
options.setColorMode(ImporterOptions.COLOR_MODE_COMPOSITE); 
var croppedImage= new ImagePlus(); 
croppedImage= BF.openImagePlus(options); 

print("cropped image class: " + croppedImage.getClass()); 

cropped image class: class [Lij.ImagePlus; 

然後我保存的圖像:

IJ.saveAs(cropedImage, "tif", outputFileName); 

我結束了三倍通道的圖像。

enter image description here

我要合併的通道。

我發現了兩個潛在的方法來做到這一點:

http://javadoc.imagej.net/ImageJ1/ij/plugin/RGBStackMerge.html

http://rsb.info.nih.gov/ij/developer/api/ij/ImagePlus.html#flatten--

我試圖croppedImage.flatten(),並得到:

javax.script.ScriptException: sun.org.mozilla.javascript.internal.EvaluatorException: Java class "[Lij.ImagePlus;" has no public instance field or method named "flatten". 

我也嘗試導入RGBStackMerge類:

importClass(Packages.ij.plugin.RGBStackMerge); 

,做

finalImage = new ImagePlus(); 
finalImage = RGBStackMerge.mergeChannels(croppedImage, false); 
print ("final image class: " + finalImage.getClass() + " length: " + finalImage.length); 

但是這給:

Started svs_to_cropped_tiffs.js at Fri Jan 22 22:58:10 PST 2016 javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: TypeError: Cannot call method "getClass" of null 

回答

2

BF class javadoc

static ImagePlus[] openImagePlus(ImporterOptions options)

BF.openImagePlus()返回數組ImagePlus對象(在getClass()輸出中由[L表示)。 croppedImage[0]

您的兩個建議的方法應該工作,那麼:

finalImage = croppedImage[0].flatten(); 

finalImage = RGBStackMerge.mergeChannels(croppedImage[0], false); 

您可以 你應該通過訪問返回數組的第一個元素來訪問你的形象找到示例如何在第Scripting toolbox頁上使用生物格式打開圖像e ImageJ wiki。

+0

第一種方法確實奏效!我試過第二個,得到了'javax.script.ScriptException:sun.org.mozilla.javascript.internal.EvaluatorException:找不到方法ij.plugin.RGBStackMerge。mergeChannels(loci.plugins.in.Colorizer $ 1,boolean)。'我接受你的答案,但如果你知道'mergeChannels'可能會出錯,我很想知道。 – abalter