العودة للوحة التحكم
QudahWay / CV / Image Processing

QudahWay CV

Overview of Image Processing | معالجة الصور الرقمية

كيف بشوف الكمبيوتر أصلاً؟
ركز معي هون لأنك رح تكتشف إن الكمبيوتر "أعمى" تماماً.. هو ما بشوف الوان ولا أشكال ولا حتى "بسة" أو "سيارة".. ببساطة، الكمبيوتر بشوف مصفوفة أرقام (Matrix of Numbers).

تخيل معي إن الصورة هي عبارة عن "شبكة" مربعات صغيرة (Pixels)، وكل مربع فيه رقم بمثل شدة الإضاءة. بالشابتر هااض، رح نتعلم كيف نلعب بهاي الأرقام عشان نطلع "ميزات" الصورة، ونصفي "النويز"، ونخلي الكمبيوتر يبدأ يدرك شو اللي قباله.
What is Image Processing? (Digit & Matrix) Slide 01
Image Processing Intro
جوهر الموضوع (من بكسلات لأرقام):
📍 صورة الـ (8) شو قصتها؟ هاي الصورة بتورجيك كيف الدماغ الرقمي بيشتغل.. إنت شايف رقم ثمانية، بس الكمبيوتر شايف جدول أرقام (زي ما إنت شايف بالنص). اللون الأبيض هو أرقام عالية (قريبة من 255)، والأسود أرقام واطية (قريبة من 0).
📍 الفراشة (التحويل السحري): شوف صورة الفراشة على اليمين.. الجزء الأول هو الصورة الحقيقية، والجزء الثاني هو نسخة "مفلترة". المعالجة هون استخلصت الحواف (Edges) بس. هااض هو السحر اللي رح نتعلمه: كيف "نشيل" كل شي مش مهم ونخلي "الهيكل" اللي بيفهمنا شو هاي الحشرة.
Filters and Convolution Slide 02
Filters and Convolution
الأداة السحرية: الـ Image Kernel:
عشان نغير بالصورة، بنحتاج إشي اسمه Kernel.
الـ Kernel هو عبارة عن مصفوفة صغيرة (مثلاً 3x3) فيها أرقام معينة.

🌀 شو بنعمل فيه؟
بنمرر هاذ المربع الصغير فوق كل "بكسل" بالصورة، وبنعمل عملية حسابية اسمها Convolution.
🛠️ تطبيقاته:
بتقدر تعمل Blur (تغبيش)، Sharpening (توضيح)، أو تطلع Outlining (إطار) للأشكال. بصراحة، هو نفس اللي بيعمله Photoshop بس إحنا هون بنعمله بـ "كود" و "رياضيات".
Classical Filters vs Deep Learning Slide 03
Classical Filters
عصر "الفلاتر اليدوية" (Handcrafted):
قبل ما يطلع الـ Deep Learning والجنان تاعه، كان العلماء يمسكوا الورقة والقلم ويقعدوا يصمموا أرقام الـ Kernel بإيدهم عشان يكتشفوا ميزات الصورة.

💡 ليش لسا بندرسه؟
إذا الـ Deep Learning صار يعمل كل شي لحاله، ليش وجع الراس هااض؟
الجواب: لأن الـ CNN (الشبكات العصبونية) أصلاً بتتعلم هاي الفلاتر! يعني لو فهمت كيف "الفلتر اليدوي" بشتغل، رح تفهم "الذكاء الاصطناعي" شو قاعد بيتعلم جوا الطبقات تاعته.
Math of Convolution (The Guts) Slide 04
Math of Convolution
الرياضيات (لا تخاف.. بسيطة!):
شوف هالصورة والعملية الحسابية.. الموضوع هو "ضرب وجمع".

تخيل عندك Source Pixel (بكسلات الصورة)، وبتحط فوقها Sobel Filter (المربع الأحمر):
  1. بتضرب كل رقم بالفلتر بالرقم اللي مقابله بالصورة.
  2. بتجمع كل النواتج.
  3. الناتج (في المثال طلع -3) بصير هو القيمة الجديدة للبكسل في Destination Pixel.
