Как я могу выполнять пакетную обработку изображений с помощью ImageJ в Java или clojure?

Я хочу использовать ImageJ для обработки нескольких тысяч изображений.

Есть ли способ взять любой общий плагин imageJ и автоматически применить его к сотням изображений?

Например, предположим, что я хочу взять тысячу изображений и применить к каждому полярное преобразование ---

Плагин полярного преобразования для ImageJ можно найти здесь:

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

Большой! Давайте использовать его. От:

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

Я обнаружил, что могу применить плагин, используя следующее:

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

Это хорошо, потому что подавляет диалоговое окно, которое в противном случае появлялось бы для каждого изображения. Но запуск этого всегда вызывает окно, содержащее преобразованное изображение, когда я хочу просто вернуть преобразованное изображение.

Самый глупый способ сделать то, что я хочу, - просто закрыть всплывающее окно и вернуть изображение, которое оно отображало.

Делает то, что я хочу, но абсолютно отсталый:

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

Я, очевидно, что-то упускаю из виду, как использовать плагины imageJ в контексте программирования. Кто-нибудь знает, как это сделать правильно?

Спасибо, -- Роберт Макинтайр.


person Robert McIntyre    schedule 02.05.2010    source источник


Ответы (1)


К сожалению, очень часто плагины ImageJ пишутся без учета программного использования, и на самом деле нет элегантного способа обойти это без изменения кода плагина. (Вы уже обнаружили, что есть неудовлетворительные способы обойти это :)) Итак, на вашем месте я бы просто изменил код в Polar_Transformer.java следующим образом:

http://gist.github.com/452826

... что приблизительно соответствует рекомендациям, изложенным в Руководстве по проектированию подключаемых модулей Фиджи, при этом пытаясь внести минимальные изменения в исходный код. Затем вы можете просто создать объект PlugIn и вызвать для него exec(...), указав нужные параметры. (Я действительно не тестировал этот патч, но вы поняли идею.)

Я надеюсь, что это чем-то поможет - я вижу, что ваш вопрос был некоторое время назад, поэтому я думаю, вы, возможно, нашли какое-то другое обходное решение в то же время.

person Mark Longair    schedule 25.06.2010
comment
Это очень полезно и отличное объяснение. Я отложил этот проект в сторону и скоро вернусь к нему, поэтому ответ все еще актуален. Спасибо! - person Robert McIntyre; 26.06.2010