Ваша проблема довольно стандартна в этой области.
Во-первых,
вам нужно откалибровать камеру. Это можно сделать в автономном режиме (делает жизнь намного проще) или в режиме онлайн путем самокалибровки.
Откалибруйте его в автономном режиме - пожалуйста.
Во-вторых,
Получив калибровочную матрицу камеры K , определите проекционную матрицу камеры в последовательной сцене (вам нужно использовать параллакс, как уже упоминалось другими). Это хорошо описано в этом руководстве по OpenCV .
Вам придется использовать информацию GPS, чтобы найти относительную ориентацию между камерами в последовательных сценах (что может быть проблематично из-за шума, присущего большинству устройств GPS), то есть R и t упомянуто в учебном пособии или поворот и перевод между двумя камерами.
Как только вы все это решите, у вас будет две проекционные матрицы - изображения камер на этих последовательных сценах. Используя одну из этих так называемых матриц камеры, вы можете «проецировать» 3D-точку M на сцене на 2D-изображение камеры на пиксельную координату m (как в учебник).
Мы будем использовать это для триангуляции реальной 3D-точки из 2D-точек, найденных в вашем видео.
В-третьих,
используйте детектор точек интереса для отслеживания той же точки в вашем видео, которая находится на интересующем объекте. Доступно несколько детекторов, я рекомендую SURF , поскольку у вас есть OpenCV, который также имеет несколько других детекторов, таких как Углы Ши-Томаси , Харрис , и т. Д. .
В-четвертых, * * тысяча пятьдесят-одна
После того, как вы отследили точки своего объекта по всей последовательности и получили соответствующие 2D-координаты пикселя, вы должны триангулировать для наилучшей подгонки 3D-точки с учетом матрицы проекции и 2D-точек.
Приведенное выше изображение прекрасно отражает неопределенность и способ вычисления наиболее подходящей трехмерной точки. Конечно, в вашем случае камеры, вероятно, стоят друг перед другом!
Наконец,
После того, как вы получили 3D-точки на объекте, вы можете легко вычислить евклидово расстояние между центром камеры (который в большинстве случаев является началом координат) и точкой.
Примечание
Это, очевидно, нелегкая вещь, но это не так сложно. Я рекомендую отличную книгу Хартли и Зиссермана Multiple View Geometry , которая подробно описала все вышеизложенное с кодом MATLAB для загрузки.
Веселитесь и продолжайте задавать вопросы!