Калібрована камера / модель штифтового отвору камери та розробка 3d-позиції


10

У мене відкалібрована камера і є внутрішні параметри. У мене також є зовнішні параметри відносно точки (світового походження) на площинній поверхні в реальному світі. Цей момент я встановив як початок у реальних координатах [0,0,0] з нормою [0,0,1].

З цих зовнішніх параметрів я можу визначити положення та обертання камери у світових площинах 3d координат, використовуючи це тут: http://en.wikipedia.org/wiki/Camera_resectioning

Тепер у мене є друга точка, яку я витягнув координати зображень для [x, y]. Як мені тепер дістати 3d положення цієї точки у світовій системі координат?

Я думаю, що інтуїція тут полягає в тому, що я повинен простежити промінь, який йде від оптичного центру камери (для якого я зараз маю положення 3D, як описано вище), через площину зображення [x, y] камери, а потім через мою площину реального світу, яку я визначив у верхній частині.

Тепер я можу перетинати світовий координатний 3d-промінь з площиною, оскільки я знаю нормальну, і вказувати на цій площині. Що я не отримую - це те, як я знаходжу 3d-положення та напрямок, коли він залишає площину зображення через піксель. Мене бентежить перетворення через різні системи координат.


Перевірте цю відповідь, може допомогти. Якщо ви думаєте, що все може / може бути закінчене, просто скажіть мені. dsp.stackexchange.com/a/2737/1473
Jav_Rock

Відповіді:


6

Якщо у вас є зовнішні засоби, то це дуже просто. Екстерсинація - це те саме, що мати "позу перед камерою" і те саме, що мати гомографію. Перевірте цю публікацію в stackoverflow.

У вас є екстринсики, які також називають позою камери, яка описується як переклад і поворот:

Pose=[R|t]=[R11R12R13txR21R22R23tyR31R32R33tz]

Отримати гомографію з Pose можна таким чином:

H=1tz[R1xR2xtxR1yR2ytyR1zR2ztz]

Тоді ви можете спроектувати свої 2D точки у відповідні 3D точки, помноживши Гомографію на точки:

p2D=[xy1] додати z=1 щоб зробити їх однорідними

p3D=Hp2D

p=p/p(z) Нормалізуйте бали


що ви маєте на увазі під p (z) тут?
Белал Хомейдан

3

У вас є два варіанти, використовуйте назад проекцію або проекцію між двома площинами (гомографія).

Задній проекцією ви берете псевдооборотну матрицю камери та помножуєте результат за допомогою однорідного подання точки зображення:P

P=K[RRC]Xreprojected=P+x

CXV=ω[XYZ1]Tω=1

u=XreprojectedCv=uuL(t)=C+tv

Π=[π1π2π3π4]T,π1X+π2Y+π3Z+π4=0L(t)=Πt

3×3H

Xplane=[XY01]Tx=PXplane=H[XY1]T

x

Xplane=H1x

H

H=R+1dTNT

dT=RC


2

Ви не можете знати 3d положення другої точки. Це може бути будь-яка точка на промені від вашого центру камери до нескінченності.

Ви можете зробити наступне:

  • Створіть заздалегідь визначений 3d простір, який буде нагадувати реальну життєву сцену
  • Отримайте більше точок зображень з іншого кута, використовуючи перетин променів під різними кутами, ви можете отримати апроксимацію 3d-точки.

Зачекайся. Я можу знайти 3d світову точку, що 3d промінь, безумовно, перетинає площинну поверхню? Як я знаю, 3d координату світу і 3-й нормальний світ цієї площини ..... 3d точку, яку я намагаюся знайти, це точка, яку вона перетинає цю площинну поверхню !! (Вибачте, я вважаю, що моє пояснення було недостатньо добре)
Гепард,

Що ви маєте на увазі під площинною поверхнею? Площина зображення, або площина координат нульового світу? У випадку останнього ви можете обчислити перехрестя, але це означає, що ваша 3d-сцена не 3d, а 2d :) (адже це площина).
Geerten

Так вибачте, що мені просто не прийшло в голову. Я розумію, що ви говорите, це просто не має для мене візуального сенсу. Так, так, моя сцена є насправді "2d", тому що у мене площина зображення і у мене реальна площина світу, на якій лежить реальне світове походження [0,0,0] і має реальний світ нормальним [0,0, 1], тому кожна точка, що лежить на цій площині реального світу, має вигляд [x, y, 0]. Я знаю, що можу обчислити перетин, хоча ax + по + cz + d = 0, але це те, з чим я маю проблеми. (Продовження в наступному коментарі)
Гепард

У мене є промінь, який починається в моєму центрі / джерелі камери, для якого я маю реальний світ [x, y, z] і справжній світ нормальний [nx, ny, nz]. Мені потрібно запустити промінь з цієї точки, який перетинає площину зображення на [u, v], а потім перетинає площину реального світу в [x, y, 0] (саме це x, y я хочу отримати). З чим у мене виникають проблеми - це перший біт, перетин площини зображення. Я не бачу, як я це роблю?
Гепард

Ви можете подивитися: en.wikipedia.org/wiki/Line-plane_intersection
Geerten
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.