Используйте откалиброванную камеру, чтобы получить совпадающие точки для 3D-реконструкции.
-
21-12-2019 - |
Вопрос
Я пытаюсь вычислить трехмерные координаты из нескольких пар двух точек обзора.
Сначала я использовал функцию Matlab estimateFundamentalMatrix()
чтобы получить F
совпавших точек (Количество > 8), а именно:
F1 =[-0.000000221102386 0.000000127212463 -0.003908602702784
-0.000000703461004 -0.000000008125894 -0.010618266198273
0.003811584026121 0.012887141181108 0.999845683961494]
И моя камера, сделавшая эти два снимка, была предварительно откалибрована с использованием встроенной матрицы:
K = [12636.6659110566, 0, 2541.60550098958
0, 12643.3249022486, 1952.06628069233
0, 0, 1]
На основе этой информации я затем вычислил необходимую матрицу, используя:
E = K'*F*K
Методом СВД я наконец получил матрицы проективного преобразования:
P1 = K*[ I | 0 ]
и
P2 = K*[ R | t ]
Где R
и t
являются:
R = [ 0.657061402787646 -0.419110137500056 -0.626591577992727
-0.352566614260743 -0.905543541110692 0.235982367268031
-0.666308558758964 0.0658603659069099 -0.742761951588233]
t = [-0.940150699101422
0.320030970080146
0.117033504470591]
Я знаю, что должно быть 4 возможных решения, однако мои вычисленные трехмерные координаты оказались неверными.
Я использовал камеру, чтобы сфотографировать ПЛОСКИЙ объект с отмеченными точками.Я сопоставил точки вручную (это означает, что не должно быть очевидной ошибки в отношении сырья).Но в результате получилась поверхность с небольшими полосами.
Я предполагаю, что это может быть связано с тем, что изображения не обрабатывались с искажениями (но на самом деле я помню, что так и было).
Я просто хочу знать, правильно ли этот метод решает проблему 3D-реконструкции?Особенно, когда мы уже знаем внутреннюю матрицу камеры.
Редактирование JCraft от 4 августа:Я переделал процесс и получил несколько фотографий, показывающих проблему. Я напишу еще один вопрос с подробными сведениями, а затем опубликую ссылку.
Редактирование JCraft от 4 августа:Я опубликовал новый вопрос: Калиброванная камера получила согласованные точки для 3D-реконструкции, идеальный тест не пройден..И @Schorsch очень ценю вашу помощь в форматировании моего вопроса.Я постараюсь научиться вводить данные в SO, а также попытаюсь улучшить свою грамматику.Спасибо!
Решение
Если у вас есть только фундаментальная матрица и внутренние характеристики, вы сможете получить реконструкцию только в нужном масштабе.Это ваш вектор перевода t в каких-то неизвестных единицах.Получить 3D-очки в реальных единицах можно несколькими способами:
- Вам необходимо иметь в мире несколько ориентиров с известными расстояниями между ними.Таким образом, вы можете вычислить их координаты в неизвестных единицах измерения и рассчитать масштабный коэффициент для преобразования неизвестных единиц измерения в реальные.
- Вам необходимо знать особенности каждой камеры относительно общей системы координат.Например, где-то в вашей сцене может быть калибровочный шаблон в виде шахматной доски, по которому вы сможете обнаруживать и вычислять внешние параметры.Видеть это пример.Кстати, если вы знаете внешние характеристики, вы можете вычислить фундаментальную матрицу и матрицы проекции камеры напрямую, без необходимости сопоставления точек.
- Вы можете выполнить стереокалибровку, чтобы оценить R и t между камерами, что также даст вам фундаментальную и основную матрицы.Видеть это пример.
Другие советы
Плоские объекты являются критически важными поверхностями, с их помощью невозможно достичь цели.попробуйте добавить две (или более) точки с плоскости (см. Хартли и Зиссерман или другой текст по этому вопросу, если все еще интересно)