2010-09-02 127 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一樣靈活。

相關問題