5.19. التصحيحات اللونية

تغير التصحيحات اللونية كيفية توزيع السطوع واللون في صورة ملتقطة -- وهي المعالجات التي يطبقها التطبيق عندما يكون الإطار شديد الإعتام، أو شديد السطوع، أو مسطحاً للغاية، أو مائلاً نحو لون خاطئ.

تنتمي التصحيحات إلى عائلتين: تعديلات السطوع والتباين التي تعيد توزيع السطوع، وتعديلات اللون التي تغير اللون الذي يُقرأ به كل بكسل. وكلاهما له نظير في ISP الخاص بالمستشعر، الذي يصحح كل إطار أثناء دخوله؛ أما الطرق هنا فتُطبق على Image ملتقطة بالفعل، بعد وقوع الأمر، للحالات التي يحتاج فيها الإطار إلى تصحيح أكثر مما وفره ISP.

5.19.1. معادلة المدرج التكراري

أبسط عملية لتمديد التباين هي معادلة المدرج التكراري. والفكرة هي إعادة تعيين قيم البكسل بحيث يكون المدرج التكراري للخرج مسطحاً قدر الإمكان -- أي تظهر كل قيمة بتكرار متساوٍ تقريباً. والأثر البصري هو أن الصورة منخفضة التباين (التي يتركز مدرجها التكراري في نطاق ضيق) تصبح صورة عالية التباين تغطي بكسلاتها النطاق الكامل 0 -- 255.

تُجري histeq() عملية المعادلة:

img.histeq()

الآلية مباشرة. تُحسب دالة التوزيع التراكمي (CDF) لمدرج المصدر التكراري؛ ثم تُعيَّن كل قيمة بكسل دخل إلى موضعها في الـ CDF، مُحجَّمة إلى نطاق الخرج. وحيث كانت البكسلات منتشرة بالتساوي بالفعل، يكون التعيين قريباً من المطابقة؛ وحيث كانت البكسلات متراكمة عند سطوع واحد، يفرقها التعيين بتمديد ذلك السطوع عبر نطاق أوسع من قيم الخرج.

تكون النتيجة مذهلة في المشاهد منخفضة التباين -- إذ كثيراً ما يكون الفرق بين صورة داخلية معتمة والصورة نفسها بعد histeq هو الفرق بين "غير مقروءة" و"واضحة تماماً". والمقايضة هي أن العملية تُضخّم كل شيء، بما في ذلك ضوضاء المستشعر. ففي مشهد به تفاصيل حقيقية منخفضة التباين يمكن استعادتها، تكون histeq هي الجواب الصحيح؛ أما في مشهد نظيف جيد التعريض لا يحتاجها أصلاً، فإن histeq تُدخل ضوضاء مرئية.

5.19.2. CLAHE: المعادلة التكيفية

معادلة المدرج التكراري شاملة: تستخدم CDF واحدة محسوبة من الصورة بأكملها وتطبقها في كل مكان. وهذا يعمل على الصور التي يكون نطاق سطوعها منتظماً تقريباً، لكنه يفشل في المشاهد ذات المناطق المعتمة والساطعة الموضعية -- إذ تنجذب الـ CDF نحو الجانب الذي به بكسلات أكثر، فيُصحَّح الجانب المقابل بإفراط.

النسخة التكيفية هي معادلة المدرج التكراري التكيفية محدودة التباين، وتُعرف عادةً باسم CLAHE. فبدلاً من CDF شاملة واحدة، تحسب CLAHE CDF منفصلة لكل بلاطة صغيرة من الصورة، وتعادل كل بلاطة مقابل CDF الخاصة بها، ثم تمزج حدود البلاطات معاً. والنتيجة أن تعديلات السطوع تحدث موضعياً -- فتحصل الزاوية المظللة على معادلتها الخاصة دون أن تجذبها الزاوية الساطعة في الاتجاه الخاطئ.

تنقل الراية adaptive=True الطريقة histeq() إلى وضع CLAHE:

img.histeq(adaptive=True, clip_limit=10)

المعامل clip_limit هو الجزء من CLAHE الذي تشير إليه عبارة "محدودة التباين" في الاسم. فالمعادلة الموضعية يمكن أن تفرط في تضخيم الضوضاء في المناطق المسطحة حيث تحتوي الـ CDF على قيم متميزة قليلة جداً؛ ويحدّ هذا المعامل من مدى عدوانية إعادة توزيع أي حاوية واحدة، مما يمنع تضخيم الضوضاء مع السماح بتمديد التباين حيث يهم ذلك. وتُعد قيمة قرب 10 نقطة بداية معقولة؛ فالقيم الأكبر تجعل CLAHE تعمل بجهد أكبر على حساب ضوضاء أكثر وضوحاً، والقيم الأصغر تجعلها أكثر لطفاً.

تكون CLAHE أعلى تكلفة من histeq الشاملة، لكنها تنتج نتائج أنظف في المشاهد التي يتوزع فيها السطوع بشكل غير متساوٍ -- وهي معظم المشاهد الواقعية.

5.19.3. غاما والتباين والسطوع

معادلة المدرج التكراري هي الطريقة المعتمدة على البيانات لإعادة تعيين السطوع. أما الطريقة المستقلة عن البيانات فهي تطبيق منحنى مختار، يُضبط ببضعة مقابض سهلة المعايرة. وتوفر gamma() ثلاثة منها:

