java - 如何在 Java 或 clojure 中使用 ImageJ 进行批量图像处理?

标签 java image-processing clojure image-manipulation imagej

我想使用 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 插件的内容。 有谁知道这样做的正确方法吗?

谢谢, --罗伯特·麦金太尔

最佳答案

不幸的是,编写 ImageJ 插件时没有考虑到编程用途是很常见的,并且在不更改插件代码的情况下并没有真正优雅的解决方法。 (您已经发现有一些令人不满意的解决方法:))因此,在您的位置上,我将按以下方式更改 Polar_Transformer.java 中的代码:

http://gist.github.com/452826

... 这与 Fiji PlugIn Design Guidelines 中建议的内容含糊不清。 ,同时仍然尝试对原始代码进行最小的更改。然后您可以创建插件对象并调用 exec(...) 提供您想要的选项。 (我还没有真正测试过那个补丁,但你明白了。)

我希望这对您有所帮助 - 不过我看到您的问题是很久以前的问题了,所以我想您可能同时找到了一些其他解决方法。

关于java - 如何在 Java 或 clojure 中使用 ImageJ 进行批量图像处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2752174/

相关文章:

java - 使用 Apache POI 读取 Excel、XML MAP 元素名称

java - Spock spring模块在运行测试时导致NoSuchMethodError

opencv - 如何在opencv中根据深度颜色分割连通区域

clojure - 为什么非全局范围内的 ns 别名(let,def)不起作用?

functional-programming - Clojure 的惰性如何与对 Java/不纯代码的调用相互作用?

error-handling - Clojure - 引用一个 defrecord 函数

java - 修改匿名内部类中的外部变量

java - Collections.sort 有什么问题?

image-processing - 使用决策树

c++ - 为什么DLIB要计算LBP统一描述符的平方根?