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

QudahWay CV

Introduction to Video Processing | مقدمة شاملة في معالجة الفيديو

🎬 القصة: خداعة الحركة ("Flipbook")
بتتذكروا دفتر الرسومات الصغير اللي كنا نرسم على زواياه رسمة بتمشي خطوة خطوة، ولما نفرّه بسرعة الرسمة بتتحرك؟

هاي هي باختصار فكرة الفيديو الرقمي!
الفيديو ما هو إلا مجموعة صور (Frames) ثابتة بتنعرض ورا بعض بسرعة، ودماغنا بتخدع ويفكرها حركة متصلة.

وعشان هيك، بمعالجة الفيديو (Video Processing)، إحنا فعلياً بنتعامل مع بعد جديد انضاف على الصور: الزمن (Time). ⏳
What is Video? (The 3D Tensor) Slide 02
What is Video Definition
شو هو الفيديو بعيون الكمبيوتر؟
الكمبيوتر ما بشوف "مشهد" بتحرك، هو بشوف مصفوفة ثلاثية الأبعاد (3D Tensor).

المعادلة بسيطة:
📸 الصورة العادية (Image): الارتفاع × العرض (Height × Width) ← 2D
🎥 الفيديو (Video): الزمن × الارتفاع × العرض (Time × Height × Width) ← 3D or 4D Tensor

يعني كل فيديو عبارة عن Sequence of Images (سلسلة صور) الها ترتيب معين. كل صورة بهالسلسلة بنسميها Frame، وكل ما زادت، زادت مدة الفيديو.
Frame Rate & The Illusion of Motion Slide 03
Frames and FPS
سرعة "الكذبة": الـ FPS
عشان دماغنا يصدق إنها حركة مش صور مقطعة، لازم نعرض الصور بسرعة معينة. ومصطلح السرعة هاذ هو: Frame Rate (FPS).

🔢 شو يعني FPS؟
يعني Frames Per Second (كم صورة بتنعرض بالثانية الواحدة).

أمثلة من حياتنا:
  • 🎬 24 fps: سرعة أفلام السينما (عشان تعطي إحساس درامي).
  • 📺 30 fps: البرامج التلفزيونية والأخبار.
  • 🎮 60 fps: الألعاب والفيديوهات السريعة (SmoothMotion).
Video vs. Image Processing Slide 04
Relation between Image and Video
كيف بنعالج الفيديو؟
بما إنه الفيديو هو "مجموعة صور"، فإحنا بنقدر نطبق عليه كل شي تعلمناه في الـ Image Processing!

🛠️ طريقتين للمعالجة:
1. المعالجة المكانية (Spatial): بنعالج كل Frame لحاله كأنه صورة منفصلة (مثلاً نعمل Edge Detection لكل صورة بالفيديو).
2. المعالجة الزمانية (Temporal): بندرس التغييرات بين الـ Frames (عشان نكشف الحركة/Motion). بنشوف شو تغير بين الصورة الحالية والصورة اللي قبلها.

الخلاصة: الفيديو بضيف علينا بُعد الزمن (t)، وهاض البعد هو اللي بخلينا نفهم "الحركة" وتغير الإضاءة مع الوقت.
Video Structure Components Slide 05
Video Structure Diagram
مما يتكون الفيديو الرقمي؟
عشان نفهم الفيديو صح، لازم نحلله لمكوناته الأساسية. أي ملف فيديو (مثل MP4) بتكون من:

🎞️ الإطارات (Frames): هي الصور الفردية اللي بتكون الفيديو. كل وحدة لحالها هي Just an Image.
⏱️ معدل الإطارات (Frame Rate - fps): هو "عداد السرعة" للفيديو. بحدد كم frame بنعرض بالثانية. كل ما زاد، صارت الحركة أنعم (Smoother).
📐 الدقة (Resolution): أبعاد الصورة (الطول × العرض). مثلاً 1920×1080 (Full HD). كل ما زادت، زادت التفاصيل ووضوح الصورة.
⏳ المدة (Duration): طول الفيديو بالوقت. بنحسبها ببساطة:
Duration = Total Frames ÷ fps
Applications & Importance Slide 06
Video Processing Applications
ليش مهتمين بمعالجة الفيديو؟
الفيديو بعطينا شي الصور الثابتة ما بتقدر تعطيه: فهم الحركة والنشاط (Activity Understanding).