(-1 x 3) + (0 x 0) + (1 x 1) +
(-2 x 2) + (0 x 6) + (2 x 2) +
(-1 x 2) + (0 x 4) + (1 x 1) = -3
Why Use Filters? Slide 05
Why use filters
ليش بنغلب حالنا؟ (خلاصة الفوائد):
إحنا بنستخدم الفلاتر لأربع أهداف أساسية:
  • Feature Extraction: استخراج ميزات زي الحواف والزوايا (عشان نعرف وين "حدود" السيارة بالصورة).
  • Noise Reduction: تنظيف الصورة من "النمش" أو التشويش (Blurring).
  • Enhancement: توضيح تفاصيل معينة كانت مخفية.
  • Pattern Recognition: مساعدة الكمبيوتر إنه يميز الأنماط المتكررة.
2D Convolution: Blurring (The Softener) Slide 06
Blurring Example
فلتر التغبيش (Blurring):
شوف تاج محل كيف صار "ناعم".. هون استخدمنا Box Filter.

🤔 شو الأرقام اللي جوا؟ كل المربعات فيها (1). هاض يعني إننا بناخد "معدل" (Average) البكسلات اللي جنب بعض. لما تخلط الألوان مع بعضها، التفاصيل الحادة بتروح وبتصير الصورة ناعمة.
2D Convolution: Sharpening (The Detailer) Slide 07
Sharpening Example
فلتر التوضيح (Sharpening):
هون العكس تماماً! شوف كيف التفاصيل صارت "بارزة" أكثر.

🎯 سر المربع: الرقم اللي بالنص كبير (5)، واللي حوليه سالب (-1). هاي العملية بتخلي الفرق بين البكسل وجيرانه "يتضخم"، فبتشوف الحواف أوضح بكثير. (زي لما تزيد الـ Contrast بس على مستوى البكسل).
2D Convolution: Edge Detection Slide 08
Edge Detection Example
كشف الحواف (Edge Detection):
تاج محل اختفى! ما ضل غير "الخيوط" أو "الرسمة" تاعت المبنى.

⚔️ فلتر الحواف: هون بنستخدم مركز سالب وقوي جداً (-8) وبنجمع البكسلات المحيطة. بمعنى: إذا كل اللي حولك زيك (لون واحد)، الناتج بصير صفر (أسود). بس إذا في "تغيير" مفاجئ باللون، الناتج بضرب وبطلع "خط" أبيض يورجيك الحافة.
How to Build a Filter (The Secret Sauce) Slide 09
Sobel Kernel Directions
من وين بتيجي الأرقام؟
ممكن تسأل حالك: "مين الفاضي اللي قعد يجرب هالأرقام؟".

الحقيقة إنها رياضيات بحتة! شوف الصورتين على الشمال:
  • X-Direction Kernel: مصمم عشان يشوف التغيير بالعرض (حواف عمودية).
  • Y-Direction Kernel: مصمم عشان يشوف التغيير بالطول (حواف أفقية).
لما ندمجهم مع بعض، بنطلع صورة الفراشة الكاملة اللي شفتها أول الدرس.
The Core Idea: Derivatives in 2D Slide 10
Derivatives Concept
الفكرة الجوهرية: المشتقات (Derivatives):
تذكر "الاشتقاق" اللي أخذناه بمادة الـ Image Processing الفصل الماضي؟ هو مقياس "سرعة التغيير".

بما إن الصورة "رقمية" ومش "خط مستمر"، بنستخدم إشي اسمه Finite Differences (الفروقات المحدودة). إحنا بنطرح قيمة البكسل من جاره عشان نعرف: "هل في قفزة باللون هون؟". لو في قفزة كبيرة، يعني في حافة.
Finding Edges (Intensity Changes) Slide 11
Simple Finite Difference
أبسط فلتر حواف:
أبسط طريقة عشان تطلع الحافة هي إنك تستخدم الفلتر [-1 1]. إنت ببساطة بتحكي للكمبيوتر: "اطرح الحالي من اللي قبله".

⚠️ المشكلة:
الصور الحقيقية فيها Noise (تشويش). الفلتر البسيط هاذ رح يعتبر "الديجيتال نويز" كأنه حواف، فرح تطلع الصورة مخربشة. عشان هيك بنحتاج حسابات أكثر "ثباتاً" (Stable) رح نعرفها بالسلايدات الجاية.
Sobel Filter (The Pro version) Slide 12
Sobel Filter Kernels
فلتر "سوبل" (Sobel): الحل الذكي:
تذكروا ليش حكينا الفلتر البسيط `[-1 1]` بخربط مع النويز؟ هون إجا "سوبل" وحل المشكلة.

