Epipolar Geometry
تربط الهندسة الإبيبولارية بين منظورين لمشهد، فتحصر مطابقة كل نقطة في خط ضمن الصورة الأخرى، وهي أساس العمق بالاستريو ورسم الخرائط ثلاثية الأبعاد.
في الرؤية الحاسوبية، تصف الهندسة الإبيبولارية العلاقة الهندسية بين منظوري كاميرتين للمشهد نفسه. يقابل البكسل في إحدى الصورتين شعاعًا من النقاط المحتملة في الفضاء ثلاثي الأبعاد، ويُسقَط هذا الشعاع في الصورة الثانية على هيئة خط يُسمّى الخط الإبيبولاري، حيث يجب أن تقع النقطة المطابقة للبكسل. يعتمد هذا القيد على المعلمات الداخلية للكاميرتين ووضعهما النسبي فقط، بصرف النظر عن بنية المشهد، ويحوّل البحث عن المطابقة من الصورة بأكملها إلى البحث على خط واحد. وهذا ما يجعل الهندسة الإبيبولارية أساس الرؤية المجسمة، واستخراج البنية من الحركة، وSLAM البصري الذي يوجّه الروبوتات وسماعات الرأس. ويُعدّ كتاب هندسة الرؤية متعددة المناظير في الرؤية الحاسوبية لريتشارد هارتلي وأندرو زيسرمان المرجع القياسي.
الإبيبولات والخطوط الإبيبولارية والمستوى الإبيبولاري#
يحدّد مركزا الكاميرتين وأي نقطة في المشهد مستوىً، هو المستوى الإبيبولاري. والخط الواصل بين مركزي الكاميرتين هو خط الأساس، ويخترق كل مستوى من مستويي الصورتين عند الإبيبول، أي صورة مركز الكاميرا الأخرى، الذي قد يقع خارج الإطار أو عند اللانهاية. يقطع كل مستوى إبيبولاري كل صورة على هيئة خط إبيبولاري، يُسمى أيضًا الخط الإبيوليني، لذا تمر جميع الخطوط الإبيبولارية في الصورة بإبيبولها. وعندما تنزلق نقطة المشهد على شعاع رؤية الكاميرا الأولى، ينزلق إسقاطها في الصورة الثانية على طول الخط الإبيبولاري.
المصفوفتان الأساسية والجوهرية#
تلتقط المصفوفة الأساسية F، وهي مصفوفة 3 × 3 من الرتبة الثانية، العلاقة بأكملها في إحداثيات البكسل. وبالنسبة إلى النقطتين المتناظرتين x وx′ المكتوبتين بصيغة متجانسة (x, y, 1)، يكون القيد الإبيبولاري x′ᵀ F x = 0، ويعطي حاصل الضرب F x معاملات الخط الإبيبولاري للنقطة x في الصورة الثانية. عند معايرة الكاميرتين عبر معايرة الكاميرا، تعبّر المصفوفة الجوهرية E = K′ᵀ F K عن القيد نفسه بإحداثيات مطبّعة، وتتحلل إلى الدوران النسبي R والإزاحة t على النحو E = [t]ₓ R. قدّم كريستوفر لونغيه-هيغينز المصفوفة الجوهرية وخوارزمية النقاط الثماني عام 1981، وطوّر أوليفييه فوغرا وريتشارد هارتلي وكوانغ توان لونغ المصفوفة الأساسية غير المعايرة في أوائل التسعينيات. ولأن E تحدد اتجاه t فقط، لا يكشف منظورا صورتين وحدهما شكل المشهد إلا حتى مقياس مجهول؛ ويحدد خط أساس معروف أو حجم جسم معروف ذلك المقياس.
يُقدَّر كلا المصفوفتين من النقاط المفتاحية المتطابقة، مثل سمات SIFT، باستخدام مقدِّر متين مثل RANSAC يلائم المصفوفة مرارًا بعينة دنيا من المطابقات، ويحتفظ بالنموذج الذي تتفق معه أكبر مجموعة من المطابقات. ينشئ هذا المثال منظورين لـ100 نقطة، ويستبدل 20 مطابقة بمطابقات عشوائية خاطئة، ويقدّر F باستخدام إصدار MAGSAC من RANSAC في OpenCV:
import cv2
import numpy as np
rng = np.random.default_rng(0)
K = np.array([[800.0, 0, 320], [0, 800.0, 240], [0, 0, 1]]) # intrinsics shared by both cameras
# 100 scene points seen by two cameras; the second sits 0.5 m to the right, turned 5 degrees
points = rng.uniform([-2, -1, 4], [2, 1, 8], (100, 3))
rvec = np.array([0.0, np.radians(5), 0.0])
tvec = -cv2.Rodrigues(rvec)[0] @ np.array([0.5, 0.0, 0.0])
x1 = cv2.projectPoints(points, np.zeros(3), np.zeros(3), K, None)[0].reshape(-1, 2) + rng.normal(0, 0.5, (100, 2))
x2 = cv2.projectPoints(points, rvec, tvec, K, None)[0].reshape(-1, 2) + rng.normal(0, 0.5, (100, 2))
x2[:20] = rng.uniform([0, 0], [640, 480], (20, 2)) # replace 20 matches with wrong ones
# Robust estimation keeps the matches that agree with a single fundamental matrix
F, inliers = cv2.findFundamentalMat(x1, x2, cv2.USAC_MAGSAC, 1.0)
kept = inliers.ravel() == 1
print(f"Kept {kept[20:].sum()} of 80 true matches and {kept[:20].sum()} of 20 wrong ones")
# Each point in image 1 defines a line a*x + b*y + c = 0 in image 2 that its match must lie on
lines = cv2.computeCorrespondEpilines(x1, 1, F).reshape(-1, 3)
dist = np.abs((lines[:, :2] * x2).sum(axis=1) + lines[:, 2])
print(f"Median distance to epipolar line: {np.median(dist[20:]):.2f} px (true), {np.median(dist[:20]):.0f} px (wrong)")
print(f"Wrong match that survived: {dist[:20][kept[:20]].round(2)} px from its line")يحتفظ بـ75 من أصل 80 مطابقة صحيحة، ويرفض 19 من أصل 20 مطابقة خاطئة. تبعد المطابقات الصحيحة عن خطوطها الإبيبولارية مسافة وسيطية قدرها 0.43 بكسل، وهو ما تحدده ضوضاء نصف البكسل، بينما تبلغ المسافة للمطابقات الخاطئة 144 بكسل. وتصادف أن المطابقة الخاطئة الوحيدة التي نجت تقع على بُعد 0.61 بكسل من خطها، لأن القيد يحصر المطابقة في خط ولا يمكن إلا للمظهر تحديد النقطة الصحيحة على امتداده.
لا يملك الدوران المحض خط أساس، ويلائم مستوى واحد كثيرًا من المصفوفات الأساسية بالتساوي؛ لذا تُعالَج الحالتان باستخدام تحويل تجانسي، وهو تحويل 3 × 3 بين منظوري مستوى. يهيئ ORB-SLAM خريطته عبر ملاءمة تحويل تجانسي ومصفوفة أساسية بالتوازي، ثم يحتفظ بالنموذج الأفضل تفسيرًا للمطابقات.
التصحيح والتفاوت والعمق#
يشوّه التصحيح زوجًا مجسمًا من الصور بحيث تصبح خطوطه الإبيبولارية أفقية ومتراصفة، فتقع كل مطابقة في صف الصورة نفسه. ثم تبحث خوارزميات المطابقة المجسمة في كل صف، ويعطي الإزاحة العمودية بين المطابقات، أي التفاوت d، العمق Z = f × B / d، حيث f البعد البؤري وB خط الأساس، وهذه هي آلية إنتاج تجهيزات الرؤية المجسمة لخرائط تقدير العمق. يقيّم معيار KITTI للرؤية المجسمة خوارزميات المطابقة هذه في مشاهد مصححة من القيادة الذاتية.
تطبيقات تتجاوز الرؤية المجسمة#
في إعادة البناء ثلاثي الأبعاد، يتحقق COLMAP من كل زوج من الصور عبر ملاءمة المصفوفات الأساسية أو الجوهرية أو مصفوفات التجانس، ويستبعد الأزواج والمطابقات التي لا تحظى بدعم هندسي كافٍ. تستخدم مسارات عمل مطابقة الصور الفحص نفسه لرفض المراسلات الزائفة، ويتبع تسجيل الصور فرع مصفوفة التجانس المذكور أعلاه عندما يكون المشهد مستويًا أو لا تفعل الكاميرا سوى الدوران، كما في تركيب الصور البانورامية. وبين إطارين تلتقطهما كاميرا متحركة، لا ينطبق القيد الإبيبولاري إلا على الأسطح الثابتة، لذا تكشف متجهات التدفق البصري التي تنتهكه عن أجسام تتحرك بصورة مستقلة. يتيح التقاط وضعية الإنسان باستخدام كاميرات متعددة مطابقة الشخص نفسه عبر المناظير استنادًا إلى مدى قرب مفاصله من الخطوط الإبيبولارية للمناظير الأخرى، قبل تثليث هيكل عظمي ثلاثي الأبعاد، فيما يوفّر نموذج تقدير الوضعية من Ultralytics YOLO26 نموذج تقدير الوضعية 17 نقطة رئيسية من نقاط الجسم وفق COCO لكل شخص في كل منظور.










