هذه المقالة ستكون بدأية سلسلة من المقالات و التي تتحدث عن عالم التبصير الحاسوبي (Computer Vision) عن أساسياته و إستخداماته و الأهم من ذلك طريقة إستخدامه و الإستفاده منه في العديد من المجالات .
و سنتحدث في المقالة الأولى عن أحد الأركان الأساسية في التبصير الحاسوبي و هي مرشحات اللف الرياضي سنتعرف عليها و على أهميتها بالإضافة لأنواعها و إستخدامات كل منها ، بعد ذلك سنتحدث بإيجاز عن فضاء هوف و سنختم المقال بالحديث عن خوارزمية هار . بعد ذلك سنقوم بتطبيق كل ما تحدثنا عنه .
المرشحات :
عند معالجة الصور نستخدم المرشحات ( Filters ) لأمرين :
- الأول : للتخلص من المعلومات اللتي لا تهمنا .
- الثاني : لبرز المعالم المهمة لنا.

و تنقسم المرشحات إلى قسمين :
القسم الأول : مرشحات الترددات العالية ( high-pass filter )
وهو مرشح يقوم بتوضيح الصورة ( Sharpen it ) كما يقوم بتحسين الأجزاء في الصورة ذات الترددات العالية ( high frequency ) وهذه الأجزاء هي التي يحدث عندها إنتقال سريع بين لون فاتح و لون غامق .

مثال : لنفترض أن لدينا صورة الباندا التالية ، وقمنا بإستخدام فلتر التررددات العالية عليها ، ماذا سيحدث ؟
سنجد الأتي :
في المناطق التي تدرج الألوان فيها منخفض سيتم ترشيحها باللون الأسود ، بينما المناطق التي تدرج الألوان فيها عالي حيث يحدث عندها تدرج مفاجئ بين لون فاتح و لون غامق ، سيتم ترشيحها باللون الأبيض .

بالتالي تلاحظ بأن هذا المرشح يقوم بالتركيز على إظهار الحواف في الصورة . و من هنا نحصل على تعريف الحواف
الحواف : هي خيط رفيع يمر بين المناطق الغير مشتركة في الصورة أو المجالات اللونية الغير متجانسة و التي تظهر بشكل مفاجئ
طريقة عمل هذه المرشحات:
المرشحات التي سنذكرها هنا تعمل بمدأ اللف الرياضي و كل مرشح يحتوي على عنصرين ، نواة و نافذه.
نواة اللف الرياضي ( Convolutional kernel ) : هي مصفوفة ثنائية أو ثلاثية تحتوي على قيم لأعداد صحيحة تقوم بإجراء تعديلات على الصورة.
النافذة : هي مصفوفة بنفس حجم النواة تمرر على الصورة من أجل إستخراج قيم النقاط الضوئية (Pixels) فيها.

مرشح لابلاس (Laplacian filters) :
و وظيفة هذا المرشح هي إيجاد الحواف في الصورة و تتكون نواته من مصفوفة ثلاثية حاصل جمع قيمها هو الصفر. حيث يقوم هذا المرشح بحساب الإختلاف او مقدار التغير في النقاط الضوئية (Pixels) المتجاورة في الصورة وهذا التغير يتم حسابه عن طريق طرح قيم النقاط الضوئية المحيطة بنقطة الضور المتمركزه في منتصف نواة المرشح.
وفي حالة لم يكن الناتج صفر فسيقوم هذا المرشح إما بتفتيح الصورة إذا كان الناتج موجب أو تعتيم الصورة إذا كان الناتج سالب

و لتطبيق عملية اللف الرياضي ، نحتاج إلى صورة ترمز لها بـالدالة F(x,y) و نواة لف نرمز لها بـ K و كما نرمز لعملية اللف الرياضي ككل بـ *

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

