【问题标题】:ImageJ: .show() does not show an imageImageJ:.show() 不显示图像
【发布时间】:2013-03-19 10:58:57
【问题描述】:

我对 javascript 非常陌生,我想在斐济处理一些图像。我使用宏语言已经有一段时间了,但我正在尝试熟悉正式的 ImageJ/Fiji API。我正在尝试运行以下简单的代码,它运行没有错误,但最终没有显示任何图像。怎么了?

importClass(Packages.ij.plugin.filter.GaussianBlur);


var image = IJ.openImage("/home/.../KNIIC_BC_Cam2_AirBubble2_Image1038.bmp");
IJ.run(image, "8-bit", "");

var dpl = image.getProcessor().duplicate();
var gs = new GaussianBlur();
gs.blur(dpl,20);
new ImagePlus(gs).show();

提前致谢

【问题讨论】:

标签: javascript imagej


【解决方案1】:

问题在于您如何处理ImagePlus:在最后一行中,您尝试创建一个new ImagePlus,但其中不可能包含您加载的图像的任何信息。

GaussianBlur 处理您将通过ImagePlus#getProcessor() 方法获得的ImageProcessor。如果您查看API documentation,您还会看到blur(ImageProcessor,double) 已被弃用,取而代之的是其他方法之一:您可能想在此处使用blurGaussian(ImageProcessor, double, double, double)

这段代码可以工作:

importClass(Packages.ij.plugin.filter.GaussianBlur);

var imp = IJ.openImage("http://imagej.nih.gov/ij/images/clown.jpg");
IJ.run(imp, "8-bit", "");

var ip = imp.getProcessor();
var gs = new GaussianBlur();
gs.blurGaussian(ip,20,20,0.01);
imp.show();

但是它使用低级方式干扰GaussianBlur 类。为了让您的生活更轻松,您还可以通过 Plugins > Macros > Record... 在 GUI 中记录 javascript 命令,然后在执行高斯模糊之前选择 Record: Javascript通过 Process > Filters > Gaussian Blur...。这将使您的代码更短:

var imp = IJ.openImage("http://imagej.nih.gov/ij/images/clown.jpg");
IJ.run(imp, "8-bit", "");
IJ.run(imp, "Gaussian Blur...", "sigma=20");

imp.show();

有关 ImageJ 中 Javascript 脚本的一般帮助,请参阅 these two 指向斐济 wiki 的链接。

编辑:从ImageJ 1.47n5开始,ImageProcessor有一个新方法blurGaussian(double sigma),将上面的(低级)代码缩短为:

var imp = IJ.openImage("http://imagej.nih.gov/ij/images/clown.jpg");
IJ.run(imp, "8-bit", "");
imp.getProcessor().blurGaussian(20);
imp.show();

【讨论】:

  • 谢谢一月!您的回复非常有帮助和启发!我知道这样做的“简单”方法,但将来我需要计算无法通​​过菜单获得的自定义内容,因此可以记录。
  • 我刚刚编辑了我的答案,以说明最近在 ImageJ v1.47n 中添加了 ImageProcessor.blurGaussian(double)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-07
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多