سؤال

وأنا أعلم ذلك فلويد - ستينبرغ لا يمكن تنفيذ الخوارزمية باستخدام Pixel Shader ، لأن هذه الخوارزمية متتابعة تمامًا. ولكن ربما توجد بعض خوارزمية المخلصة المتوازية التي تشبه الخوارزمية المرئية التي تشبه خوارزمية Floyd-Steinberg؟

لذا فإن السؤال هو - ما هي الخوارزميات المخلصة المناسبة للتنفيذ على Pixel Shader (ويفضل GLSL) وجودة الإخراج (جدًا) مماثلة لمقدم Floyd -Steinberg؟

بالمناسبة. يُسمح بخوارزميات التمريرات المتعددة حتى لا يكون هناك أكثر من تمريرين و CPU النفقات العامة بين تلك التمريرات صغيرة.

أيه أفكار ؟

تعديل:
أحتاج إلى التخل من اللون 24 بت إلى لون 21 بت.
(هذا - أحتاج إلى التحويل من 8 بت/قناة إلى 7 بت/قناة.)

تحرير 2ربما لم أوضح المشكلة جيدًا. لذلك سأحاول التوسع قليلاً في مشكلة دقيقة. المشكلة هي هذه - فكر في أن لدينا هذه الصورة:
alt text
ولدينا الصورة أعلاه ، ولكن معالجتها مع الخوارزمية المخلصة:
alt text
الآن هذا الإجراء الذي سيختبر التخليص الخاص بك مفيد بالنسبة لي أم لا:
1. قم بتحميل هذه الصور في Photoshop كصورة واحدة مع طبقتين.
2. اختر وضع مزج الطبقات إلى "الفرق".
3. قم بإجراء عملية "دمج مرئية" على الطبقات ، للحصول على طبقة واحدة فقط.
4. إجراء عملية => الصورة/التعديلات/المساواة

بعد ذلك يجب أن تحصل على هذه الصورة:
alt text
كما ترى - البكسلات الوسطى التي كانت باللون الأحمر الرتابة لم يكن متشوقًا على الإطلاق. كما تختلف المخلل من مناطق الصورة اليسرى واليمنى قليلاً. حاول إعادة بناء الخوارزمية المخلصة مع هذا السلوك.

هل كانت مفيدة؟

المحلول

إذا كنت تقلل من 8 بت إلى 7 ، فأنت لا تتخلص من أي معلومات تقريبًا. هل أنت متأكد من أنك تحتاج حتى إلى التخلص؟

إذا كنت بحاجة إلى تصور ، فأضف ضوضاء عشوائية ثم مقطعًا ، فسيكون ذلك جيدًا لتطبيقك.

نصائح أخرى

يمكنك استخدام أمرت dith. إنه يبدو أكثر خشونة من Floyd-Steinberg ولكن لا يوجد اعتماد بين وحدات البكسل.

يحرر: نظرًا لأنك تزيل جزءًا واحدًا فقط ، يصبح هذا تافهة تقريبًا. المبدأ وراء Dither المطلوبة هو إنشاء نمط يحيز عتبة الانتقال ؛ في هذه الحالة ، سيكون التحيز 0 أو 1 وسيكون النمط 2 × 2 بكسل. سيجعل هذان التغييران معًا النمط أقل بغيضًا من تلك الموجودة في مقالة ويكيبيديا - قد تحبها أفضل من فلويد ستاينبرغ.

إليك بعض الرمز الزائف:

bias = (X xor Y) and 0x01
value = pixel + bias
if value > 255: value = 255
pixel = value and 0x7e

تحرير 2: هذه هي نتيجة الاختلاف ، بأفضل ما يمكنني فعله. دون معرفة كيفية قيامك بتخطيط القيم 7 بت إلى 8 بتات ، لا أستطيع القيام بعمل أفضل.

alt text

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top