Где я могу добавить масштабный коэффициент к Essential Matrix, чтобы получить реальную ценность перевода

Я работаю с OpenCV и python и хотел бы получить реальный перевод между двумя камерами. Я использую одну откалиброванную камеру, которая движется. Я уже работал с сопоставлением функций, вычислением F с помощью RANSAC и вычислением E. Чтобы получить перевод между камерами, я думаю, что могу использовать: w, u, vt = cv2.SVDecomp, и тогда мой вектор t может быть: t = u[:,2] Пример вывода:

[[ -1.16399893 9.78967574 1.40910252]
[ -7.79802049 -0.26646268 -13.85252956]
[ -2.67690676 13.89538682 0.19209676]]

вектор t: [ 0.81586158 0.0750399 -0.57335756]

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


person user1667061    schedule 01.03.2013    source источник


Ответы (2)


Похоже, ответ положительный.

Если расстояние между камерами составляет 2 метра, то результирующее преобразование реального мира будет произведением этого значения и вектора t:

dist = 2
t = [ 0.81586158 0.0750399 -0.57335756]
tworld = 2 * t

print tworld 
[ 1.63172316  0.1500798  -1.14671512]

Конечно, здесь нужно помнить, что, хотя перевод теперь выполняется в реальных единицах измерения, он все еще находится в системе координат камеры от камеры один. Это будет означать, что моя вторая камера расположена на 1,63172316 м справа, на 0,1500798 м вверх и -1,14671512 за первой камерой.

person user1667061    schedule 08.03.2013

У меня такая же проблема. Я думаю, что для монокулярной камеры может понадобиться объект с трехмерной координатой. Это может помочь.

person user4705465    schedule 14.04.2015
comment
Это должен быть комментарий, поскольку он не дает ответа на OP. - person Employee; 21.03.2019