Как рассчитать проекцию камеры OpenCVMatrix в python

Я пытаюсь рассчитать проекцию_матрицы, используя OpenCV 2.4 в Python 2.7 для моей камеры (я использую ps eye). Мне это нужно для cv2.triangulatePoints(). Я уже выполнил калибровку с помощью cv2.calibrateCamera() (используя calibrate.py из примеров OpenCV), поэтому у меня есть rms, camera_matrix, dist_coefs, rvecs и tvecs.

Но у меня есть проблема с фактическим вычислением project_matrix из этих параметров (я не нашел примеров Python в Интернете).

PS: Должен ли я калибровать каждую камеру PS Eye? У меня 3, и я хотел бы отслеживать объект в 3D-пространстве.


person Repminister    schedule 13.12.2016    source источник
comment
см. это: opencv-python-tutroals.readthedocs .io/en/latest/py_tutorials/   -  person eyllanesc    schedule 14.12.2016


Ответы (1)


Если у вас только одна камера, матрица проекции должна быть равна camera_matrix. Есть только одно осложнение.

cv2.triangulatePoints определен для работы с двумя вид с 2-х разных камер.

В документации также указано, что

Функция реконструирует трехмерные точки (в однородных координатах), используя их наблюдения со стереокамеры. Матрицы проекций можно получить с помощью stereoRectify().

Так что да, вам нужно откалибровать каждую камеру и откалибровать каждую пару камер, чтобы получить матрицу каждой камеры, матрицу вращения и вектор перевода с одной камеры на «основную камеру».

Для данной пары камер с матрицами камер К1 и К2 верно, что

Проекционная матрица основной камеры (камера является мировой системой отсчета)

P1 = K1*[I | z]

где I — единичная матрица, а z — вектор 0,0,0 в четвертом столбце. Вы могли подумать что-то вроде

  1 0 0 0
  0 1 0 0 
  0 0 1 0

Если R — матрица поворота между двумя камерами, а t — расстояние между двумя камерами, вторая матрица проекций равна

P2 = K2*[R | t]

В python, если вы не можете получить матрицы из StereoRectify, одним из способов сделать это вручную является

import numpy as np
P = np.concatenate((np.dot(K,R),np.dot(K,t)), axis = 1)
person marcoresk    schedule 13.12.2016
comment
Вы имели в виду P2 = K1*[R | t] для второй матрицы? Это имеет больше смысла. - person gregorkas; 14.12.2016
comment
@gregorkas да, это была моя вина. Во второй матрице индекс 1 должен быть равен 2: опечатка. Спасибо! Отредактировано. - person marcoresk; 14.12.2016