2010-05-02 10 views
3

Je veux utiliser ImageJ pour traiter quelques milliers d'images.Comment faire un traitement d'image par lots avec ImageJ en Java ou clojure?

Existe-t-il un moyen de prendre n'importe quel plugin imageJ et de l'appliquer automatiquement à des centaines d'images?

Par exemple, que je veux prendre mes images mille et appliquer une transformation polaire à chaque ---

se trouve un plug-in de transformation polaire pour ImageJ ici:

http://rsbweb.nih.gov/ij/plugins/polar-transformer.html

Grande ! Utilisons-le. De:

http://albert.rierol.net/imagej_programming_tutorials.html#How%20to%20automate%20an%20ImageJ%20dialog

Je trouve que je peux appliquer un plug-in en utilisant les éléments suivants:

(defn x-polar 
    [imageP] 
    (let [thread (Thread/currentThread) 
     options ""] 
    (.setName thread "Run$_polar-transform") 
    (Macro/setOptions thread options) 
    (IJ/runPlugIn imageP "Polar_Transformer" ""))) 

Ce qui est bon, car il supprime la boîte de dialogue qui autrement apparaître pour chaque image. Mais lancer ceci fait toujours apparaître une fenêtre contenant l'image transformée, alors que ce que je veux c'est simplement retourner l'image transformée.

La façon la plus stupide de faire ce que je veux est de simplement fermer la fenêtre qui apparaît et de retourner l'image qu'elle affichait.

Est-ce que ce que je veux, mais est absolument retardé:

(defn x-polar 
    [imageP] 
    (let [thread (Thread/currentThread) 
     options ""] 
    (.setName thread "Run$_polar-transform") 
    (Macro/setOptions thread options) 
    (IJ/runPlugIn imageP "Polar_Transformer" "") 
    (let [return-image (IJ/getImage)] 
     (.hide return-image) 
     return-image))) 

Je manque évidemment quelque chose sur la façon d'utiliser des plugins imagej dans un contexte de programmation. Est-ce que quelqu'un sait la bonne façon de faire cela?

Merci, --Robert McIntyre

Répondre

4

Malheureusement, il est très fréquent que les plug-ins ImageJ à écrire sans utiliser de programmation à l'esprit, et il n'y a pas vraiment une façon élégante de se déplacer que sans changer le code du plug-in . (Vous avez déjà découvert qu'il existe des moyens peu satisfaisants autour d'elle :)) Donc, dans votre position que je voudrais juste changer le code Polar_Transformer.java de la manière suivante:

http://gist.github.com/452826

... qui est vaguement le long les lignes suggérées dans le Fiji PlugIn Design Guidelines, tout en essayant toujours de faire des changements minimes au code d'origine. Ensuite, vous pouvez simplement créer l'objet PlugIn et appeler le exec(...) en fournissant les options souhaitées. (Je n'ai pas vraiment testé ce patch, mais vous avez l'idée.)

J'espère que cela vous aidera - je vois que votre question était il y a quelque temps, donc je suppose que vous avez trouvé une autre solution de contournement pendant ce temps.

+0

C'est très utile et une excellente explication. J'ai mis ce projet de côté et j'y retournerai bientôt, donc la réponse est toujours pertinente. Merci! –