2010-09-02 138 views
7

作为python模拟的一部分,我使用了一个2d数组并采用这个数组的渐变。这是在scipy/numpy中通过将2d数组与一个具有适当权重的过滤器进行卷积来完成的。在clojure中处理图像的最佳方式是什么?

所以我的问题是,如果我想在clojure中做到这一点,在纯clojure中做到这一点是否合理?还是使用Java图像处理库并从clojure调用它更好?

回答

5

Clojure中的一个很好的优化环路将有性能接近Java代码。

我会建议使用clojure 的原始矢量或直接数组来获得非常好的性能。

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

好的过程是先从代码很清晰,工作和tweek在性能比较之后。

通常情况下,Clojure的表现通常围绕着摆脱反射和使用基元来实现。 这是这里解释: http://clojure.org/java_interop

1

您可以使用Clojure的Java图像处理库。这里有一些开始。

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

我不知道这是否会编译(一些帮助我)我只是把它翻译从我的在我的脑海一些Scala代码。

http://clojure.org/java_interop

+0

谢谢,但我真的更了解使用Java库与编写纯Clojure的性能差异。 – 2daaa 2010-09-02 23:38:46

1

如果你真的想获得最佳性能,你可能会需要做你的计算在本机代码(其中,因为我的理解,是NumPy的做什么)。我们在以前的项目中使用了JAI,它运行良好,但我们并没有将它用于任何先进的任何事情。它似乎支持kernelsconvolutions,所以它可能适用于您的目的。不过,我不认为它和NumPy一样灵活。

相关问题