تطبيقات غيرت حياتنا:
  • 👮‍♂️ Surveillance & Security: كاميرات المراقبة الذكية اللي بتكشف الحرامي لحالها.
  • Sports Analytics: تحليل حركة اللاعبين، التسلل (VAR)، وإحصائيات المباريات.
  • 🚗 Self-driving Cars: السيارة بتشوف الطريق "فيديو" عشان تعرف السيارات اللي بتمشي وتوقف.
  • 🏥 Medical Analysis: مناظير العمليات وتحليل حركة القلب.
The Temporal Dimension (Time) Slide 07
Temporal Dimension and Motion
كيف بنكشف الحركة؟ (Motion Detection)
أبسط طريقة عشان الكمبيوتر يعرف "في حركة ولا لأ" هي إنه يراقب التغير بالزمن (Temporal Change).

الفكرة العبقرية البسيطة:
إذا صورتين ورا بعض (Frame t و Frame t+1) ولقتهم نفس الشي بالضبط، معناها فش حركة "سكون".
بس إذا طرحت الصورة الجديدة من القديمة وطلع فيه فرق، معناها في شي تحرك!

D(x,y) = | I(x,y, t+1) - I(x,y, t) |

المناطق المضيئة (Bright Areas) في ناتج الطرح (D) بتعني وجود حركة.
Frame Differencing Slide 08
Frame Differencing Example
شو بكشف الفرق بين صورتين؟
لما نطرح صورتين من بعض (Frame Differencing)، بنعرف "إيش اللي تغير" بس ما بنعرف:

  • اتجاه الحركة (Direction): ما بنعرف إذا السيارة رايحة يمين ولا يسار.
  • سرعة الحركة (Speed): ما بنعرف قديش هي سريعة.
Mask (أبيض وأسود) بحدد أماكن الحركة فقط، بس بدون تفاصيل.
1. Current Frame (t)
-
2. Previous Frame (t-1)
=
3. Motion Mask

💡 تحليل النتيجة:
المربع الأبيض: هو المنطقة اللي تغيرت فيها البكسلات (الحركة).
اللون الأسود: هو الخلفية الثابتة (الشارع) اللي ما تغيرت.

Ways to Represent Motion Slide 09
Motion Representation Types
كيف بنمثل الحركة بالكمبيوتر؟
عشان الكمبيوتر يفهم الحركة ويخزنها، بنستخدم عدة طرق:

1. Binary Masks (أقنعة ثنائية): صورة فيها بس (أبيض وأسود) زي ما شفنا قبل شوي. بتجاوب بس: "في حركة هون ولا لأ".
2. Vectors (متجهات): (أهم وحدة) لكل بكسل، بنحدد اتجاه و مقدار الحركة. زي الأسهم اللي بالصورة (Optical Flow). ↗️
3. Trajectories (مسارات): رسم خط بيمثل "رحلة" الجسم من بداية الفيديو لنهايته. مفيد في تتبع اللاعبين أو السيارات (Tracking).
Motion Estimation (Block Matching) Slide 10
Motion Estimation Block Matching
كيف بنعرف "وين راحت" السيارة؟
عملية Motion Estimation هي محاولة لإيجاد "نسخة" من جزء معين بالصورة القديمة، داخل الصورة الجديدة.

أشهر طريقة: Block Matching
بدل ما ندور بكسل بكسل (كثير بطيء)، بنقسم الصورة لمربعات (Blocks).
مثلاً، بناخد مربع فيه "سيارة حمراء" بالصورة الأولى، وبندور عليه بالصورة الثانية بمنطقة قريبة.

المسافة اللي تحركها المربع بتعطينا Motion Vector (متجه الحركة). 📏📍
Motion Estimation in Action Slide 11
Motion Estimation Drone Example
مثال عملي (Drone)
هاذ مثال حقيقي لعملية Motion Estimation. الدرون (Drone) بتتحرك، والكاميرا بتصور. الكمبيوتر بحاول يلاحق الجسم المتحرك (الدرون) من فريم لفريم.

