مكتبة معالجة الصور Ruby-vips.هل هناك أي أمثلة جيدة للاستخدام؟
-
13-12-2019 - |
سؤال
أنا جديد تمامًا في معالجة الصور.لا أعرف شيئًا عن ماهية JPEG داخليًا وكيف يعمل.
أتساءل عما إذا كان بإمكاني العثور على جزء من كود روبي في مكان ما يؤدي العملية البسيطة التالية:
- افتح ملف JPEG.
- قم بالتكرار عبر كل بكسل واضبط لونه على اللون الأخضر.
- كتابة النتيجة إلى ملف آخر.
أنا مهتم بشكل خاص بكيفية تحقيق ذلك باستخدام مكتبة Ruby-vips
https://github.com/ender672/Ruby-vips
هدفي هو معرفة كيفية إجراء عمليات معالجة الصور الأساسية باستخدام Ruby-vips (تصحيح جاما، السطوع، الصبغة، ...)
أي روابط لأمثلة عمل أكثر تعقيدًا من "hello World" - مثل تلك الموجودة على صفحة github الخاصة بـ Ruby-vips ستكون موضع تقدير كبير!
إذا كانت هناك بدائل لـ Ruby-vips، سأكون ممتنًا لها أيضًا.
تحديث
لقد حدث الكثير منذ أن طرحت هذا السؤال:
- Ruby-vips جوهرة: http://libvips.blogspot.co.uk/2012/06/ruby-vips-launches.html
- إعادة كتابة كاملة لـ vips8، والتي تعتمد الآن على Ruby-ffi
- مستودع كود المصدر هنا: https://github.com/jcupitt/Ruby-vips/
- أمثلة الاستخدام: https://github.com/jcupitt/ruby-vips/wiki/Examples
- المفاهيم الأساسية لمعالجة صور كبار الشخصيات: https://github.com/jcupitt/Ruby-vips/wiki/Basic-concepts
- تكامل Ruby-vips في البرنامج الإضافي للتحميل CarrierWave لـ Ruby on Rails: https://github.com/eltiare/carrierwave-vips
- Ruby-vips هي إحدى الواجهات الخلفية الرسمية لـ ActiveStorage في Rails6
المحلول
تحديث لقد تغيرت Ruby-vips قليلاً منذ كتابة هذه الإجابة.لقد قمت بمراجعته للإصدار الحالي (2018).
أنا أحد المشرفين على libvips، مكتبة معالجة الصور التي يغلفها روبي vips.
لم يتم التطرق إلى مستودع Tim الخاص بـ Ruby-vips منذ فترة.لدي شوكة هنا تعمل مع libvips الحالي:
https://github.com/jcupitt/Ruby-vips
هناك بعض الأمثلة هنا:
https://github.com/jcupitt/ruby-vips/tree/master/example
لتعيين القنوات الحمراء والأزرق على الصفر وترك صورة خضراء قد تتكاثر R و B بواسطة صفر و G بمقدار 1.يستخدم Ruby-vips المصفوفات لتمثيل ثوابت البكسل، لذا يمكنك فقط كتابة:
out = in * [0, 1, 0]
قد يكون المثال الكامل القابل للتشغيل هو:
#!/usr/bin/ruby
require 'vips'
im = Vips::Image.new_from_file '/home/john/pics/theo.jpg'
im *= [0, 1, 0]
im.write_to_file 'x.jpg'
هناك خدعة يمكنك استخدامها new_from_file
:إذا كنت تعلم أنك ستقوم فقط بإجراء عمليات بسيطة من أعلى إلى أسفل على الصورة، مثل العمليات الحسابية أو التصفية أو تغيير الحجم، فيمكنك إخبار Ruby-vips أنك تحتاج فقط إلى الوصول المتسلسل إلى وحدات البكسل:
im = Vips::Image.new_from_file '/home/john/pics/theo.jpg', access: :sequential
الآن سوف يقوم Ruby-vips ببث صورتك.سيتم تشغيل التحميل والضرب والحفظ بالتوازي ولن يحتفظ أبدًا بأكثر من عدد قليل من خطوط المسح الضوئي للبكسل في الذاكرة في أي وقت.يمكن أن يوفر هذا تحسنًا رائعًا حقًا في السرعة واستخدام الذاكرة.
لتغيير جاما الصورة، يمكنك تجربة شيء مثل:
im = im ** 0.5 * 255 / 255 ** 0.5
على الرغم من أن ذلك سيكون بطيئًا بعض الشيء (سيتم استدعاء pow() ثلاث مرات لكل بكسل)، إلا أنه سيكون من الأسرع بكثير إنشاء جدول بحث، وتشغيل pow() عليه، ثم تعيين الصورة من خلال الجدول. :
lut = Vips::Image.identity
lut = lut ** 0.5 * 255 /255 ** 0.5
im = im.maplut lut
إذا كانت لديك أي أسئلة، فلا تتردد في فتحها على أداة تعقب مشكلات Rubyvips:
نصائح أخرى
أنا آسف، لا أعرف روبي VIPS، ولكن imageemagick هو كلاسيكي عندما يتعلق الأمر بمعالجة الصور. هناك ارتباطات روبي في شكل Rmagick ( repo الحالي )، ويمكنك أن تستمد الكثير من الوظائف من مستندات ImageMagick، ولكن هناك أيضا ثلاثة دروس هنا ، وكذلك الكثير من الأمثلة على الويب.
إذا كنت ترغب حقا في الذهاب في نظرية معالجة الصور، والتي في جذورها هي شكل من أشكال معالجة الإشارات (هذا مثير للغاية ومكافأة لأنها غالبا ما تسمح لك بتطبيق خوارزميات مماثلة للغاية على الصور و إشارات الصوت / الفيديو، لكنه سيحصل في نهاية المطاف في نهاية المطاف على تحويلات الرياضيات - فورييه)، ثم، إذا لم تخيفك الرياضيات، يمكنني فقط أن أوصي فقط بقراءة كتاب بقلم جونزاليس وودز، أود أن أقول إنها مرجع واضح في هذا المجال. انها باهظة الثمن، ولكن هناك كل ما تحتاج إليه هناك لبدء وبعد ذلك. هنا أيضا صفحة مع روابط إلى كتب إلكترونية مجانية إذا كنت ترغب في البدء دون إنفاق الكثير من المال أولا.