بالتالي في الخانة الأولى نقوم بضرب 0 * 120 لينتج لنا 0 ، و في الخانة الثانية -1 * 140 لينتج لنا -140 و نقوم بإجراء هذه العملية على كل النقاط ضوئية ، و في النهاية سينتج لنا القيم الجديده للمصفوفة كما هو موضح في الأعلى . بعد ذلك نقوم بجمع كل القيم مع بعضها لينتج لنا القيمة الجديدة للنقطة ضوئية الذي مَركزنا النافذة فوقها بالتالي من 220 أصبحت 60 .
و هذه القيمة تعني بأنه تم إكتشاف حافة صغيرة جداً ، و يمكننا ملاحظة ذلك من الصورة بحيث يتيغير محيط النقطة ضوئية تدريجيا من لون فاتح إلى لون غامق .
قيم النواة يطلق عليها أوزان ( weights ) لأنها تحدد أهمية النقاط الضوئية في تكوين الصورة الجديدة ، وفي هذه الحالة قإن كاشف لابلاس لإكتشاف الحواف ( edge detection) يعطي الأهمية العظمى للنقطة الضوئية في المنتصف و من ثم يتبعها في ذلك النقاط الضوئية فوقها و تحتها و يمناها و يسراها ، أما النقاط الضوئية في الزوايا فلا أهمية لها لدينا
لكن قد يتسائل البعض بما أنه حتى نطبق المرشح على الصورة نحتاج إلى أن نمركز النواة على كل نقطة ضوئية في الصورة فماذا عن حواف الصورة
هناك ثلاثة أمور بوسعنا القيام بها :
- الحشو ( Padding)
نقوم بوضع إطار أسود على حواف الصورة
- القص ( Crop)
نقوم بإهمال كل النقاط الضوئية على الحواف ، و لكن هذا سينتح عنه صورة أصغر بقليل عن الصورة الأصلية
- التمديد( Extend)
نقوم بتمديد النقاط الضوئية على الحواف و ذلك بتكريرها على حسب حاجتنا خارج إطار الصورة

كاشف سوبل ( Sobel filter ) :
يتكون كاشف سويل من نواة ثلاثية ، و يحتوي هذا الكاشف على مرشحين :
- المرشح العامودي و يعرف بـ ( sobelx ) : يقوم بحساب الإختلاف بين البكسلات علي يمين و يسار البكسل المنشود
- المرشح الأفقي و يعرف بـ (sobely) : يقوم بحساب الإختلاف بين البكسلات علي أعلى و أسفل البكسل المنشود

و هنا مثال لتطبيق هذا المرشح على صورة رنين مغناطيسي للدماغ

المقدار ( magnitude) :
بوسع كاشق سوبيل حساب مدى شدة التدرج اللوني حول الحافة و الذي يمثل قوة الحافة ، و ذلك بإستخدام المقدار و كلما زادت قيمة المقدار زادت قوة الحافة ، و يحسب المقدار بحساب تربيع ما تحت الجذر :
الإتجاه ( Direction ) :
في حالات كثيرة قد يكون من المهم النظر للحواف في إتجاه محدد و يمكن معرفة إتجاه الحافة عن طريق إيجاد ظل الزاوية.
و بهنا نكون قد تعرفنا على مرشحين من مرشحات الترددات العالية ، ولكن الجدير بالذكر أن من أحد مساؤ مرشحات التردد العالي هو تضخبم الضوضاء ( Noise ) الموجوده في الصورة ، و الضوضاء عادة تظهر كنقط أو حبيبات رمل على الصورة و التي لا تحتوي على أي معلومات مفيده لنا. ولهذا دائما نقوم بمعالجة الصورة و محاولة تخفيف الضوضاء وذلك عن طريق إستخدام مرشح التردد المنخفض.
القسم الثاني: مرشحات الترددات المنخفضة ( Low Pass filter )
يعمل هذا المرشح بتخفيف الضوضاء في الصورة وذلك بأمرين :
- تنعيم الصورة أو تغبيش الصورة ( blurring).
- منع الأجزاء ذات الترددات العالية في الصورة
و يتم ذلك عن طريق إيجاد القيمة المتوسطة بين كل نقطة ضوئية و النقاط الضوئية المحيطه بها ، يجود التذكير بأن مرشحات التردادت العالية تعمل على إيجاد الفرق كل نقطة ضوئية و النقاط الضوئية المحيطه بها.
مثال على الضوضاء عالية التردد في الصورة :

و سنتطرق إلى مرشحين من مرشحات الترددات المنخفضة .
المرشح المتوسط ( AVERAGE FILTER )
وهو عبارة عن نواة تتكون من مصفوفة ثلاثية ، حاصل جمعها واحد وذلك لأن هذا سيضمن المحافظة على سطوع الصورة بحيث لا تصبح فاتحه أو غامقة . و نحصل على هذه القيمة عن طريق ضبط قيمة ( NORMALIZE) ناتج النواة و ذلك بقسمته على نفسه.
و الأن تقوم بعملية اللف الرياضي للصورة وذلك عن طريق تمرير نافذة المرشح فوق الصورة ، و سنختار هذا الجزء من الصورة كمثال
و نجد في هذه الحالة أن ناتج النقطة الضوئية إزداد من 40 إلى 85 وذلك لأن جميع النقاط الضوئية المجاوره له أعلى منه قيمة.