لاحظ: الخلفية كمان ممكن تتحرك إذا الكاميرا نفسها بتتحرك! عشان هيك الموضوع بكون أصعب من مجرد طرح صورتين.
What is a Motion Vector? Slide 12
Motion Vector Definition
شو هو "متجه الحركة" (MV)؟
ببساطة، هو سهم بحكيلك: "هاض المربع من الصورة وين راح؟".

Motion Vector (MV) = الإزاحة (Displacement) لمربع من البكسل (Block) بين فريم وفريم.

Example:
إذا المربع تحرك 5 خطوات يمين و 3 خطوات تحت.
MV = (Δx, Δy) = (5, 3)
Motion Vector Properties Slide 13
Motion Vector Computation
كيف بنحسبه؟
  • 🧱 بلكات (Blocks): بنحسبه لكل مربع (مثلاً 16x16 بكسل) مش لكل نقطة عشان يكون أسرع.
  • 🚗 حركة محلية (Local Motion): بيمثل حركة أجزاء محددة (سيارة، إيد بتلوح 👋).
  • 📦 مهم للضغط (Compression): بدل ما نبعث الصورة الجديدة كاملة، بنبعث بس الـ MV + الفروقات الصغيرة. (هيك Netflix بيشتغل!).
Global Motion Vector (GMV) Slide 14
Global Motion Vector
حركة الكاميرا vs حركة الأجسام
في نوعين من الحركة بالفيديو:

  1. 🚗 Local Motion: جسم لحاله بتحرك (سيارة، لاعب).
  2. 🌍 Global Motion (GMV): كل المشهد بتحرك لأن الكاميرا نفسها تحركت!

Global Motion Vector (GMV) هو المتجه اللي بيمثل حركة الكاميرا، والكل بكون بيلحقوا:
  • Pan: الكاميرا بتلف يمين/يسار (الكل بتحرك عكس الاتجاه).
  • Tilt: الكاميرا بتطلع فوق/تحت.
  • Zoom: الكاميرا بتقرب/بتبعد (الكل بكبر أو بصغر).
💡 NOTE: عشان نكشف الحركة "الحقيقية" لأي جسم، لازم أول شي نطرح (Subtract) حركة الكاميرا (GMV) من المشهد.
Why Estimate Motion? Slide 15
Why Estimate Motion
ليش وجعة الراس هاي كلها؟
مش بس عشان نلحق حرامي! معرفة الحركة بتفيدنا بـ:

  1. 🕵️‍♂️ تحليل السلوك (Behavior): فهم شو قاعد بصير بالفيديو (شخص بركض، سيارة بتخالف).
  2. 🔮 التوقع (Prediction): معرفة وين الجسم رح يكون بالفريم الجاي (مهم للسيارات الذكية).
  3. 💾 الضغط (Compression): أهم اشي! توفير حجم الفيديو بشكل خرافي عن طريق تسجيل الحركة بدل الصور الكاملة.
Efficient Video Compression Slide 16
Video Compression
كيف نضغط الفيديو؟
ملفات الفيديو ضخمة جداً! تخيل لو بدنا نخزن كل فريم كصورة كاملة، الهارد ديسك بتعبى بدقايق.

Motion Estimation هو الحل السحري المستخدم في MPEG, H.264, HEVC.

كيف بشتغل؟
  • بدل ما نخزن كل فريم كامل، بنخزن Keyframes (فريمات رئيسية كاملة).
  • للفريمات اللي بينهم، بنخزن بس Motion Difference / Delta Frames (الاختلافات والحركة).
💡 يعني: "الفريم الجاي هو زي الفريم الماضي بس حرك السيارة لليمين شوي". هيك وفرنا داتا كثير!
Object Tracking & Activity Recognition Slide 17
Object Tracking
ملاحقة الأجسام والأنشطة 🏃‍♂️
من خلال تقدير الحركة، بنقدر نتبع حركة الأشخاص، السيارات، أو أي شي بتحرك عبر الفريمات.

تطبيقات مهمة:
  • 📹 أنظمة المراقبة (Surveillance): كشف المتسللين أو تتبع شخص مشبوه.
  • تحليل الرياضة (Sports Analytics): تتبع اللاعبين والكرة لتحليل الأداء والخطط.
  • المدن الذكية (Smart Cities): مراقبة حركة المرور والازدحام.
Understanding Human Actions Slide 18
Human Actions
فهم الحركات البشرية 🙌
الصور الثابتة ما بتعطينا القصة كاملة. الحركة هي اللي بتفهمنا "شو قاعد بصير".

