Как можно использовать алгоритм положения для калибровки проектора и камеры? - PullRequest
2 голосов
/ 24 февраля 2012

Я пытаюсь откалибровать свой kinect на проектор. Я прочитал несколько статей из исследования Microsoft о том, как они это делают.

четыре точки должны быть правильно определены как камерами глубины, так и находится в проекторе изображения, после чего мы используем алгоритм POSIT [6], чтобы найти положение и ориентацию проектора. это Процесс требует фокусное расстояние и центр проекции проектор.

(это даст положение проектора)

Но я действительно не знаком с алгоритмом положения и, конечно, не с тем, как он используется здесь. Результатом алгоритма Posit является вектор трансляции и матрица вращения. Теперь мой вопрос: как это можно использовать для взаимодействия?

Например, если я отслеживаю руку с помощью kinect, я получаю некоторые координаты (x, y). Как я могу использовать упомянутую матрицу перемещения и поворота, чтобы найти соответствующие (x, y) координаты в проекции?

1 Ответ

1 голос
/ 29 февраля 2012

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

Итак, что вы должны сделать, это что-то вроде:

  1. Укажите не менее четырех точек на каком-либо объекте, расположенном перед проектором. Вы можете рассчитать координаты точек, используя kinect.

  2. Затем вы должны идентифицировать эти точки на проецируемом изображении в системе координат изображения в том же порядке, что и 3d-точки.

  3. Чем вы можете использовать функцию cvPosit из OpenCV, которая будет вычислять положение объекта относительно камеры.

  4. Если для некоторого объекта в трехмерном пространстве, которое вы измеряете с помощью 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
...