5.10. العمليات على مستوى البتات¶
تعمل العمليات الحسابية في الصفحة السابقة على قيم البكسل -- السطوعات الصحيحة أو كلمات اللون المحزومة. أما العمليات على مستوى البتات فتعمل على مستوى أدنى، على البتات الفردية داخل تلك القيم. وبالنسبة للصور الثنائية، حيث يكون كل بكسل بتاً واحداً فقط، تكون العمليات على مستوى البتات هي الحساب الطبيعي.
5.10.1. عائلة العمليات على مستوى البتات¶
يكشف الصنف Image المجموعة الكاملة من العمليات الثنائية المدخل على مستوى البتات:
b_and()-- AND على مستوى البتات.b_or()-- OR على مستوى البتات.b_xor()-- OR الحصري على مستوى البتات.b_nand()-- NOT-AND.b_nor()-- NOT-OR.b_xnor()-- NOT-XOR.
تعمل كل منها بتاً ببت على كل بايت من مخزنَي الصورتين. على صورة ثنائية، حيث يحمل كل بايت ثمانية بكسلات، تعمل العملية على ثمانية بكسلات لكل بايت معالَج. وعلى صورة بتدرج الرمادي أو ملوّنة تعمل على كل بت من كل قناة.
في الأعلى: جداول صدق AND و OR و XOR -- دلالات كل عملية على مستوى البت. في الأسفل: صورتان ثنائيتان A و B ونتيجة A.b_and(B)، حيث تُبقي النتيجة فقط المواضع التي كانت مشغّلة في كلا المدخلين.¶
5.10.2. دمج الأقنعة¶
الاستخدام الأكثر شيوعاً على الإطلاق لهذه العمليات هو دمج الأقنعة. القناع صورة ثنائية تقول، موضعاً تلو الآخر، ما إذا كان شرط ما متحققاً. ويُدمج قناعان يصفان شرطين مختلفين في قناع واحد يصف شرطاً مركّباً عبر إحدى العمليات على مستوى البتات:
b_and() تنتج قناعاً تكون مواضعه مشغّلة فقط عندما يكون كلا القناعين المدخلين مشغّلاً عند ذلك الموضع -- "و" الطبيعية لشرطين. دمج قناع مقدّمة مع ناتج مرور عتبة عبر b_and يقيّد مطابقات العتبة بالمقدّمة.
b_or() تنتج قناعاً تكون مواضعه مشغّلة كلما كان أيٌّ من القناعين المدخلين مشغّلاً -- "أو" الطبيعية. تطبيق OR على ناتجي عتبة معاً ينتج قناعاً واحداً يغطي أي شيء طابق أياً من نطاقَي لون.
b_xor() تنتج قناعاً تكون مواضعه مشغّلة كلما كان قناع مدخل واحد بالضبط مشغّلاً. وهي مفيدة لكشف المواضع التي يختلف فيها قناعان -- المواضع التي تغيّر فيها ناتج العتبة بين إطارين، أو الفرق المتماثل بين قناعين مرجعيين، ذلك النوع من الأمور.
تنتج المتغيرات المنفية -- b_nand() و b_nor() و b_xnor() -- مكمّل نظيراتها غير المنفية. وهي مفيدة عندما تكون الطريقة الطبيعية لوصف شرط هي "لا هذا ولا ذاك" أو "ليس كلاهما" -- غير شائعة، لكن من المفيد معرفة وجودها بحيث لا يلزم تأليف النفي بإتباع AND بـ invert() منفصلة.
5.10.3. العمليات على مستوى البتات على الصور غير الثنائية¶
تعمل العمليات على مستوى البتات أيضاً على الصور بتدرج الرمادي والملوّنة. وهي أكثر فائدة هناك عندما تحمل الصورة محتوى شبيهاً بالثنائي -- إطار بتدرج الرمادي بكسلاته كلها 0 أو 255، أو إطار RGB565 ببكسلات سوداء بالكامل وبيضاء بالكامل فقط -- حيث تعطي AND و OR و XOR التركيبات نفسها التي كانت ستعطيها على صورة ثنائية حقيقية. أما للصور التي تمتد عبر النطاق الكامل من القيم، فإن العمليات الحسابية في الصفحة السابقة عادةً ما تكون أنسب.