Реконструировать 3D точки из двух изображений, учитывая движение камеры
Я пытаюсь восстановить реальные координаты трехмерных точек из двух изображений, полученных с одной и той же камеры. Камера не откалибрована, но движение (перемещение и вращение) известно. Короче:
Требование:
- Нет калибровки
Дополнительные ограничения, кроме точечных соответствий изображения:
- Известна камера перевода и поворота
- Одна и та же камера используется во всех видах
Я понимаю, что, исходя только из точечных соответствий изображения, сцена может быть реконструирована только до проективного преобразования. При наличии большего количества ограничений может быть выполнена аффинная или подобная реконструкция. В моем случае мне нужна реконструкция сходства.
Учитывая вышеизложенные ограничения, возможно ли восстановление подобия? Если возможно, как мне это сделать?
Я пытался атаковать проблему с нескольких точек зрения. Поскольку я не владею математически свободно, я стараюсь использовать opencv в максимально возможной степени.
findFundamentalMat()
из двух изображений, мы надеемся как-то извлечь матрицы двух камер, затемtriangulatePoints()
, Как вы могли догадаться, я застрял в середине, не в состоянии получить матрицы камеры из основной матрицы.Учебник "Геометрия множественного обзора в компьютерном зрении" (автор Хартли и Циссерман) дает выражение (стр.256, результат 9.14), которое выражает матрицы камеры в терминах фундаментальной матрицы и одного из эпиполей. Однако, не зная внутренних параметров камеры (требование: нет калибровки), я не вижу, как я могу получить эпиполь.
Я также пытаюсь рассматривать мою проблему как стереосистему и использую OpenCV
stereo***
функции. Но все они, кажется, требуют вмешательства человека для калибровки, что нарушает мое требование.
Вот почему я задаю вопрос здесь сегодня. Ключ все еще, учитывая те дополнительные ограничения, возможна ли реконструкция подобия? Я не достаточно умен, чтобы понять богатство знаний, и не могу придумать свое собственное решение. Любая помощь приветствуется.