在clojure中处理图像的最佳方法是什么?

时间:2010-09-02 17:57:05

标签: clojure scientific-computing

作为python模拟的一部分,我有一个二维数组并采用这个数组的渐变。这是通过将2d数组与具有适当权重的滤波器卷积而在scipy / numpy中完成的。

所以我的问题是,如果我想在clojure中快速地做到这一点,那么在纯粹的clojure中这样做是否有意义,或者使用Java图像处理库并从clojure调用它更好?

3 个答案:

答案 0 :(得分:5)

Clojure中经过优化的循环将具有接近Java代码的性能。

我建议使用原始向量或直接使用clojure中的数组 获得非常好的表现。

我读过一篇关于这个主题的博文: http://www.bestinclass.dk/index.clj/2010/03/functional-fluid-dynamics-in-clojure.html

良好的过程是从清晰的代码开始,然后工作和调整以获得性能。

通常,Clojure中的表现围绕着摆脱反射和使用原语。 这在这里解释: http://clojure.org/java_interop

答案 1 :(得分:1)

您可以使用Clojure中的Java图像处理库。这是开始的事情。

(defn getPixels [^BufferedImage image] (-> image .getRaster .getDataBuffer .getData))

我不知道这是否会编译(我有些帮助)我只是从我脑子里的一些Scala代码中翻译出来。

http://clojure.org/java_interop

答案 2 :(得分:1)

如果你真的想要最佳性能,你可能需要在本机代码中进行计算(据我所知,这是NumPy所做的)。我们在之前的项目中使用了JAI,它运行良好,但我们并没有将它用于任何高级版本。它似乎支持kernelsconvolutions,因此它可能适用于您的目的。但是,我不认为它像NumPy一样灵活。