ما هي أفضل طريقة لمعالجة صورة في Clojure؟
-
26-09-2019 - |
سؤال
كجزء من محاكاة بيثون ، أخذت صفيفًا ثنائي الأبعاد وأخذ التدرج في هذه الصفيف. يتم ذلك في Scipy/Numpy عن طريق ربط الصفيف ثنائي الأبعاد مع مرشح مع الأوزان المناسبة.
لذا فإن سؤالي هو ما إذا كنت أرغب في القيام بذلك في Clojure بسرعة معقولة ، فهل من المنطقي القيام بذلك في Clojure الخالص ، أم أنه من الأفضل استخدام مكتبة معالجة صور Java والاتصال بها من Clojure؟
المحلول
ستحصل حلقة محسّنة جيدًا في Clojure على أداء بالقرب من كود Java.
سوف أنصح باستخدام المتجهات البدائية أو المصفوفات مباشرة من Clojure للحصول على أداء جيد للغاية.
لقد قرأت مدونة حول هذا الموضوع:http://www.bestinclass.dk/index.clj/2010/03/functional-fluid-dynamics-in-clojure.html
العملية الجيدة هي أن تبدأ بالرمز الواضح ويعمل و tweek في perfomance بعد ذلك.
في كثير من الأحيان ، يدور الأداء في clojure حول التخلص من التفكير واستخدام البدائية. هذا موضح هنا:http://clojure.org/java_interop
نصائح أخرى
يمكنك استخدام مكتبات معالجة صور Java من Clojure. هذا شيء للبدء.
(defn getPixels [^BufferedImage image] (-> image .getRaster .getDataBuffer .getData))
لا أعرف ما إذا كان هذا سيجمع (بعض المساعدة أنا) لقد ترجمته للتو من بعض رمز Scala الخاص بي في رأسي.