2013-03-19 89 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