أمثلة:
  • 🗣️ لغة الإشارة (Sign Language): ترجمة حركات اليد لكلام.
  • 🚑 كشف السقوط (Fall Detection): مهم جداً لكبار السن، النظام بنبه إذا اكتشف حركة سقوط مفاجئة.
  • 🎮 AR/VR Control: التحكم بالألعاب والواقع الافتراضي بحركة الجسم.
"بدون حركة، السيستم بشوف صور منفصلة. مع الحركة، بفهم النية (Intent)."
Autonomous Driving & Robotics Slide 19
Autonomous Driving
السيارات ذاتية القيادة 🚗🤖
السيارة لازم تفهم محيطها عشان ما تعمل حوادث. تقدير الحركة أساسي لـ:

  • 🚶‍♂️ توقع المشاة (Pedestrian Prediction): "هاض الشخص رح يقطع الشارع ولا واقف؟".
  • 🚙 تتبع المركبات (Vehicle Tracking): معرفة سرعة واتجاه السيارات اللي حواليها.
  • 🌊 فهم تدفق المشهد (Scene Flow): فهم كيف العالم بتحرك بالنسبة للسيارة.
Other Applications Slide 20
Other Applications
تطبيقات أخرى 🌍✨
الموضوع ما بخلص هون! في مجالات ثانية بتعتمد عالحركة:

  • 🏥 التصوير الطبي (Medical Imaging): تحليل حركة القلب أو تدفق الدم.
  • 🎬 المؤثرات البصرية (VFX/AR): دمج شخصيات خيالية بفيديو حقيقي بشكل واقعي.
  • 🏗️ إعادة بناء 3D (3D Reconstruction): بناء مجسمات ثلاثية الأبعاد من فيديو.
  • 📷 تثبيت الفيديو (Stabilization): إلغاء الاهتزاز من تصوير التلفون.
Motion Estimation Techniques Slide 21
Motion Estimation Techniques
كيف بنحسب الحركة؟ 📏
في طريقتين رئيسيات لتقدير الحركة:

  1. 🔎 Pixel-based (Optical Flow):
    بتحسب متجه حركة لكل نقطة (Pixel) بالفريم.
    الميزة: دقيقة جداً. العيب: بطيئة جداً وحساباتها معقدة.

  2. 🧱 Block-based (Block Matching):
    بتقسم الصورة لمربعات (Blocks) وبتحسب متجه واحد لكل مربع.
    الميزة: أسرع بكثير ومستخدمة في كل برامج ضغط الفيديو.
📌 NOTE: تقنيات Block Matching هي الأكثر استخداماً، وأقدم وأبسط خوارزمية منها هي Exhaustive Block Matching (EBM).
Exhaustive Block Matching (EBM) Slide 22
Exhaustive Block Matching
البحث الشامل (Full Search / EBM) 🕵️‍♂️
هاي الطريقة بتعتمد مبدأ Full Search أو Brute Force.

الآلية: بناخد الـ Block من الفريم الحالي، وبنقارنه مع كل بلوك ممكن داخل منطقة البحث (Search Window) في الفريم السابق.

النتيجة:
  • الدقة (Accuracy): بتعطينا Best Match 100% لأننا جربنا كل الاحتمالات.
  • السرعة (Computation): مكلفة جداً وبطيئة (Computationally Expensive)، وما بتنفع للتطبيقات المباشرة (Real-time).
💡 ملاحظة: بنستخدم معادلة SAD (Sum of Absolute Differences) عشان نقيس الفرق بين البلوكات ونختار الأقل فرقاً.
Fast Search Algorithms Slide 23
Fast Search Algorithms
الحل الذكي: البحث السريع ⚡
بدل ما ندور في كل نقطة، خلينا ندور في نقاط محددة ونخمن وين الحركة راحت.

Fast Search بستخدم عدد قليل من النقاط (مثل الرسمة) عشان يوصل للحل بسرعة.

