Вращение и перемещение в 3D-реконструкции с использованием 2D-изображений

Я пытаюсь выполнить реконструкцию 3D-модели, используя 2D-изображения с разных точек зрения. Я следую этому примеру кода из Matlab, чтобы получить желаемые результаты: Структура из движения из двух представлений.

Ниже приведены тестовые изображения, полученные с камеры:

Сделанные вручную изображения 1-го и 2-го изображения с перемещением 1 см: сделанные вручную изображения 1-го и 2-го изображения с перемещением 1 см

Наложение с совпадающими функциями первого и второго изображения: наложение с совпадающими функциями первого и второго изображения

Сделанные вручную изображения 1-го и 2-го изображения с перемещением на 2 см: сделанные вручную изображения 1-го и 2-го изображения с перемещением на 2 см

Наложение с совпадающими функциями первого и второго изображения: наложение с совпадающими функциями первого и второго изображения

Это векторы перевода и матрицы вращения, которые я получаю для каждого случая:

1см перевод: вектор перевода:[0.0245537412606279 -0.855696925927505 -0.516894461905255] матрица вращения:

[0.999958322438693  0.00879926762261436 0.00243439415451741;
-0.00887800587357739    0.999365801035702   0.0344844418829408;
-0.00212941243132160    -0.0345046172211024 0.999402269855899]

2см перевод: вектор перевода:[-0.215835469166982 -0.228607603749042 -0.949291111175908] матрица вращения:

[0.999989695803078  -0.00104036790630347    -0.00441881457943975;
0.00149220346018613 0.994626852476622   0.103514238930121;
0.00428737874479779 -0.103519766069424  0.994618156086259]

В документации говорится, что это относительное вращение и перевод между двумя изображениями.

Но я не могу понять, что означают эти цифры и какова единица приведенных выше значений.

Может ли кто-нибудь хотя бы сообщить мне, в каких единицах мы получаем сдвиг и вращение или как извлечь вращение и сдвиг, которые каким-либо образом сопоставимы с реальными значениями, такими как см/мм и радианы/градусы соответственно?


person Fallak Asad    schedule 22.03.2016    source источник


Ответы (1)


Вы можете преобразовать матрицу поворота в представление оси-угла, где вы получить углы в радианах. Это можно сделать с помощью функции vrrotmat2vec или путем самостоятельной реализации транслятора, следуя это, если у вас нет доступа к пакету. Тогда угол будет в радианах.

Однако когда дело доходит до перевода, вы не получите его в единицах, которые имеют смысл в реальном мире, поскольку вы не знаете масштаба. К сожалению, это проблема структуры движения в целом. Невозможно узнать, делаете ли вы снимок близко к чему-то маленькому или далеко от чего-то большого.

К счастью, при использовании структуры из движения для построения 3D-модели это не проблема, поскольку вы все равно правильно получаете относительные расстояния. Поэтому вы сможете захватить сцену (следуя остальной части руководства), но вы не сможете сказать, имеет ли что-то высоту 2 см или 2 км, если только у вас нет на изображении чего-то, что вы знаете в реальном размере.

Надеюсь, поможет :)

person rasan076    schedule 22.03.2016
comment
На самом деле последний шаг туториала объясняет, как измерять объекты в сцене в метрических единицах, если вы знаете размер объекта. - person rasan076; 22.03.2016
comment
на самом деле у меня есть наземные данные, которые говорят мне о переводе по осям x, y, z (который был рассчитан с использованием движения камеры) в миллиметрах. Могу ли я каким-либо образом сравнить свой перевод с реальными значениями, выраженными в миллиметрах? потому что я хотел найти точность извлеченных значений. - person Fallak Asad; 23.03.2016