5.14. التنعيم الغاوسي والحواف¶
تهيمن وظيفتان على ما تُستخدم فيه نوافذ الجوار في الرؤية الآلية الكلاسيكية: تنعيم التباين من بكسل إلى بكسل بنظافة، وإيجاد الحواف حيث تتغير الصورة بشكل حاد. والمرشح الغاوسي هو الأداة القياسية للأولى، والكاشفات المعتمدة على Laplacian هي الأداة القياسية للثانية -- ويتكامل الاثنان، لأن كل كاشف حواف يعمل بشكل أفضل على مدخل منعّم قليلاً.
5.14.1. المرشح الغاوسي¶
gaussian() هي ابنة عم mean() الموزونة نحو المركز. يحسب كلاهما متوسطاً على جوار كل بكسل، لكن أوزان الغاوسي ليست منتظمة: تُحسب البكسلات الأقرب إلى مركز الجوار أكثر، وتُحسب البكسلات عند طرف الجوار أقل، وتتبع الأوزان منحنى الجرس المألوف الذي يمنح المرشح اسمه.
إن الوزن ذا الشكل الجرسي هو ما يجعل المرشح الغاوسي أنعم من متوسطة الصندوق. فقد ينتج ترشيح المتوسطة عيوباً مرئية عند حواف الأجسام -- إذ يُدخل القطع الحاد في الوزن أنماط رنين صغيرة عند الانتقالات الحادة. وتتجنب أوزان الغاوسي المتناقصة بسلاسة هذا الرنين وتنتج نتيجة أقرب إلى ما ينبغي أن يبدو عليه "الضباب". والكلفة حساب أكثر لكل بكسل مقارنةً بمرشح المتوسطة، لكن ليس بدرجة كبيرة -- فالكلفة لكل بكسل تظل أقل بكثير من مرشح ثنائي الجوانب.
img.gaussian(1) # 3x3 Gaussian -- a clean light blur
img.gaussian(2) # 5x5 Gaussian -- stronger smoothing
التنعيم الغاوسي هو المرحلة الأولى القياسية لكل خط كشف حواف تقريباً. إذ تضخّم كاشفات الحواف أدناه جميعها المحتوى عالي التردد، بما في ذلك ضوضاء المستشعر التي لا ترغب الخوارزمية فعلاً في كشفها. ويكبت تشغيل تنعيم غاوسي خفيف أولاً تلك الضوضاء دون تنعيم الحواف الحقيقية كثيراً، تاركاً كاشف الحواف يجد الحواف الحقيقية بدلاً من البقع.
5.14.2. إخفاء عدم الحدة (Unsharp masking)¶
نسخة مضبّبة غاوسياً من صورة هي المادة الخام التي تستخدمها تقنية إخفاء عدم الحدة للشحذ الكلاسيكي. ويؤدي ضبط unsharp=True على المرشح إلى تبديله من "إنتاج الصورة المضبّبة" إلى "طرح الصورة المضبّبة من الأصل وإضافة الفرق إلى الأصل" -- والأثر هو أن الحواف عالية التردد تُضخّم مقارنةً بالمساحات الداخلية الناعمة.
img.gaussian(1, unsharp=True)
يقيس الوسيطان الاختياريان mul و add قوة نتيجة إخفاء عدم الحدة؛ والقيمتان الافتراضيتان (mul=1.0 و add=0.0) هما شحذ معتدل لا يبالغ في إبراز ضوضاء المستشعر.
5.14.3. مرشح Laplacian¶
تشغّل laplacian() تقريباً متقطعاً للمشتقة المكانية الثانية للصورة. ويكون الخرج كبيراً حيث تتغير قيم البكسل بسرعة، وقريباً من الصفر حيث تكون ثابتة أو متغيرة خطياً. والقراءة الطبيعية للنتيجة هي استجابة حافة: تضيء البكسلات حيث تتغير الصورة بسرعة، وتبقى البكسلات في المساحات الداخلية الناعمة داكنة.
img.laplacian(1) # 3x3 Laplacian -- edge response
تتوفر الوسائط نفسها المتوفرة في gaussian. وتنتج sharpen=True صورة مشحوذة (مع إضافة Laplacian إلى الأصل بدلاً من إرجاعها بمفردها). ويقيس mul و add الاستجابة.
ثمة استخدام عملي يتجاوز كشف الحواف وهو قياس البؤرة. فاستجابة Laplacian متوسَّطةً عبر منطقة تعطي مقياساً تقريبياً لمقدار المحتوى عالي التردد الذي تحمله المنطقة؛ ففي إطار جيد البؤرة يكون ذلك المتوسط مرتفعاً، وفي إطار ضبابي ينخفض. ومقارنة استجابة Laplacian عبر الإطارات هي الطريقة الرخيصة لطرح سؤال "هل العدسة في البؤرة؟" دون الحاجة إلى مقياس تباين أغلى ثمناً.
5.14.4. دالة find_edges¶
تشغّل find_edges() خط كشف حواف كاملاً وليس مجرد مرشح استجابة حافة. وهي تعمل على الصور بتدرج الرمادي، والنتيجة صورة ثنائية تشير بكسلاتها غير الصفرية إلى المواضع التي يحمل فيها المدخل ذلك النوع من تغير السطوع الذي ينبغي اعتباره حافة.
تأخذ الدالة وسيط edge_type الذي يختار بين خوارزميتين:
تشغّل EDGE_SIMPLE مرشح تمرير عالٍ، وتطبق عتبة، وتعيد النتيجة. سريعة، لكن الخرج يتضمن كل تغير سطوع فوق العتبة، بما في ذلك الضوضاء والملمس الذي على الأرجح لا يهتم به التطبيق. وهي معقولة للصور النظيفة وللحالات التي ستُنظَّف فيها الضوضاء بتمريرة شكلية (مورفولوجية) لاحقة.
تشغّل EDGE_CANNY كاشف الحواف Canny -- الخوارزمية الكلاسيكية متعددة المراحل. فهي تحسب تدرج السطوع، وتكبت كل استجابة ليست عظمى على امتداد اتجاه التدرج (بحيث يكون عرض كل حافة بكسلاً واحداً)، وتطبق عتبة تباطؤ (بحيث تُتعقّب حافة قوية في مكان واحد حتى حيث تتلاشى بين المواضع). والنتيجة مجموعة نظيفة ورفيعة ومتصلة من بكسلات الحواف من النوع الذي تريده كل خوارزمية كلاسيكية معتمدة على الحواف.
وسيط threshold هو صف ثنائي العناصر (low, high). بالنسبة إلى EDGE_CANNY، تكون القيمة العليا هي الحد الفاصل الذي يُعد البكسل فوقه حافة بشكل مؤكد، والقيمة الدنيا هي الحد الفاصل الذي يُعد البكسل فوقه حافة فقط إذا كان متصلاً ببكسل مؤكد. أما بالنسبة إلى EDGE_SIMPLE، فلا تهم سوى القيمة العليا؛ وهي الحد الفاصل الوحيد الذي يُعد البكسل فوقه حافة. والقيمة الافتراضية (100, 200) نقطة انطلاق تستحق الضبط للمشهد المعين.
img.gaussian(1) # pre-smooth
img.find_edges(image.EDGE_CANNY, threshold=(50, 100))
كاشف Canny هو الخيار الأفضل لكل تطبيق تقريباً تهم فيه الحواف. أما EDGE_SIMPLE الأسرع فيجدر تذكرها للحالات التي تكون فيها كلفة Canny مشكلة ولا يكون فيها رفض الضوضاء عبر تباطؤها مطلوباً فعلاً.
5.14.5. العتبة التكيفية على الغاوسي¶
مثل المرشحات الإحصائية، تقبل gaussian() زوج الكلمات المفتاحية threshold=True / offset=N للعتبة التكيفية. والسلوك نفسه الموجود مع mean(): تصبح الإحصائية الغاوسية في كل موضع الحد الفاصل المحلي، ويُقارن بكسل المصدر مع الإحصائية زائد الإزاحة لإنتاج نتيجة ثنائية.
عادةً ما يكون المتغير الغاوسي الخيار الأنظف للعتبة التكيفية حين يكون المدخل خالياً من الضوضاء إلى حد معقول. فالمتوسط الموزون يعطي حداً فاصلاً أنعم مما ينتجه مرشح المتوسطة، بعيوب أقل عند الانتقالات الحادة في الإضاءة.