فلتر Sobel مش بس بشوف الفرق (Derivative)، هو بيعمل شوية Smoothing (تنعيم) بنفس الوقت عشان يطنش النويز.

🧐 ملاحظة دقيقة:
ليش في رقم (2) بالنص مش (1) زي الأطراف؟
هاض عشان نعطي وزن أكبر للبكسل اللي بالمركز، وهيك بنطلع "تدرج" (Gradient) أنعم وأدق للحافة.
Vertical Edge Detection (Step-by-Step) Slide 13-14
Edge Detection Input Edge Detection Result
تطبيق عملي: كشف الحواف العمودية:
خلينا نشوف بلغة الأرقام شو بصير جوا:
  1. عندنا صورة (بكسلات 10 على الشمال، و0 على اليمين).. يعني في "حافة" عمودية بالنص.
  2. استخدمنا فلتر عمودي [1 0 -1].
  3. النتيجة: الأماكن اللي ما فيها تغيير (كلها 10 أو كلها 0) طلعت أصفار.
  4. بالنص، وين ما في "قفزة" من 10 لـ 0، طلع عندنا رقم (30).
هاذ الرقم (30) هو اللي بضوي ع الشاشة وبحكيلنا: "يا جماعة هون في خط!".
Logic of Edges: Left vs Right Slide 15
Left Edge Logic
المنطق وراء الألوان:
شوف المثال هاذ.. لما ننتقل من أبيض (255) لأسود (0):

العملية الحسابية بتعطينا قيمة موجبة أو سالبة حسب اتجاه التغيير.

🎨 ليش النتيجة أسود ورمادي؟
لما نطبق الفلتر على الصورة:
  • المناطق السادة (ما في تغيير): النتيجة = 0 → بتظهر أسود.
  • منطقة الحافة (في تغيير حاد): النتيجة = قيمة موجبة عالية → بتظهر رمادي فاتح أو أبيض.
يعني الجهاز بحول الأرقام لألوان: الصفر = أسود، والأرقام الكبيرة = فاتح. وهيك بنشوف الحواف "بتضوي" على خلفية سوداء!

المهم تفهم إنه الحافة هي "منطقة انتقال".. والفلتر وظيفته يمسك هاي المنطقة ويحولها لبيانات الجهاز يقدر يحللها.
Canny Edge Detector (The King of Detectors) Slide 16
Canny Edge Detector Intro
خوارزمية "كاني" (Canny): الأفضل على الإطلاق:
ليش بنعتبر Canny هو التوب؟

لأنه مش مجرد فلتر واحد وبخلص، هو عبارة عن "سلسلة خطوات" ذكية بتضمن إنه يطلع أكبر عدد من الحواف الحقيقية ويطنش الأشياء الغلط (False Edges). زي ما بحكوا: "شغل متعوب عليه".
Canny Step 1: Gaussian Filter (Noise Cleaning) Slide 17
Gaussian Filter Step
الخطوة الأولى: تنظيف الصورة:
قبل ما ندور على الحواف، لازم ننظف "النويز".

بنستخدم Gaussian Filter (غالباً بحجم 5x5). الفكرة إنه النويز ممكن يعمل "حواف وهمية" تخدع الكمبيوتر، فإحنا بنعمل شوية بلور (Blur) خفيف عشان نضمن إنه اللي ضل هو الحواف "الأصلية" بس.
Canny Step 2: Gradient Calculation Slide 18
Gradient Calculation Step
الخطوة الثانية: حساب الميل (Gradients):
هون بنستخدم فلاتر زي Sobel عشان نطلع شغلتين:

  • Magnitude (Gi): قوة الحافة (كم هي واضحة؟).
  • Direction (θi): اتجاه الحافة (بأي زاوية ماشية؟).
الرياضيات هون هي (فيثاغورس) للـ Magnitude، و (tan inverse) للـ Direction.
Canny Step 3: Non-maximum Suppression (NMS) Slide 19-20
NMS Explanation NMS Visual Result
الخطوة الثالثة: تنحيف الحواف (NMS):
أحياناً الحافة بتطلع "خميله" ومبكسلة. إحنا بدنا "خيط" ضعيف يحدد الحافة بالظبط.

