OpenCV время для контакта с оптическим потоком
Я пытаюсь написать программу на C++ и OpenCV, которая вычисляет оставшееся время (кадры) до столкновения с объектом. В качестве примера видео у меня камера движется к доске.
Мой подход к этому следующий:
- обнаружение отслеживаемых функций (пробовал goodFeaturesToTrack() или настройку точек "вручную")
- рассчитать оптический поток с помощью calcOpticalFlowPyrLK()
- вычислить фундаментальную матрицу предыдущих и текущих найденных функций с помощью findFundamentalMat()
- проверить правильность фундаментальной матрицы
- рассчитать эпиполярные линии и эпиполя - фокус расширения в видео
Наконец, я планировал использовать метод времени для контакта, чтобы вычислить оставшиеся кадры до столкновения.
До сих пор моя самая большая проблема - найти правильную фундаментальную матрицу и, следовательно, эпиполь. Расчетная матрица, похоже, неверна, как и эпиполярные линии. Будет ли мой запланированный подход правильным? У кого-нибудь есть рабочий пример получения FoE из видео или какого-либо другого пошагового руководства о том, что я должен делать?
Я был бы очень рад любой помощи на всех!
Спасибо!
1 ответ
Я думаю, что оптический поток LK будет обнаруживать только 2D поток. Хотя в принципе вы можете выводить информацию из движения в части изображения (то есть в первом квадранте), фундаментальная матрица нуждается в стереопаре изображений, а не в последовательных.
Из головы не знаю, как лучше всего решить вашу проблему. Но я думаю, что исследование структуры из движения могло бы помочь вам, потому что этот метод решает проблему создания трехмерных данных из движения, но без пары стереокамер.