Как определить поворот камеры в мировом пространстве (а не ориентацию платы Charuco) в OpenCV?

В OpenCV я использую плату Charuco, откалибровал камеру и использую SolvePnP для получения rvec и tvec. (аналогично образцу кода). Я использую стационарную доску с камерой на круговой установке, вращающейся вокруг доски. Я новичок в этом, поэтому, пожалуйста, потерпите меня, если мне не хватает чего-то простого.

Я понимаю, что могу использовать Rodrigues (), чтобы получить матрицу вращения 3x3 для ориентации платы из rvec, и что я могу преобразовать значение tvec в мировые координаты с помощью -R.t () * tvec (в c ++).

Однако, насколько я понимаю, это вращение 3x3 R дает ориентацию платы по отношению к камере, так что это не совсем то, что нужно. Мне нужен поворот самой камеры, который смещен от R на (я думаю) угол между tvec и осью z в ​​пространстве камеры. (поскольку камера не всегда указывает на исходную точку платы, но всегда направлена ​​вниз по оси Z в пространстве камеры). Это верно?

Как мне найти дополнительное смещение поворота и преобразовать его в матрицу поворота 3x3, которую я могу объединить с R, чтобы получить фактическую ориентацию камеры?

Спасибо!


person Erik Turner    schedule 03.05.2016    source источник


Ответы (1)


Допустим, вы сделали N кадров доски Charuco с камеры. Затем у вас есть N преобразований, которые переводят точку в кадре камеры в ту же точку в кадре доски Charuco. Это получается из поз доски Чаруко для каждого кадра.

Say we denote a linear transformation from one coordinate frame to another as

T4x4 = [R3x3, t3x1; 01x3, 1]

If we look at a point P from the board coordinate frame and refer to it as Pboard. Similarly, we look at that point from camera 1 referred to as c1, camera 2 as c2 and so on.

Итак, мы могли написать:

P доска = T 1 P c 1
P board = T 2 P c 2
.
.
.
P board = Т N P c N

Насколько я понимаю, вам нужно вращение камеры, скажем, с начальной точки (предположим, что камера находится в нулевом положении в кадре 1). Таким образом, вы можете выразить каждый последующий кадр в терминах P c 1 вместо P board.

Итак, мы могли бы сказать
T 2 P c 2 = T 1 P c < sub> 1
или P c 2 = T 2 -1 T 1 P c 1
Аналогично, P c N = T N -1 T 1 P c 1

Вы можете восстановить R N для переноса точки из положения камеры N в положение камеры 1, посмотрев на вращающуюся часть T N -1 T < sub> 1.

person bugvig_pk    schedule 09.05.2016