Используйте откалиброванную камеру, чтобы получить совпадающие точки для 3D-реконструкции.

StackOverflow https://stackoverflow.com//questions/25054760

Вопрос

Я пытаюсь вычислить трехмерные координаты из нескольких пар двух точек обзора.
Сначала я использовал функцию 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 между камерами, что также даст вам фундаментальную и основную матрицы.Видеть это пример.

Другие советы

Плоские объекты являются критически важными поверхностями, с их помощью невозможно достичь цели.попробуйте добавить две (или более) точки с плоскости (см. Хартли и Зиссерман или другой текст по этому вопросу, если все еще интересно)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top