2013-03-19 6 views
0

Я очень новичок в javascript, и я хотел бы обработать некоторые изображения на Фиджи. Я некоторое время использую макроязык, но я пытаюсь ознакомиться с формальным API ImageJ/Fiji. Я пытаюсь запустить упрощенную часть кода, она работает без ошибок, но в конце не отображается изображение. Что случилось?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

ответ

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 класса. Чтобы сделать вашу жизнь легкой, вы также можете записать команду javascript в графическом интерфейсе через Плагины> Макросы> Запись ..., а затем выберите Запись: Javascript перед выполнением размытия Gaussian через Процесс> Фильтры> 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(); 

Общей помощи при Javascript сценариев в ImageJ см thesetwo ссылки на вики Фиджи.

Edit: Начиная с 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

Спасибо, Ян! Ваш ответ был очень полезен и просвещал! Я знал о «легком» способе сделать это, но в будущем мне нужно будет вычислить пользовательские материалы, которые недоступны в меню и, следовательно, на записываемых. – whitediver

+0

Я только что отредактировал свой ответ на счет недавнего добавления 'ImageProcessor.blurGaussian (double)' в ImageJ v1.47n –

Смежные вопросы