وبعد تطبيق ذلك على كل الصورة ينتج لنا صورة أنعم

و لكن في أغلب الأحيان نحن نرغب في إستخدام فلتر يقوم بتنعيم الصورة وفي نفس الوقت الحفاط على حوافها و هنا يأتي دور المرشح التالي.
مرشح التنعيم الغاوسي (filter Gaussian smooth)
و ببساطة هذا المرشح يعمل على حساب المتوسط بطريقة موزونه بحيث يتم منح أغلب الوزن للنقطة الضوئية في المنتصف و أقل وزن للنقاط الضوئية في الزوايا و حاصل جمع هذا المرشح هو أيضا واحد

إلى الأن لقد رأينا أهمية إستخدام مرشحات الترددات العالية و المنخفضة سويا للقيام بعملية كشف الحواف بدقة ،
لكن على الرغم من ذلك فعملية إكتشاف الحواف عملية معقدة لأنه:
- يترتب علينا تحديد ماهية شدة التغييرفي التدرج اللوني التي ينتج عنها حافة .
- و كذلك كيفية إكتشاف الحواف العريضة و الرفيعه.
و أحد أهم الطرق المستخدمة في إكتشاف الحافات و التي تأخذ في الإعتبار هذه التسأولات هو كاشف كاني
كاشف كاني ( Canny Edge Detector ) :
و يمتاز هذا الكاشف في أنه يقوم بتأدية عدة خطوات خلال عملية الكشف ينتج منها كشف دقيق للحواف :
أولا : يقوم بتنقية الضوضاء بإستخدام التنعيم الغاوسي ( Gaussian smooth )

ثانيا : يقوم بتحديد قوة و إتجاه الحواف بإستخدام كاشف سوبل

ثالثاً : يقوم بعزل الحدود القوية و وترفيعها لتصبح عن طريق إجراء عملية تعرف بـإخماد الغير الأكبر Non maximum suppression
وهذه العملية تقوم بالنظر في قوة و إتجاه كل حافة تم كشفها و من ثم إختيار النقطة الضوئية ذا القيمة الأعلى محليا من أجل إنشاء خطوط عرضها مطابق لأقوى حافة

رابعا : يتم إختيار أفضل حافة عن طريق إستخدام التعتيب المتباطئ ( hysteresis Thresholding )

و الهدف من التعتيب المتباطئ هو تحديد إذا
ما كانت الحواف المكتشفة فعلا حواف أو لا
فلنفترض أننا أخذنا مقطع من صورة عرضها نقطة ضوئية واحده ،

وهنا المنحنى يمثل مستوى شدة تدرج الحافة ، و من هنا نقوم بتحديد المستوى الأعلى للعتبة و الذي يسمح بمرور كل الحواف التي تتخطاه و تعتبر حافة أكيدية وأيضا نقوم بتحديد المستوى الأدنى للعتبة و أي حافة قيمتها أقل من هذا المستوى يتم تصفيرها ولكن أي حافة تقع في المنتصف سيتم المحافظة عليها فقط إذا ما كان متصلة بحافة أكيدية وبهذه الطريقة نجد أن كاشف كاني يتخلص من الحواف الضعيفة و يقوم بالتركيز فقط على الحواف المهمة .
تحويل هوف (Hough transformation) :
أبسط حد بوسعنا إكتشافه هو الخط والحدود الأكثر تعقيداً مكونه من عدة خطوط متصلة مع بعضها ، كمثال أي مستند أو صورة يمكن التفكير في حدودها على أتها أربعة خطوط موصولة مع بعضها ، و عند القيام بعملية إكتشاف الحواف ستجد أن الحواف عندما يتم وصلها مع بعض تكون خط أطول أو شكل ما . و تحويل هوف هو تقنية شائعة لإكتشاف أي شكل يمكن تمثيله بمعادلة رياضية حتى لو كان مشوه أو متقطع
يمكننا تمثيل أي خط على أنه دالة في فضاء الصور ، و المعادلة التي تمثل خط هي y=m x + b و هنا M تمثل المنحنى و b تمثل مدى تحرك الخط للأسفل أو الأعلى ، بيتما M0 و b0 هم قيم ثابتة محدده .
ومن التحويلات المفيدة هي نقل الخط من فضاء الصور إلى فضاء هوف بإستخدام تحويل هوف حيث يقوم بنقل البيانات من فضاء الصور إلى فضاء هوف و تمثيل الخط في أبسط طريقة وذلك كنفطة في الإحداثيات M0 و b0 وهما نفس m و b من معادلة الخط

