Как я могу сделать пакетную обработку изображений с ImageJ на Java или clojure? - PullRequest
3 голосов
/ 02 мая 2010

Я хочу использовать 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 в контексте программирования. Кто-нибудь знает правильный способ сделать это?

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

1 Ответ

4 голосов
/ 25 июня 2010

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

http://gist.github.com/452826

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

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

...