在 ImageJ Javascript 宏中合并 RGB 通道
Merge RGB channels in ImageJ Javascript macro
我正在从三通道 .svs 图像中读取裁剪区域并将裁剪图像保存为 .tiff 图像。目前,图像使用单独的 RGB 通道保存。
我这样裁剪图片:
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);
我最终得到了三个通道图像。
我想合并频道。
我发现了两种可行的方法:
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
class:
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
static ImagePlus[] openImagePlus(ImporterOptions options)
BF.openImagePlus()
returns ImagePlus
个对象的 数组 (在 getClass()
输出中用 [L
表示).
您应该通过访问返回数组的第一个元素来访问您的图像:croppedImage[0]
那么您建议的两种方法都应该有效:
finalImage = croppedImage[0].flatten();
或
finalImage = RGBStackMerge.mergeChannels(croppedImage[0], false);
您可以在 ImageJ wiki 的 Scripting toolbox 页面上找到 如何使用 Bio-Formats 打开图像的示例。
我正在从三通道 .svs 图像中读取裁剪区域并将裁剪图像保存为 .tiff 图像。目前,图像使用单独的 RGB 通道保存。
我这样裁剪图片:
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);
我最终得到了三个通道图像。
我想合并频道。
我发现了两种可行的方法:
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
class:
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
static ImagePlus[] openImagePlus(ImporterOptions options)
BF.openImagePlus()
returns ImagePlus
个对象的 数组 (在 getClass()
输出中用 [L
表示).
您应该通过访问返回数组的第一个元素来访问您的图像:croppedImage[0]
那么您建议的两种方法都应该有效:
finalImage = croppedImage[0].flatten();
或
finalImage = RGBStackMerge.mergeChannels(croppedImage[0], false);
您可以在 ImageJ wiki 的 Scripting toolbox 页面上找到 如何使用 Bio-Formats 打开图像的示例。