3D оцінка положення за допомогою 2D камери


9

У мене камера (iPhone), у мене на зображенні є об’єкт 3D управління, який дуже добре знаю його властивості. (Мій об’єкт управління). У русі також є вторинний об’єкт. Кінцева мета - встановити 3D-траєкторію об'єкта, що рухається, за певний проміжок часу. (Відстеження)

Мені подобається питати, чи можу я дізнатися?

  • Відстань телефону до об'єкта управління (заради обговорення, припустимо, що камера знаходиться на певній висоті, і певна відстань не відома жодної з них, але камера перпендикулярна відомій поверхні)

  • Вторинний об'єкт, де я можу знайти об'єкт у кожному наступному кадрі. Моя мета - оцінити її траєкторію 3D, як я вже вказав вище.

Питання про бонус: ми можемо зробити систему такою, щоб відстань телефонів до об'єкта управління можна було встановити (хоча це не є кращим), чи допоможе це мені з другою точкою?


Ви знайомі з літературою в цій галузі? Якщо ні, то я можу порекомендувати деякі документи, але попередити: математика займається.
Емре

@emre, було б чудово, якби ви могли вказати кілька покажчиків. Математика не проблема, ми любимо математику.
Ктунсер


@emre Я швидко поглянув на оглядовий документ. Це більше для відстеження, я можу легко відстежувати об’єкт, це не проблема. Я можу зафіксувати, в якому пікселі знаходиться об’єкт. Питання в тому, де об’єкт знаходиться в 3D-просторі. Чи можливо це? В основному, у мене в 3D-просторі є ще один об'єкт, який я знаю, властивості якого я можу використовувати як орієнтир, але це все.
Ktuncer

Вибачте, неправильний папір. Можливо, ви можете адаптувати 3D-відстеження траєкторій на основі зору для невідомих середовищ [PDF]? Вони використовують стереокамеру; це можливість для вас?
Емре

Відповіді:


15

Якщо об'єкт має 6 відомих точок (відомі тривимірні координати, і ), ви можете обчислити розташування камери, пов'язане з системою координат об'єктів.X,YZ

Спочатку кілька основ.

Однорідна координата - це векторне представлення евклідової координати до якої ми додали так званий коефіцієнт масштабу такий, що однорідна координата . У власних обчисленнях намагайтеся зберегти якомога частіше (це означає, що ви "нормалізуєте" однорідну координату, поділивши її з її останнім елементом: ). Ми також можемо використовувати однорідну презентацію для 2D точок, таких що (пам'ятайте, що ці і(X,Y,Z)ωX=ω[XYZ1]Tω=1XXωx=ω[XY1]ω,X,YZрізні для кожної точки, будь то 2D або 3D точка). Однорідне подання координат полегшує математику.

Матриця камери - це матриця проекції від 3D-світу до датчика зображення:3×4

x=PX

Де - точка датчика зображення (з піксельними одиницями), а - проектована 3D-точка (скажемо, що вона має міліметри як свої одиниці).xX

Ми пам’ятаємо, що перехресний добуток між двома 3-векторами можна визначити як множення матричного вектора таким чином, що:

v×u=(v)xu=[0v3v2v30v1v2v10]u

Корисно також зазначити, що перехресне виробництво .v×v=0

Тепер спробуємо розв’язати матрицю проекції з попередніх рівнянь. Дозволяє помножити рівняння проекції з лівої сторони на s перехресну матрицю продукту:Px

(x)xx=(x)xPX=0

Ага! Результат повинен бути нульовим вектором. Якщо ми зараз відкриємо рівняння, отримаємо:

[0wyw0xyx0][P1,1P1,2P1,3P1,4P2,1P2,2P2,3P2,4P3,1P3,2P3,3P3,4]X=[P3,4WyP2,1XwP2,2YwP2,4Ww+P3,1XyP2,3Zw+P3,2Yy+P3,3ZyP1,4Ww+P1,1XwP3,4Wx+P1,2YwP3,1Xx+P1,3ZwP3,2YxP3,3ZxP2,4Wx+P2,1XxP1,4WyP1,1Xy+P2,2YxP1,2Yy+P2,3ZxP1,3Zy]=0

Маючи трохи рефакторингу, ми можемо отримати проекційну матрицю поза матриці:P

[0000XwYwZwWwXyYyZyWyXwYwZwWw0000XxYxZxWxXyYyZyWyXxYxZxWx0000][P1P2P3]=0

Де є транспонована : го рядка матриці камери . Останній рядок попереднього (великого) матричного рівняння є лінійним поєднанням перших двох рядків, тому він не приносить додаткової інформації, і його можна залишати поза увагою.PnnP

Невелика пауза, щоб ми могли зібрати свої труднощі. Зауважте, що попереднє матричне рівняння має бути сформовано для кожного відомого 3D-> 2D відповідності (їх повинно бути принаймні 6).

Тепер для кожної точкової відповідності обчисліть перші два ряди матриці вище, матриці один на одного і отримаєте нову матрицю для якої2×12A

A[P1P2P3]=0

Оскільки у нас є 12 невідомих і (принаймні) 12 рівнянь, це можна вирішити. Проблема полягає лише в тому, що ми не хочемо мати тривіальної відповіді, де

[P1P2P3]=0

На щастя, ми можемо використовувати сингулярне розкладання значення (SVD) для примушування

[P1P2P3]=1

Отже, щоб розв’язати рівняння, обчисліть SVD матриці і виберіть сингулярний вектор, що відповідає найменшому власному значенню. Цей вектор є нульовим вектором матриці A, а також рішенням для матриці камери . Просто помістити значення і форма .AP[P1P2P3]TP

Тепер ви хотіли знати відстань до об’єкта. визначається як:P

P=K[RRC]

де - розташування камери відносно походження об'єктів. Це можна вирішити з шляхом обчислення нульового вектора s.CPP

(Хартлі, Зісерман - Геометрія декількох поглядів у комп'ютерному зорі)

Нарешті, обчислюючи розташування камер для двох кадрів, ви можете обчислити невідомі місця розташування об'єктів (або розташування деяких точок об'єкта), вирішивши два рівняння для :X

x1=P1Xx2=P2X

Це приблизно так само, як ми вирішили матриці камери:

(x1)xP1X=0(x2)xP2X=0

І так далі.


Чи правильно сказати, що ваш спосіб обчислити 3D-положення камери еквівалентний OpenCV soluPnp? docs.opencv.org/2.4/modules/calib3d/doc/… (шукайте на сторінціPrePPP на сторінці. Я не можу вставити URL-адресу з #)
gregoiregentil
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.