OpenCV время для контакта с оптическим потоком

Я пытаюсь написать программу на C++ и OpenCV, которая вычисляет оставшееся время (кадры) до столкновения с объектом. В качестве примера видео у меня камера движется к доске.

Мой подход к этому следующий:

  1. обнаружение отслеживаемых функций (пробовал goodFeaturesToTrack() или настройку точек "вручную")
  2. рассчитать оптический поток с помощью calcOpticalFlowPyrLK()
  3. вычислить фундаментальную матрицу предыдущих и текущих найденных функций с помощью findFundamentalMat()
  4. проверить правильность фундаментальной матрицы
  5. рассчитать эпиполярные линии и эпиполя - фокус расширения в видео

Наконец, я планировал использовать метод времени для контакта, чтобы вычислить оставшиеся кадры до столкновения.

До сих пор моя самая большая проблема - найти правильную фундаментальную матрицу и, следовательно, эпиполь. Расчетная матрица, похоже, неверна, как и эпиполярные линии. Будет ли мой запланированный подход правильным? У кого-нибудь есть рабочий пример получения FoE из видео или какого-либо другого пошагового руководства о том, что я должен делать?

Я был бы очень рад любой помощи на всех!

Спасибо!

1 ответ

Я думаю, что оптический поток LK будет обнаруживать только 2D поток. Хотя в принципе вы можете выводить информацию из движения в части изображения (то есть в первом квадранте), фундаментальная матрица нуждается в стереопаре изображений, а не в последовательных.

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

Другие вопросы по тегам