Как получить поворот камеры? (Библиотека Аруко) - PullRequest
0 голосов
/ 10 января 2020

Я пытался понять вывод программы aruco_test. cpp, которая включается при загрузке библиотеки Aruco.

Вывод имеет следующий формат:

22=(236.87,86.4296) (422.581,78.3856) (418.21,228.032) (261.347,228.529) Txyz=0.00813142 -0.0148134 0.140595 Rxyz=-2.14032 0.0777095 0.138929

22 - уникальный идентификатор маркера, следующие четыре пары чисел - четыре угла маркера. Моя проблема здесь заключается в двух векторах Tve c и Rve c.

. Я читал в Inte rnet, что tve c - это вектор перевода из центра моей камеры в мой объект. (маркер в данном случае), и это число c - это вращение объекта относительно моей камеры.

У меня есть несколько вопросов относительно этого:

Как я могу знаете ось моей камеры? Я имею в виду, есть ли способ узнать, где расположены x, y и z?

Как получить вращение камеры от вращения объекта относительно камеры?

Может ли кто-нибудь объяснить мне значение векторов лучше, чтобы я мог по-настоящему понять это? Я думаю, что моя главная проблема в том, что я действительно не знаю, что эти цифры означают на самом деле.

РЕДАКТИРОВАТЬ: Я провел некоторое тестирование, чтобы проверить, как работает вращение, и я не совсем понимаю результаты:

  1. Перемещение камеры, маркер зафиксирован на полу:

Исходное положение: камера смотрит на маркер - ось 'z' маркера смотрит на камеру , «у» идет вверх, а «х» идет вправо: Rxyz = 2,40804 -0,0823451 0,23141

Перемещение камеры по оси «X» маркера (наклоните камеру вверх): Rxyz = - 1.97658 -0.0506794 -0.020052

Перемещение камеры по оси 'y' маркера (наклон камеры вправо): Rxyz = 2.74544 -0.118551 -0.973627

Повернуть камеру на 90 градусов (справа): Rxyz = 1,80194 -1,86528 0,746029

Перемещая маркер вместо камеры, оставляя камеру неподвижной, глядя на маркер:

Использование той же начальной позиции, что и в предыдущем случае.

Перемещение маркера на его ось 'x': Rxyz = 2.23619 -0.0361307 -0.0843008

Перемещение маркера по оси 'y': Rxyz = -2.9065 -0.0291299 -1.13356

Перемещение маркера на его 'z 'ось (поворот на 90º вправо): Rxyz = 1.78398 1.74161 -0.690203

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

1 Ответ

0 голосов
/ 15 января 2020

Как узнать ось моей камеры? Я имею в виду, есть ли способ узнать, где расположены x, y и z?

Это определено в библиотеке OpenCV . Ось x увеличивается слева направо изображения, ось y увеличивается сверху вниз изображения, а ось z увеличивается в направлении передней части камеры. Ниже изображение объясняет выбор этой оси. pinhole_camera_model

Как получить вращение камеры от вращения объекта относительно камеры?

rvec is вращение маркера относительно кадра камеры. Вы можете преобразовать rvec в матрицу вращения 3x3, используя встроенную функцию Rodrigues . Если маркер выровнен по кадру камеры, эта матрица вращения должна читать матрицу идентичности 3x3.

Если вы получаете обратную матрицу (это матрица вращения, то есть обратная - это транспонирование матрицы), это поворот камеры относительно маркера.

Может ли кто-нибудь объяснить мне значение векторов лучше, чтобы я мог действительно понять это? Я думаю, что моя главная проблема в том, что я не знаю, что на самом деле означают эти цифры.

tvec - это расстояние от начала кадра камеры до центра обнаруженного маркера. (это строка F_c - P на рисунке. rvec, как описано в ответе выше.

...