С позой между двумя изображениями, как вы проецируете точку из одной сцены в другую? - PullRequest
2 голосов
/ 11 апреля 2011

Если у вас есть полные относительные трехмерные значения двух изображений, которые смотрят на одну и ту же сцену (относительные x, y, z), вместе с внешними / внутренними параметрами между ними, как вы проецируете точки из одной сцены вдругая сцена, в opencv?

Ответы [ 3 ]

5 голосов
/ 11 апреля 2011

Вы не можете сделать это вообще. Существует бесконечное количество трехмерных точек (линия в 3d), которые отображаются на одну точку в пространстве изображения, на другом изображении эта линия будет отображаться не на одну точку, а на линию (см. википедия). статья по эпиполярной геометрии ). Вы можете вычислить линию, на которой должна быть точка, с помощью фундаментальной матрицы .

Если у вас есть карта глубины, перепроектируйте точку в 3D - используя уравнения в верхней части страницы opencv по калибровке камеры , особенно эту (это единственное, что вам нужно):
Camera equations
u и v - ваши пиксельные координаты, первая матрица - это матрица вашей камеры (для изображения, которое вы смотрите в данный момент), вторая - это матрица, содержащая внешние параметры, вы знаете Z (из вашей карты глубины), X и Y это те, которые вы ищете - вы можете решить для этих параметров, а затем использовать то же уравнение, чтобы спроецировать точку на другую камеру. Вы, вероятно, можете использовать функцию PerspectiveTransform из opencv, чтобы выполнить эту работу за вас, однако я не могу сказать вам из головы, как построить матрицу проекции.

2 голосов
/ 12 апреля 2011

Пусть внешние параметры будут R и t , так что камера 1 будет [ I | 0], а камера 2 - [ R | т].Поэтому все, что вам нужно сделать, это повернуть и перевести облако точек 1 с R и t , чтобы оно было в той же системе координат, что и облако точек 2.

1 голос
/ 20 апреля 2011

Пусть две камеры имеют проекционные матрицы

P1 = K1 [I |0]

P2 = K2 [R |t]

и пусть глубина данной точки x1 (однородные координаты пикселей) на первой камере равна Z, отображение на вторую камеру равно

x2 = K2 * R * обратныйK1) * x1 + K2 * t / Z

Нет функции OpenCV для этого.Если относительное движение камер является чисто вращательным, отображение становится гомографией, поэтому вы можете использовать функцию PerspectiveTransform.

(Ki = [fxi 0 cxi; 0 fyi cyi; 0 0 1])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...