0

我对 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();

提前致谢

4

1 回答 1

1

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

GaussianBlur处理ImageProcessor您将通过该ImagePlus#getProcessor()方法获得的。如果您查看API 文档,您还会看到它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 脚本的一般帮助,请参阅 两个指向 Fiji 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();
于 2013-03-19T12:37:38.560 回答