5.15. العمليات المورفولوجية¶
تعمل العمليات المورفولوجية على الصور الثنائية -- أي الأقنعة الناتجة عن تحديد العتبة وكشف الحواف. وتجتاز كل عملية النوع نفسه من الجوار المنزلق الذي تستخدمه مرشحات التمليس، لكن السؤال الذي تطرحه عند كل موضع هو نعم/لا: هل كل بكسل في الجوار مُضاء، هل أي بكسل في الجوار مُضاء، كيف يبدو نمط الإضاءة/الإطفاء؟ والإجابات تُنمّي المناطق وتُقلّصها وتعيد قصّ حدودها بطرق لا يستطيعها مرشح التوسيط.
المورفولوجيا هي ما يقع بين قناع ثنائي أولي -- خرج تحديد العتبة أو كشف الحواف أو مصنّف آخر ما -- والقناع الثنائي النظيف الذي تستطيع بقية خط المعالجة استخدامه. فخرج العتبة الخام يحتوي عادةً على بكسلات ضوضاء منعزلة منتشرة عبر مناطق المقدمة الحقيقية، وثقوب صغيرة مثقوبة في مناطق صلبة فيما عدا ذلك، وحدود متعرجة حيث قطعت العتبة قريباً من حافة جسم ما. والمورفولوجيا تزيل تلك العيوب.
5.15.1. العمليات الكلاسيكية الأربع¶
تتألف مجموعة الأدوات المورفولوجية من عمليتين أوليتين، وتركيبتين منهما:
تُنمّي dilate() كل منطقة مقدمة. والقاعدة هي: أي بكسل لديه على الأقل جار مقدمة واحد ضمن نافذته (2 * size + 1) يصبح مقدمة. والأثر المرئي هو أن مناطق المقدمة تكبر بمقدار size بكسل في كل اتجاه، وأن الثقوب داخلها تتقلص (أو تختفي) بالقدر نفسه.
تفعل erode() العكس. فأي بكسل لا يملك كل جار في نافذته في المقدمة يصبح خلفية. فتصغر مناطق المقدمة بمقدار size بكسل في كل اتجاه، وتختفي بكسلات المقدمة المنعزلة (التي لا تملك جيران مقدمة) تماماً، وتُقطع الوصلات الصغيرة بين المناطق الأكبر.
العمليات المورفولوجية الكلاسيكية الأربع مطبقة على منطقة ثنائية مشوبة بالضوضاء. التآكل يُقلّص، والتوسيع يُنمّي، والفتح هو تآكل ثم توسيع (يزيل الضوضاء)، والإغلاق هو توسيع ثم تآكل (يملأ الثقوب).¶
عملية open() هي تآكل يتبعه توسيع. فالصورة المتآكلة قد أُزيل منها كل بكسل ضوضاء منعزل، لكنها قد تقلصت أيضاً بمقدار size بكسل في كل اتجاه. وإتباع التآكل بتوسيع بالحجم نفسه يعيد مناطق المقدمة الحقيقية إلى حدودها الأصلية تقريباً مع بقاء الضوضاء مزالة. والتركيبة هي ما يجعل open العملية المعيارية لـ"إزالة الضوضاء" في المورفولوجيا الكلاسيكية: فبكسلات المقدمة المنعزلة تختفي، والمناطق الحقيقية تعود سالمة.
عملية close() هي الصورة المعكوسة -- توسيع يتبعه تآكل. فالتوسيع يملأ الثقوب الصغيرة داخل مناطق المقدمة ويصل المناطق المفصولة بفجوات صغيرة، والتآكل يُقلّص النتيجة عائداً إلى حدّها الخارجي الأصلي مع بقاء الداخل المملوء صلباً. والعملية close هي العملية المعيارية لـ"ملء الفجوات الصغيرة".
binary_mask.open(1) # remove single-pixel noise
binary_mask.close(2) # fill small holes and gaps
للمعامل size المعنى نفسه الذي له في مرشحات السطوع: فالقيمة size=1 تعني جواراً بأبعاد 3 في 3، وsize=2 تعني 5 في 5، وهكذا. والأحجام الأكبر تعني تنظيفاً أكثر عدوانية -- وتكلفةً أطول لكل بكسل.
5.15.2. القبعة العليا والقبعة السوداء¶
هناك تركيبتان إضافيتان جديرتان بالمعرفة لأنهما تستخرجان بالضبط الميزات التي تزيلها open وclose:
تُرجع top_hat() الفرق بين الصورة الأصلية ونسختها المفتوحة -- أي بكسلات المقدمة التي كانت open ستزيلها. وهذا حرفياً قناع لبكسلات الضوضاء، ومناطق المقدمة الصغيرة المنعزلة، وبُنى المقدمة الرفيعة التي لم تستطع عملية الفتح الحفاظ عليها. وهي مفيدة لـاستخراج ميزات المقدمة الصغيرة حين تكون تلك الميزات هي ما يهتم به التطبيق، بدلاً من إزالتها.
تُرجع black_hat() الفرق بين النسخة المُغلقة من الصورة والأصل -- أي بكسلات الخلفية التي كانت close ستملؤها. وهذا قناع للثقوب الصغيرة داخل مناطق المقدمة، والفجوات الضيقة بين المناطق التي كانت عملية الإغلاق ستجسرها.
كلتاهما أقل لجوءاً إليها من العمليات الأساسية الأربع، لكن النمط جدير بالتذكر -- فحين يحتاج تطبيق إلى استخراج ميزات صغيرة أو رفيعة تزيلها مرحلة التنظيف المعيارية، تكون القبعة العليا والقبعة السوداء الطريقة الطبيعية لاستعادتها.
5.15.3. وضع العتبة¶
تقبل العمليات المورفولوجية الأساسية الأربع جميعها معاملاً صحيحاً اسمه threshold يُليّن اختبار الإضاءة/الإطفاء عند كل موضع. فبدونه، تتصرف العمليات بالطريقة التي ذكرتها الأوصاف أعلاه: تتطلب erode() أن يكون كل جار مُضاءً، وتتطلب dilate() جاراً واحداً على الأقل. ومع ضبط threshold، تتسامح كل عملية مع ذلك العدد من الجيران الذين يصوّتون في الاتجاه الآخر. فبالنسبة للتآكل، يكون threshold هو عدد جيران الخلفية الذين يمكن أن يملكهم بكسل وينجو رغم ذلك: فالقيمة threshold=4 تُبقي أي بكسل لديه على الأقل أربعة من جيرانه الثمانية مُضاءين (في نافذة 3 في 3 يكون للبكسل المركزي ثمانية جيران)، فلا يتآكل بعدوانية. وبالنسبة للتوسيع، يكون threshold هو عدد جيران المقدمة الذي يجب أن يملك بكسل الخلفية أكثر منه قبل أن يُضاء: فالقيمة threshold=2 تتطلب ثلاثة جيران مقدمة على الأقل بدلاً من واحد، فينمو بعدوانية أقل.
صيغة العتبة مفيدة لضبط عدوانية مرحلة مورفولوجية دون تغيير حجم نافذتها، وهو ما كان سيغيّر أيضاً مقياس الميزات التي تؤثر فيها. ومعظم التطبيقات تلتزم بالسلوك الافتراضي، أما صيغة العتبة فهي موجودة للحالات التي يكون فيها الافتراضي أكثر أو أقل قليلاً مما يلزم.