Оценка углов камеры с помощью гомографии - PullRequest
1 голос
/ 25 апреля 2020

Я пытался оценить углы Эйлера (Ротц (челюсть) * Роти (шаг) * Роткс (крен)) БПЛА по гомографии между двумя кадрами. Это означает, что вращение, которое я получаю от каждого кадра к предыдущему, нужно умножить на предыдущий, чтобы получить общее вращение относительно начальных осей. Итак: R_accumulated = R01 * R12 * ... Эти R получены из декомпозицииHomography () в openCV. Согласно странице гомографии REP и OpenCV, эталоном камеры является Z вперед, X справа и Y вниз, но моей системой БПЛА является ENU. Вопрос в том, как получить из этого R_accumulated ориентацию дронов.

R_accumulated из омографии говорит вам, как преобразовать одну плоскость в другую. Так что, если я хочу ориентацию камеры, камера должна сделать противоположное движение, чтобы получить тот же результат (inv (R_accumulated))? Тогда эта матрица ориентации камеры должна быть преобразована в координаты ЕНУ? Я пытался сделать это с несколькими поворотами, но я не получаю хороших результатов.

Лучшее, что у меня было, - это получение углов непосредственно от R_accumulated и обмен питчем и креном. Это очень хорошая оценка, но мне все еще нужно знать какую-то матрицу вращения от кадра камеры до БПЛА.

Я не знаю, поняли ли вы меня.

1 Ответ

0 голосов
/ 28 апреля 2020

Наконец, у меня есть решение моей проблемы:

Если оси БПЛА отличаются от осей камеры, мы должны найти матрицу R1, которая преобразует оси БПЛА в камеры, и другую, которая выполняет та же задача, наоборот, от оси камеры до оси БПЛА R2.

Гомография возвращает значение сдвига и поворота, которое должно быть применено к первому ИЗОБРАЖЕНИЮ, чтобы получить второе. Но мы хотим позу камеры, а не изображение. Так, например, если ось z указывает на объект, у которого стрелка направлена ​​вверх, поворот ИЗОБРАЖЕНИЯ на 90 ° вокруг этой передней оси сделает стрелку направленной. Но это не тот поворот, который должна делать камера, чтобы стрелка указывала вправо. Если вы хотите, чтобы стрелка указывала вправо, вы должны повернуть камеру на -90º вдоль этой же оси. В заключение, движение камеры является инверсией изображения, поэтому вращение камеры будет инверсией вращения гомографии, а перемещение будет равно -1 * (homography_traslation) * scale_factor.

Предположим, что у нас есть вращение R между исходным изображением и конечным. Если мы хотим получить EulerAngles (предпочтительно называемый Tait-Brian) как Rotz * Roty * Rotx БПЛА, мы должны вычислить EulerAngles для R1 * inv (R) * R2. Это R умножение всех промежуточных вращений между кадрами, так что R = Rinit * ... * Rend

...