В основном алгоритм POSIT оценивает положение объекта относительно камеры по крайней мере из четырех неплоских соответствующих точек. С другой стороны, проектор можно рассматривать как камеру, поэтому, если вы идентифицируете известные точки реального объекта на проецируемом изображении, известное фокусное расстояние проекции, можно рассчитать относительное положение.
Итак, что вы должны сделать, это что-то вроде:
Укажите не менее четырех точек на каком-либо объекте, расположенном перед проектором. Вы можете рассчитать координаты точек, используя kinect.
Затем вы должны идентифицировать эти точки на проецируемом изображении в системе координат изображения в том же порядке, что и 3d-точки.
Чем вы можете использовать функцию cvPosit из OpenCV, которая будет вычислять положение объекта относительно камеры.
Если для некоторого объекта в трехмерном пространстве, которое вы измеряете с помощью kinect, вы можете рассчитать координаты изображения, применяя преобразование, вычисленное с помощью cvPOSIT.
Могут быть определенные условия, которые должны выполняться точками, используемыми алгоритмом, поэтому
пожалуйста, смотрите следующее для более глубокого объяснения ПОЗИТА:
http://www.cfar.umd.edu/~daniel/daniel_papersfordownload/Pose25Lines.pdf
Ниже приведена ссылка на документацию, касающуюся opencv posit:
http://opencv.willowgarage.com/documentation/camera_calibration_and_3d_reconstruction.html#posit
http://opencv.willowgarage.com/documentation/camera_calibration_and_3d_reconstruction.html#createpositobject
http://opencv.willowgarage.com/documentation/camera_calibration_and_3d_reconstruction.html#releasepositobject
Шаг 4 уточнения:
Цитата из оригинальной бумаги ПОЗИТ:
«Алгоритм POSIT находит вектор перевода и матрицу преобразования, которые преобразуют объект в систему координат камеры, так что его характерные точки падают на линии
прицела изображения точки "
Предположим, что у нас есть n 3d точек (kPoints) в системе координат Kinect, у нас есть Поворот (r [3] [3]) и Перевод (t [3]) из POSIT, фокусное расстояние плоскости изображения проектора и наконец, мы знаем координаты первой трехмерной точки (kOrigin), которую мы использовали с POSIT.
Затем нам нужно перевести наши точки в систему координат POSIT:
kPoints[i] = kPoints[i] - kOrigin;
kPoints[i] = Rotate(kPoints[i], r);
kPoints[i] = kPoints[i] + t;
imagePoint[i].x = focalLength * kPoints[i].x/kPoints[i].z
imagePoint[i].y = focalLength * kPoints[i].y/kPoints[i].z