2013-03-19 88 views
0

我非常新的JavaScript,我想在斐济处理一些图像。我一直在使用宏语言,但我正在尝试熟悉正式的ImageJ/Fiji API。我试图运行以下简单的代码,它运行时没有错误,但最终没有显示任何图像。出了什么问题?ImageJ:.show()不显示图像

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

在此先感谢

+0

这是关系到http://fiji.sc/Javascript_Scripting#Creating_a_script_for_ImageJ – mplungjan 2013-03-19 11:02:31

回答

1

问题是你如何应对ImagePlus的方式:在最后一行,您尝试创建一个new ImagePlus,但没有机会,这个包含的任何信息,请加载的图像。

GaussianBlur处理ImageProcessor,您将通过ImagePlus#getProcessor()方法获得。如果您查看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类干扰水平低的方式。为了让您的生活更轻松,您还可以在GUI中通过插件>宏>记录...然后选择记录:JavaScript通过执行高斯模糊之前进程>滤镜>高斯模糊。 。。这将使你的代码更短:

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脚本一般帮助,请参阅thesetwo链接到斐济维基。

编辑:从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(); 
+0

谢谢Jan!你的回复非常有帮助和启发!我意识到“简单”的做法,但将来我需要计算自定义内容,这些内容在菜单中不可用,因此也是可录制的。 – whitediver 2013-03-19 14:20:04

+0

我刚刚编辑了我的答案,以解释最近在ImageJ v1.47n中添加了'ImageProcessor.blurGaussian(double)' – 2013-03-22 14:08:39