Yolo فيجن شنتشن
شنتشن
انضم الآن
مسرد المصطلحات

التدفق البصري (Optical Flow)

استكشف أساسيات التدفق البصري في الرؤية الحاسوبية. تعرف على كيفية قيام متجهات الحركة بتحسين فهم الفيديو وتعزيز التتبع في Ultralytics .

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

الآليات الأساسية للتدفق البصري

يعتمد حساب التدفق البصري عمومًا على افتراض ثبات السطوع، الذي يفترض أن كثافة البكسل على كائن ما تظل ثابتة من إطار إلى آخر، حتى أثناء حركته. تستخدم الخوارزميات هذا المبدأ لحل متجهات الحركة باستخدام نهجين أساسيين:

  • التدفق البصري المتفرق: تحسب هذه الطريقة متجه الحركة لمجموعة فرعية محددة من السمات المميزة، مثل الزوايا أو الحواف، التي يتم اكتشافها عبر استخراج السمات. الخوارزميات مثل طريقة Lucas-Kanade فعالة حسابيًا ومثالية لمهام الاستدلال في الوقت الفعلي حيث يكفي تتبع نقاط اهتمام محددة.
  • التدفق البصري الكثيف: يحسب هذا النهج متجه الحركة لكل بكسل في الإطار. على الرغم من أنه أكثر كثافة من الناحية الحسابية ، إلا أنه يوفر خريطة حركة شاملة ضرورية للمهام الدقيقة مثل تقسيم الصور والتحليل الهيكلي. غالبًا ما تتفوق بنى التعلم العميق الحديثة على الأساليب الرياضية التقليدية في تقدير التدفق الكثيف من خلال تعلم أنماط الحركة المعقدة من مجموعات البيانات الكبيرة .

التدفق البصري مقابل تتبع الكائنات

على الرغم من استخدامهما معًا في كثير من الأحيان، من الضروري التمييز بين التدفق البصري وتتبع الكائنات. التدفق البصري هو عملية منخفضة المستوى تصف حركة البكسل الفورية؛ ولا يفهم بطبيعته هوية الكائن أو استمراريته.

في المقابل، يعد تتبع الكائنات مهمة عالية المستوى تحدد مواقع كيانات معينة وتخصص لها معرفًا ثابتًا على مدار الوقت. عادةً ما تقوم أجهزة التتبع المتقدمة، مثل تلك المدمجة في Ultralytics بالكشف عن الكائنات للعثور عليها ثم تستخدم إشارات الحركة — التي تُستمد أحيانًا من التدفق البصري — لربط عمليات الكشف عبر الإطارات. يُجيب التدفق البصري على سؤال "ما مدى سرعة حركة هذه البكسلات في الوقت الحالي"، بينما يُجيب التتبع على سؤال "أين ذهبت السيارة رقم 5؟"

تطبيقات واقعية

تتيح القدرة على تقدير الحركة على مستوى البكسل استخدام مجموعة واسعة من التقنيات المتطورة:

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

مثال على التنفيذ

يوضح المثال التالي كيفية حساب التدفق البصري الكثيف باستخدام OpenCV ، وهي أداة قياسية في نظام الرؤية الحاسوبية . يستخدم هذا المقتطف خوارزمية Farneback لإنشاء خريطة تدفق بين إطارين متتاليين.

import cv2
import numpy as np

# Simulate two consecutive frames (replace with actual image paths)
frame1 = np.zeros((100, 100, 3), dtype=np.uint8)
frame2 = np.zeros((100, 100, 3), dtype=np.uint8)
cv2.rectangle(frame1, (20, 20), (40, 40), (255, 255, 255), -1)  # Object at pos 1
cv2.rectangle(frame2, (25, 25), (45, 45), (255, 255, 255), -1)  # Object moved

# Convert to grayscale for flow calculation
prvs = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY)
next = cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY)

# Calculate dense optical flow
flow = cv2.calcOpticalFlowFarneback(prvs, next, None, 0.5, 3, 15, 3, 5, 1.2, 0)

# Compute magnitude and angle of 2D vectors
mag, ang = cv2.cartToPolar(flow[..., 0], flow[..., 1])

print(f"Max motion detected: {np.max(mag):.2f} pixels")

بالنسبة للتطبيقات عالية المستوى التي تتطلب استمرارية الكائنات بدلاً من حركة البكسل الخام، يجب على المستخدمين النظر في أوضاع التتبع المتاحة في Ultralytics YOLO11 و YOLO26. تعمل هذه النماذج على تجريد تعقيد تحليل الحركة ، وتوفر معرفات كائنات قوية ومسارات جاهزة للاستخدام لمهام تتراوح من مراقبة حركة المرور إلى تحليلات البيع بالتجزئة.

انضم إلى مجتمع Ultralytics

انضم إلى مستقبل الذكاء الاصطناعي. تواصل وتعاون وانمو مع المبتكرين العالميين

انضم الآن