Узнать, где находится Kinect в трехмерном пространстве, для приложения дополненной реальности - PullRequest
1 голос
/ 11 ноября 2011

Мы создаем приложение с дополненной реальностью, используя kinect.

Это имеет некоторые проблемы:

scene diagram

У нас будет куча объектов, лежащих на самолете. К счастью, Kinect может дать нам вектор нормали самолета. Нам нужно знать, где установить камеру OpenGL (в идеале, именно там находится Kinect). Для этого нам нужно знать, где находится Kinect в трехмерном пространстве, потому что эти два местоположения должны совпадать.

Если вам нужны дополнительные разъяснения, пожалуйста, сообщите мне. Я понимаю, что мое объяснение может быть не таким ясным, как должно быть.

1 Ответ

1 голос
/ 11 ноября 2011

Предположим, Kinect в начале координат. Вы также знаете расстояние точки (на плоскости) от Kinect - это то, что Kinect дает вам как расстояние от этой точки. Ты тоже нормальный знаешь. Поэтому все, что вам нужно сделать, это найти уравнение плоскости для плоскости, перевести его в матрицу и инвертировать его.

Уравнение плоскости, заданное точкой и вектором нормалей, равно

n·(r-r_0) = 0 ; r_0 = 0
n·r = 0

Мы знаем г как

r = (0, 0, -distance_at(kinect_depth_image_width/2, kinect_depth_image_height/2))

Теперь помните, что плоскость может быть выражена как

p(s,t) = r + u * s + v * t

где u, v - базовые векторы плоскости. Таким образом, мы можем переписать это как матрицу

u_x v_x n_x r_x
u_y v_y n_y r_y
u_z v_z n_z r_z
  0   0   0   1

u и v можно определить, выбрав произвольные векторы «вверх» и «вправо», я предлагаю вам использовать Y = (0,1,0) и X = (1,0,0) и выполнить ортогонализация против вашего известного нормального n, в результате чего u и v.

Инвертируя эту матрицу, вы получаете преобразование из нулевой точки на плоскости в кинекту.

...