Предположим, 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.
Инвертируя эту матрицу, вы получаете преобразование из нулевой точки на плоскости в кинекту.