سؤال

لدي صورة معروضة على الشاشة غير مصممة عبر cvinitundistortmap & cvremap (بعد معايرة الكاميرا) ، وينقر المستخدم على ميزة في الصورة. لذلك لدي إحداثيات البيكسل (U ، V) للميزة ، ولدي أيضًا المصفوفة الجوهرية ومصفوفة التشويه.

ما أبحث عنه هو معادلة الخط ثلاثي الأبعاد في إحداثيات الكاميرا/العالم الحقيقي التي يجب أن تكمن عليها الميزة التي نقرها المستخدم. لدي بالفعل المسافة العمودية بين مستوى صورة الكاميرا والميزة ، لذلك يمكنني الجمع بين ذلك مع المعادلة المذكورة أعلاه لإعطائي إحداثيات (X ، Y ، Z) للميزة في الفضاء.

تبدو سهلة (مصفوفة جوهرية عكسية أو شيء من هذا القبيل؟) ولكن لا يمكنني العثور على إرشادات خطوة بخطوة في أي مكان. C ++ أو C# رمز المفضل.

هل كانت مفيدة؟

المحلول

هذا سؤال قديم بعض الشيء ولكنه قد لا يزال مفيدًا لشخص ما. جميع الخطوط تمر عبر النقطة (0،0،0) ، هكذا:

line.x0 = 0 ؛ line.y0 = 0 ؛ line.z0 = 0 ؛

ناقل الاتجاه هو كما يلي: line.a = (u/fx) - (cx/fx) ؛ line.b = (v/fy) - (cy/fy) ؛ line.c = 1 ؛

CX ، CY ، FX ، FY هي معلمات من مصفوفة الكاميرا. يتم شرح المعادلات في كتاب "تعلم OpenCV".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top