img.gamma(gamma=1.0, contrast=1.0, brightness=0.0)

يطبق كل معامل تحويلاً محدداً واحداً على كل بكسل:

تمرر gamma قيمة كل بكسل عبر دالة الأس output = input ** (1 / gamma). والمعنى القياسي: القيم الأكبر من 1.0 تُسطّع الصورة وترفع النغمات المتوسطة (تصحيح "غاما الشاشة" الكلاسيكي)؛ والقيم الأصغر من 1.0 تُعتمها. والمعامل غير خطي -- فهو يحافظ على نقطتي الأسود والأبيض ويعيد تشكيل التوزيع بينهما فقط، وهو السلوك الصحيح عندما يكون الهدف استعادة التفاصيل في مناطق الظل أو الإضاءة العالية دون سحق الأطراف القائمة.

تمرر contrast كل بكسل عبر ضرب مباشر حول نقطة الرمادي المتوسط. القيم الأكبر من 1.0 تزيد التباين (يصبح الداكن أكثر دكنة، والساطع أكثر سطوعاً، ويبقى الرمادي المتوسط كما هو)؛ والقيم الأصغر من 1.0 تقلل التباين.

تضيف brightness ثابتاً إلى قيمة كل بكسل. القيم الموجبة تُسطّع، والقيم السالبة تُعتم. والإزاحة منتظمة -- لا يُحافَظ على شيء -- وهو نادراً ما يريده التطبيق بمفرده، لكنه يقترن جيداً بمرور تباين لإعادة تمركز النتيجة.

تتركب المعاملات الثلاثة معاً: فاستدعاء واحد لـ gamma() يمكن أن يطبق منحنى غاما، ثم ضرب تباين، ثم إزاحة سطوع، كلها في مرور واحد. والترتيب هو غاما أولاً، ثم التباين، ثم السطوع، وهو ما يطابق الترتيب الذي يعطي أكثر النتائج بداهةً عندما تكون الثلاثة كلها غير افتراضية.

5.19.4. موازنة البياض التلقائية

تبدأ عائلة اللون من التصحيحات اللونية بـ موازنة البياض التلقائية. فالآلية نفسها التي يشغلها ISP الخاص بالمستشعر كجزء من خط أنابيب التصوير -- أي تعديل الكسب النسبي على قنوات الأحمر والأخضر والأزرق بحيث تُقرأ رقعة رمادية اللون في المتوسط على أنها رمادية فعلية -- متاحة أيضاً كعملية بعد الالتقاط على Image منتهية:

img.awb()

يستخدم الوضع الافتراضي خوارزمية عالم الرمادي: إذ يُفترض أن اللون المتوسط للصورة بأكملها رمادي محايد، وتُعدَّل قيم الكسب لكل قناة لجعله كذلك. أما الصيغة البديلة max=True فتستخدم خوارزمية رقعة البياض: إذ يُفترض أن أسطع البكسلات بيضاء محايدة، ويُعدَّل الكسب لجعلها كذلك. وكلاهما يعمل على RGB565 وعلى Bayer الخام؛ ولا يعمل أي منهما على تدرج الرمادي (حيث لا يوجد لون لموازنته) أو YUV (حيث لا يكون تمثيل اللون هو ما تعمل عليه هذه الخوارزميات).

متى نلجأ إلى صيغة ما بعد الالتقاط بدلاً من موازنة البياض التلقائية الخاصة بـ ISP: عندما يكون اختيار ISP غير مناسب للمشهد المعين، أو عندما يحمّل التطبيق إطارات مرجعية من القرص التُقطت في ظروف مختلفة، أو عندما يكون الحكم على اللون مهماً بما يكفي ليرغب التطبيق في إعادة تشغيله باختياره الخاص للخوارزمية.

5.19.5. مصفوفة تصحيح الألوان

عندما لا يكون تصحيح اللون الذي تحتاجه الصورة هو القياس لكل قناة الذي توفره موازنة البياض، بل مزجاً للقنوات أكثر عمومية، فإن العملية التي يُلجأ إليها هي مصفوفة تصحيح الألوان. تطبق الطريقة ccm() مصفوفة 3×3 (أو 3×4 مع إزاحة) تضرب متجه (r, g, b) لكل بكسل لإنتاج متجه (r, g, b) جديد:

img.ccm([[1.1, -0.05, -0.05],
        [-0.05, 1.1, -0.05],
        [-0.05, -0.05, 1.1]])

تتيح المصفوفة للتطبيق تصحيح التداخل بين قنوات الألوان -- فحيث تتضمن استجابة مستشعر الأحمر بعض الضوء الأخضر مثلاً، يمكن للمصفوفة أن تطرح جزءاً من القناة الخضراء من خرج الأحمر للتعويض. وعند دمجها مع إزاحة لكل قناة، تتيح صيغة 3×4 للتطبيق أيضاً إعادة تصفير كل قناة.

تغطي مادة خط أنابيب ISP سبب مصفوفات تصحيح الألوان. أما صيغة ما بعد الالتقاط على Image فهي العملية نفسها تماماً، مُطبَّقة بعد وقوع الأمر.