عدة خطوط في فضاء الصور يمكن تمثيلها بعدة قيم لل m و b في فضاء هوف و الأنماط المختلفة في فضاء هوف يمكن أن تساعدنا على معرفة خطوط أو أشكال متعددة ، و العكس صحيح .
كمثال فللنظرللخطين في فضاء هوف و اللذان يتقاطعان عند النقطة M0 و b0 في فضاء الصور سيكون هذا الخط هو الخط الذي معادلته y = m_0 x + b_0.
ولو كان لدينا خط مكون من مقطوعيات صغيرة أو نقاط قريبه من بعضها بحيث تمثل الخط في فضاء الصور ، فإن هذا سيتنج عنه العديد من الخطوط المتقاطعه في فضاء هوف

و لنتخيل هذا الخط المتقطع هو جزء من حافة تم إكتشافها في صورة ، بالتالي خطتنا لإيجاد خط متصل في الصورة هي إيجاد نقاط التقاطع في فضاء الهوف.
لكن لنفترض أن هذا الخط المتقطع كان عبارة عن خط مستقيم للأعلى أو الأسفل و بالتالي ميله سيمتد إلى ما لا نهاية . في هذه الحالة سيكون من الأفضل نقل فضاء هوف إلى الإحداثيات القطبية لذلك عوضا عن m و b ل سيكون لدينا:
ρ : ووهي مسافة الخط من المصدر
Θ : الزاوية من المحور الافقي
الأن ، الخط المتقطع في فضاء الصور يمكن تحدديده في فضاء هوف على أنه تقاطع منحنى الجيب (sinusoidal)

خوارزمية هار كاسكيد ( Haar cascades )
سنقوم ببناء مكتشف وجه بإستخدام هذه الخوارزمية ، و هذه الخوارزمية تعمل عن طريق التدرب على العديد من الصور الموجبة ( صور أوجه ) و صور سالبة ( صور بدون أوجه ) من أجل بناء ما يعرف بـ المصنف ( classifier ) ومن كل صورة تقوم الخوارزمية بتحديد ما يعرف بمميزات هار ( Haar feature ) و مميزات هار تبحث في منطقة المستطيلة حول مجموعة معينة من النقاط الضوئية و من ثم تقوم بطرح النقاط الضوئية تحت المستطيل الأبيض من النقاط الضوئية تحت المستطيل الأسود وذلك لإيجاد الفرق بين النقاط الضوئية و مميزات هار تقوم بإكتشاف الحواف و الخطوط و الأتماط المربعه .

عند محاولة إكتشاف الوجه في أي صورة فإن معظم الصورة لن يحتوي وجه فما ستقوم به هذه الخوارزمية في النظر إلى الصورة و أستحدام أحد مميزات هار كمثال مكتشف الخط ثم تقوم بإجراء تصنيف على كامل الصورة ، و بعزل المنطقة التي لم يتم إكتشاف ما يكفي من الخطوط فيها و تصنفيها على أنها ليست بوجه. و من ثم تقوم بتغذية الصورة الجديدة المصغرة إلى مميز هار أخر و تصنيف الصورة مجدداً ومن ثم عزل المنطقة التي لا تعتبرها وجه وبهذه الطريقة فإن خوارزمية هار كاسكيد تركز فقط على معالجة و إكتشاف المنطقة التي تم تصنيفها على أنها وجه أو جزء من وجه وتتخلص بسرعة من أي منطقة تم تصنيفها على أنها ليست بجزء من وجه ، وهذا ما يجعل هذه الخوارزمية سريعة جداً . و تسمى هذه العملية بسلسة المصنفات أو (Cascade of Classifiers)

و هنا نصل إلى نهاية الجانب النظري لهذا المقال ، ومن أجل تطبيق كل ما تحدثنا عنه سنستعيد بمنصة غوغل كولاب (google colab)
رابط الكود :
https://colab.research.google.com/drive/1b7mDlUR5TkjeokJmkYgywWiRtPn_5Ycf
أو من خلال غيتهاب :
https://github.com/malawadd/Blog-Computer-Vision
إضافة تعليق