Как я могу выполнить обработку партии изображения с ImageJ в Java или Clojure?
-
02-10-2019 - |
Вопрос
Я хочу использовать ImageJ, чтобы сделать некоторую обработку нескольких тысяч изображений.
Есть ли способ взять какой -либо плагин с общим изображением и автоматически применить его к сотням изображений?
Например, скажем, я хочу взять свои тысячи изображений и применить полярное преобразование к каждому ---
Плагин полярного преобразования для ImageJ можно найти здесь:
http://rsbweb.nih.gov/ij/plugins/polar-transformer.html
Большой! Давайте воспользуемся. От:
Я обнаружил, что могу применить плагин, используя следующее:
(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 в контексте программирования. Кто -нибудь знает правильный способ сделать это?
Спасибо, -Robert McIntyre
Решение
К сожалению, очень часто записываются плагины ImageJ без учета программного использования, и на самом деле нет элегантного способа обойти это без изменения кода плагина. (Вы уже обнаружили, что есть неудовлетворительные способы обойти это :)) Так что, на вашей должности я бы просто изменил код в Polar_Transformer.java
следующим образом:
... что смутно вдоль линий, предложенных в Рекомендации по проектированию плагинов FIJI, все еще пытаясь просто внести минимальные изменения в исходном коде. Тогда вы можете просто создать объект плагина и вызвать exec(...)
На нем поставляя нужные варианты. (Я действительно не проверил этот патч, но вы поняли идею.)
Я надеюсь, что это поможет - я вижу, что ваш вопрос был некоторое время назад, так что, я думаю, вы, возможно, нашли какой -то другой обходной путь в то же время.