Обнаружение движущейся камеры 3d. Правильно ли я делаю?
Я работаю над проблемой 3D-обнаружения движущейся монокулярной камеры. Пока что он состоит из двух основных компонентов:
- Обнаружение объекта в плоскости изображения (2d) с помощью сверточной сети (F-RCNN, SSD, YOLO). Я могу обнаружить один и тот же объект как минимум в двух кадрах движущейся камеры.
- Определение трехмерного местоположения обнаруженного объекта с помощью триангуляции. Для этого я строю мой (упрощенный) вариант процесса перестройки Local Bundle родственным здесь. Мои шаги:
- Инициализация. Извлеките функции (ORB, SWIFT) из первых двух кадров, сопоставьте их (FLANN), найдите EssentialMatrix, найдите матрицу камеры второго кадра (R|t) и триангулируйте совпадения в 3D.
- Для каждого последовательного кадра: извлеките функции, сопоставьте с предыдущим, найдите совпадения, которые уже имеют соответствующие трехмерные точки, найдите матрицу камеры кадра (через PnP), а затем триангулируйте совпадения, у которых еще нет трехмерных точек, чтобы создать новые трехмерные точки. После этого я запускаю оптимизацию локального пакета (на Ceres), чтобы настроить позы n последних камер (кадров) и трехмерных точек.
- Результаты, которые я получаю:
Орто-вид моих текущих результатов
Может ли кто-нибудь подтвердить, что то, что я делаю, имеет смысл для этой цели? Я что-то пропускаю? Можно ли сделать это проще? Есть подобные примеры? Спасибо!