عملية Non-maximum Suppression بتعمل جرد: أي بكسل مش هو "الأقوى" (المكسيمم) في اتجاه الحافة، بنعمله Suppression (يعني بنخليه صفر/أسود).

شوف الفرق بالصورة.. قبل الـ NMS الحواف ضبابية، بعد الـ NMS صارت دقيقة ومرسومة رسم!
Canny Step 4: Double Thresholding & Hysteresis Slide 21-22
Double Thresholding step Hysteresis Explanation
الخطوة الرابعة: الفلترة النهائية (Hysteresis):
خايفين نكون ضيعنا حواف حقيقية بس ضعيفة؟ هون بيجي دور الـ Hysteresis.

بنحدد قيمتين (High & Low Threshold):
  • أعلى من الـ High: حافة قوية أكيدة (تعتمد فوراً).
  • بين الـ High والـ Low: حافة ضعيفة (بنطلع عليها.. إذا موصلة بحافة قوية بنعتمدها، إذا لحالها بنكبها).
  • أقل من الـ Low: نويز (بنكبها فوراً).
هيك بنضمن استمرارية الحواف بدون تشويش.
Sharpening (Enhancing Details) Slide 23
Sharpening Concept
فلتر الحدّة (Sharpening): إظهار التفاصيل:
عكس البلور (Blur)، هون بدنا الحواف تبين أكثر والتفاصيل الحادة تبرز.

الهدف مش إنه نزيد "إضاءة" الصورة، الهدف إنه نزيد الفرق بين البكسل وجيرانه. المناطق اللي فيها تغيير سريع بنخلي التغيير فيها "أعنف" (Stronger Contrast)، والمناطق السادة بنخليها زي ما هي.
The Sharpening Kernel (The Logic) Slide 24
Sharpening Kernel Structure
منطق الكيرنل (Kernel Logic):
شوف هاذ الكيرنل العجيب: [0 -1 0; -1 5 -1; 0 -1 0].

  • رقم 5 بالنص: بيحافظ على قيمة البكسل الأصلية وزيادة شوي.
  • الأرقام (-1) بالجوانب: بتطرح معدل الجيران من البكسل اللي بالنص.
النتيجة؟ إذا كان البكسل أصلاً مختلف عن جيرانه، رح يصير الاختلاف "فاجع" أكثر، وهيك بتطلع الحواف حادة.
Sharpening Example 1: Bright Center Pixel Slide 25
Bright Center Example
مثال 1: المركز الفاتح (Bright Center):
📊 الجدول (المصفوفة):
البكسل المركزي = 120 (فاتح شوي)
كل الجيران = 100 (أغمق شوي)
الفرق الأصلي = 20 درجة بس

🧮 الحساب مع فلتر Sharpening:
الكيرنل: [0 -1 0; -1 5 -1; 0 -1 0]

العملية:
(5 × 120) + (-1 × 100) × 4
= 600 - 400
= 200

✨ النتيجة:
• البكسل صار قيمته 200 بدل 120
• الفرق كان 20 (120 - 100)
• صار الفرق 100 (200 - 100)
• يعني الحافة صارت أوضح وأحد! 🎯
Sharpening Example 2: Dark Center Pixel Slide 26
Dark Center Example
مثال 2: المركز الغامق (Dark Center):
📊 الجدول (المصفوفة):
البكسل المركزي = 100 (غامق)
كل الجيران = 200 (فاتحين)
الفرق الأصلي = 100 درجة

🧮 الحساب مع فلتر Sharpening:
الكيرنل: [0 -1 0; -1 5 -1; 0 -1 0]

العملية:
(5 × 100) + (-1 × 200) × 4
= 500 - 800
= -300

🤔 شو معنى -300؟
الجهاز ما بقدر يعرض أرقام سالبة، فبحولها لـ 0 (أسود تماماً).

🔥 النتيجة:
• البكسل صار قيمته 0 (أسود) بدل 100
• الفرق كان 100 (200 - 100)
• صار الفرق 200 (200 - 0)
• يعني الحافة صارت حادة جداً! 💪

الفكرة: الفلتر ضخّم الفرق وخلى البكسل الغامق أسود قاتم عشان التباين يبين أكثر!

🎓 الخلاصة النهائية:
الـ Sharpening بضخّم الفروقات الصغيرة بين البكسلات عشان التفاصيل والحواف تبين أوضح وأحد!