الفكرة:
افحص المركز وحواليه -> شوف وين أفضل تطابق -> انتقل لغاد وافحص كمان مرة. (زي لعبة "حامي بارد").
Challenges of Fast Search Slide 24
Challenges
مشاكل البحث السريع ⚠️
السرعة إلها ثمن! 💸

  1. 📉 دقة أقل (Local Minima): ممكن يخدعنا ويلاقي تطابق "مليح" بس مش "الأفضل" لأنه ما فحص كل مكان.
  2. 💡 تغير الإضاءة (Luminance Change): هاض أكبر كابوس!
    إذا الإضاءة تغيرت بالفيديو، قيم البكسلات رح تتغير، فالخوارزمية رح تفكر إنه "الجسم اختلف" وما رح تلاقيه، حتى لو هو نفسه!
The Solution? Slide 25
Solution
شو الحل لمشكلة الإضاءة؟ 💡🛠️
عشان نحل مشكلة تغير الإضاءة والبحث السريع، لازم ما نعتمد بس على "لون البكسل".

الحل المقترح:
لازم نلاقي Feature (ميزة) ثابتة ما بتتغير لما تتغير الإضاءة.
(يعني بدل ما أقول "دور على مربع لونه أحمر"، بقول "دور على مربع فيه زاوية حادة"، لأن الزاوية بتضل زاوية حتى لو الدنيا ليل!).
Use Edges as Features Slide 26
Edges as Features
ليش "الحواف" (Edges) هي الحل؟
الحواف (Edges) هي الملامح الهيكلية للصورة، وهي أقوى بكثير من الألوان.

السحر في الحواف:
  • 🛡️ مش حساسة للإضاءة: حافة الطاولة بتضل "خط مستقيم" سواء في ضوء قوي أو عتمة.
  • 🏗️ ثابتة هندسياً: بتعطينا شكل الجسم الحقيقي.

لهيك، بدل ما نقارن ألوان، بنقارن Edge Maps.
Finding the Matched Block Slide 27
Matching Blocks
تحليل الصورة: 0 vs 1 🔢
هاي الصورة بتشرح كيف الخوارزمية "بتفكر" لما تستخدم الحواف:

  • الرقم 1 (الأبيض): بيمثل الحواف (Edges) اللي رسمت الشكل الهندسي.
  • الرقم 0 (الأسود): الخلفية اللي ما بتهمنا.

شو قصة المربعات الحمراء؟ 🟥
هاي "أخطاء" أو بكسلات مفقودة في الفريم الثاني. لو بنقارن ألوان، كان فشل التطابق! بس لأننا بنقارن Structure (هيكل)، الخوارزمية لسا شايفة "الشكل" بوضوح، فبتعطينا Match ناجح!
Discarding Black Blocks Slide 28
Optimization
إرمي اللي ما بيلزمك! �️
الفكرة بسيطة: ليش أضيع وقت المعالج في مقارنة مربعات "سوداء" (فارغة)؟

الفرق بين الصورتين:
  • صورة (a): بلوك شبه فارغ (كله أسود 0). هاض ما فيه أي "Feature" مميزة، فبنعمله Discard (إهمال) فوراً.
  • صورة (b): بلوك مليان تفاصيل وحواف (1s). هاض بنحتفظ فيه وبستخدمه للبحث عن الحركة.
💡 الخلاصة: "اذا ما فيه حواف، ما فيه داعي نتعب حالنا بالبحث عنه!"
Video Stabilization Slide 29
Video Stabilization
ختامها مسك: تثبيت الفيديو (Video Stabilization)
كيف تلفونك بحول فيديو "مهزوز" لفيديو "ناعم" وثابت (Smooth & Steady)؟

السر كله في Global Motion Vectors (GMVs).
بما إن الـ GMV بقيس حركة الكاميرا نفسها (الاهتزاز)، الخوارزمية بتعمل خطوتين:
  1. 🕵️‍♂️ كشف الحركة: بتحسب الـ GMV (كم بكسل تحركت الكاميرا وبأي اتجاه؟).
  2. 🛠️ تعويض الحركة (Motion Compensation): بتحرك الفريم عكس اتجاه الاهتزاز بالضبط.

📝 مثال عملي:
تخيل إنك بتصور وانت بتركض 🏃‍♂️، وايدك رجفت وزاحت الكاميرا لليمين ➡️ 10px.
البرنامج فوراً بمسك الفريم وبزيحه لليسار ⬅️ 10px.
النتيجة: +10 AND -10 بيلغوا بعض، والمشهد بضل ثابت بمكانه.