2013-03-19 6 views
0

Je débute très récemment en javascript et j'aimerais traiter certaines images aux Fidji. J'utilise le langage macro depuis un moment, mais j'essaie de me familiariser avec l'API formelle ImageJ/Fiji. J'essaie d'exécuter le morceau de code simpliste suivant, il fonctionne sans erreurs mais il ne montre aucune image à la fin. Qu'est-ce qui ne va pas?ImageJ: .show() n'affiche pas d'image

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

Merci à l'avance

+0

Est-ce lié à http://fiji.sc/Javascript_Scripting#Creating_a_script_for_ImageJ – mplungjan

Répondre

1

Le problème est la manière dont vous traitez avec le ImagePlus: dans la dernière ligne, vous essayez de créer un new ImagePlus, mais il n'y a aucune chance que celui-ci contient toutes les informations de votre image chargée. Traite un ImageProcessor que vous obtiendrez via la méthode ImagePlus#getProcessor(). Si vous regardez le API documentation, vous verrez également que blur(ImageProcessor,double) est déprécié en faveur de l'une des autres méthodes: vous pouvez utiliser blurGaussian(ImageProcessor, double, double, double) ici.

Ce code fonctionnerait:

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

mais il utilise la voie à faible niveau d'interférer avec la classe GaussianBlur. Pour faciliter votre vie, vous pouvez également enregistrer la commande javascript dans l'interface graphique via Plugins> Macros> Enregistrer ... puis en sélectionnant Enregistrement: Javascript avant d'effectuer le flou gaussien via Traiter> Filtres> Flou gaussien ... Cela rendrait votre code beaucoup plus court:

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

aide générale avec les scripts Javascript dans ImageJ, voir thesetwo liens vers le wiki Fidji.

Modifier: A partir de ImageJ 1.47n5, ImageProcessor a une nouvelle méthode blurGaussian(double sigma), raccourcir le code ci-dessus (niveau bas) à:

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

Merci Jan! Votre réponse a été très utile et éclairante! J'étais conscient de la façon "facile" de le faire, mais à l'avenir, je devrais calculer des trucs personnalisés qui ne sont pas disponibles via les menus et donc sur enregistrables. – whitediver

+0

Je viens d'éditer ma réponse pour tenir compte de l'ajout récent de 'ImageProcessor.blurGaussian (double)' dans ImageJ v1.47n –