Простой алгоритм самокалибровки монокулярной камеры

У меня есть видео дороги/здания, и я хочу создать из него 3D-модель. Сцена, на которую я смотрю, неподвижна, а дрон движется. Я предполагаю, что у меня нет никакой дополнительной информации, такой как поза камеры, ускорение или положение GPS. Я хотел бы найти реализацию Python, которую я могу адаптировать по своему вкусу.

До сих пор я решил использовать OpenCV calcOpticalFlowFarneback() для оптического потока, который кажется достаточно быстрым и точным. С его помощью я могу получить Фундаментальную Матрицу F с findFundamentalMat(). Все идет нормально.

Теперь, согласно руководству, я следую здесь, я должен волшебным образом получить калибровочную матрицу камеры, которой у меня, очевидно, нет и не планируется иметь в будущее приложение, которое я разрабатываю.

После долгих поисков я нашел статью (Самокалибровка движущейся камеры по точкам соответствия и фундаментальным матрицам) от 1997 года, которая определяет то, что я ищу (с хорошим резюме здесь). Я ищу самую простую/простую реализацию, и я застрял с этими проблемами:

  • Если камера, которую я собираюсь использовать, автоматически изменяет экспозицию и фокус (без масштабирования), изменятся ли внутренние параметры камеры?
  • Я не знаком с методом продолжения гомотопии для численного решения уравнений, к тому же он кажется медленным.
  • Я намерен использовать расширенный фильтр Калмана, но не знаю, с чего начать, зная, что неправильная инициализация приводит к несхождению.

Покопавшись еще немного, я нашел набор инструментов Multi Camera Self Calibration с открытым исходным кодом, написанный для Octave с оболочкой Python. Моим последним средством будет разбить код и написать его непосредственно на Python. Любые другие варианты?

Примечание. Я не хочу использовать шахматную доску или ограничение плоскостности.

Есть ли другой способ очень точно откалибровать мою камеру? После 20 лет исследований с 1997 года кто-нибудь придумал более простой метод??


person globalcaos    schedule 21.07.2017    source источник


Ответы (1)


Это одноразовая вещь, или вы разрабатываете приложение для автоматической обработки большого количества таких видео?

Если первое, я бы предпочел использовать интегрированный инструмент, такой как Blender. Посмотрите одно из учебных пособий по отслеживанию движения (или «сопоставлению движений») на YouTube, чтобы получить представление об этом, например, этот.

person Francesco Callari    schedule 21.07.2017
comment
Спасибо, Франческо. Я не знал, что существуют такие инструменты, как Blender. Хорошо знать. Однако я стремился к реальной глубокой реконструкции сцены. Согласно документу под названием Алгоритмы визуального SLAM: опрос с 2010 по 2016 год, который резюмируется здесь, я смог найти то, что искал. Это плотный прямой метод SLAM, называемый DTAM (демонстрация здесь). - person globalcaos; 23.07.2017
comment
В любом случае, я все еще застрял с проблемой самокалибровки - person globalcaos; 23.07.2017