Как можно использовать алгоритм положения для калибровки проектора и камеры?

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

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

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

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

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

1 ответ

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

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

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

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

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

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

Могут быть определенные условия, которые должны выполняться точками, используемыми алгоритмом, поэтому, пожалуйста, смотрите следующее для более подробного объяснения POSIT: http://www.cfar.umd.edu/~daniel/daniel_papersfordownload/Pose25Lines.pdf

Ниже приведена ссылка на документацию, связанную с положением opencv: http://opencv.willowgarage.com/documentation/camera_calibration_and_3d_reconstruction.html

http://opencv.willowgarage.com/documentation/camera_calibration_and_3d_reconstruction.html

http://opencv.willowgarage.com/documentation/camera_calibration_and_3d_reconstruction.html

Шаг 4 уточнения:

Цитата из оригинальной статьи о POSIT: "Алгоритм 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
Другие вопросы по тегам