Как определить расстояние от объекта в видео?

У меня есть видеофайл, записанный с передней стороны движущегося автомобиля. Я собираюсь использовать OpenCV для обнаружения и распознавания объектов, но я придерживаюсь одного аспекта. Как определить расстояние от распознанного объекта.

Я могу узнать свою текущую скорость и реальное положение GPS, но это все. Я не могу делать какие-либо предположения относительно объекта, который я отслеживаю. Я планирую использовать это для отслеживания и отслеживания объектов, не сталкиваясь с ними. В идеале я хотел бы использовать эти данные, чтобы получить реальное положение объекта, которое я мог бы сделать, если бы мог определить расстояние от камеры до объекта.

Когда вы перемещаете видео, вы можете использовать временный параллакс для определения относительного расстояния объектов. Параллакс: ( определение ).

Эффект будет тем же, что и мы с нашими глазами, которые могут получить восприятие глубины, глядя на один и тот же объект с немного разных углов. Поскольку вы двигаетесь, вы можете использовать два последовательных видеокадра, чтобы получить немного другой угол.

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

Вам также необходимо знать скорость и направление движения (а также частоту кадров видео), чтобы выполнять вычисления. Вы можете получить скорость транспортного средства с использованием визуальных данных, но это добавит еще одно измерение сложности.

Технология уже существует. Спутники определяют топографическую протуберанцу (высоту) путем сравнения нескольких изображений, сделанных за короткий промежуток времени. Мы используем параллакс для определения расстояния звезд, фотографируя ночное небо в разных точках земной орбиты вокруг Солнца. Мне удалось создать трехмерные изображения из windows самолета, сделав две фотографии в короткие сроки.

Точная технология и расчеты (даже если я знал их с ног до головы) выходят за frameworks обсуждения здесь. Если я смогу найти достойную ссылку, я отправлю ее здесь.

Ваша проблема вполне стандартная в этой области.

В первую очередь,

вам необходимо выполнить калибровку камеры. Это можно сделать в автономном режиме (упрощает жизнь) или в режиме онлайн с помощью самокалибровки.

Откалибруйте его в автономном режиме – пожалуйста.

Во-вторых,

Когда у вас есть калибровочная matrix камеры K , определите матрицу проекции камеры в последовательной сцене (вам нужно использовать параллакс, как упоминалось другими). Это хорошо описано в этом учебнике OpenCV .

Вам нужно будет использовать информацию GPS, чтобы найти относительную ориентацию между камерами в последовательных сценах (что может быть проблематично из-за шума, присущего большинству блоков GPS), то есть R и t, упомянутые в учебнике, или поворот и перевод между двумя камерами.

После того, как вы все это разрешите, у вас будет две проекционные матрицы – изображения камер в этих последовательных сценах. Используя одну из этих так называемых матриц камеры, вы можете «спроецировать» 3D-точку M на сцену на 2D-изображение камеры на координату пикселя m (как в учебнике).

Мы будем использовать это для триангуляции реальной трехмерной точки из 2D-точек, найденных в вашем видео.

В-третьих,

используйте детектор процентных точек для отслеживания той же точки в вашем видео, которая находится на объекте, представляющем интерес. Есть несколько детекторов, я рекомендую SURF, так как у вас есть OpenCV, который также имеет несколько других детекторов, таких как углы Ши-Томаси , Харрис и т . Д.

В-четвертых,

После того, как вы проследили точки своего объекта по последовательности и получили соответствующие координаты 2D-пикселя, вы должны триангулировать для наилучшей подгонки 3D-точки с учетом вашей проекционной матрицы и двумерных точек. триангуляция

Вышеприведенное изображение прекрасно отражает неопределенность и то, как вычисляется наилучшая подходящая 3D-точка. Конечно, в вашем случае камеры, вероятно, впереди друг друга!

В заключение,

После того, как вы получили 3D-точки на объекте, вы можете легко вычислить эвклидовое расстояние между центром камеры (которое является источником в большинстве случаев) и точкой.

Заметка

Это, очевидно, нелегкий материал, но это тоже не так сложно. Я рекомендую отличную книгу Хартли и Зиссермана « Множественная geometry взглядов», в которой подробно описано все выше, с кодом MATLAB для загрузки.

Получайте удовольствие и продолжайте задавать вопросы!

Вам нужно идентифицировать одни и те же точки в одном объекте на двух разных кадрах, сделанных на известном расстоянии друг от друга. Поскольку вы знаете местоположение камеры в каждом кадре, у вас есть базовый уровень (вектор между двумя положениями камеры. Постройте треугольник от известной базовой линии и углы к идентифицированным точкам. Тригонометрия дает вам длину неизвестных сторон трайлы для известной длины базовой линии и известные углы между базовой линией и неизвестными сторонами.

Вы можете использовать две камеры или одну камеру с последовательными снимками. Итак, если ваш автомобиль движется на скорости 1 м / с, и вы принимаете знаменитости каждую секунду, тогда кадры с успехом дадут вам 1-метровый базовый уровень, который должен быть хорош для измерения расстояния до объекта, скажем, на расстоянии 5 метров. Если вам нужно убирать объекты дальше, чем используемые фреймы, нужно еще больше обойтись – однако более отдаленные объекты будут отображаться дольше.

Наблюдатель в F1 видит цель при T с углом a1 к вектору скорости. Наблюдатель перемещает расстояние b в F2. Видит цель при T с углом a2.

Требуется найти r1, диапазон от цели в F1

Тригонометрическое тождество для косинуса дает

Cos (90 – a1) = x / r1 = c1

Cos (90 – a2) = x / r2 = c2

Cos (a1) = (b + z) / r1 = c3

Cos (a2) = z / r2 = c4

x – расстояние до цели, ортогональное вектору скорости наблюдателя

z – расстояние от F2 до пересечения с x

Решение для r1

r1 = b / (c3 – c1. c4 / c2)

Две камеры, чтобы вы могли обнаружить параллакс. Это то, что делают люди.

редактировать

Пожалуйста, см. Ответ ravenspoint для более подробной информации. Кроме того, имейте в виду, что достаточно одной камеры с разветвителем.

используйте карты стереоизображения. множество реализаций на плаву, вот некоторые ссылки: http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/OWENS/LECT11/node4.html

http://www.ece.ucsb.edu/~manj/ece181bS04/L14(morestereo).pdf

В вашем случае у вас нет стереокамеры, но глубину можно оценить с помощью видео http://www.springerlink.com/content/g0n11713444148l2/

Я думаю, что вышеупомянутое будет тем, что может вам помочь.

до сих пор продвигалось исследование, что глубина может быть оценена (хотя и не удовлетворительно) с одного monoкулярного изображения http://www.cs.cornell.edu/~asaxena/learningdepth/

Кто-то, пожалуйста, поправьте меня, если я ошибаюсь, но мне кажется, что если вы собираетесь просто использовать одну камеру и просто полагаться на программное решение, любая обработка, которую вы могли бы сделать, была бы склонна к ложным срабатываниям. Я очень сомневаюсь, что есть какая-либо обработка, которая могла бы отличить объекты, которые действительно находятся на воспринимаемом расстоянии, и те, которые только появляются на таком расстоянии (например, «принудительная перспектива») в фильмах.

Вы можете добавить ультразвуковой датчик?

Поместите объект объектного размера в поле зрения камеры. Таким образом, вы можете иметь более объективную метрику для измерения угловых расстояний. Без второй точки зрения / камеры вы будете ограничены оценкой размера / расстояния, но, по крайней мере, это не будет полным предположением.

сначала вы должны откалибровать камеру, чтобы вы могли получить соотношение между позициями объектов в плане камеры и их положениями в реальном плане мира, если вы используете одну камеру, поэтому вы можете использовать «метод оптического streamа», если вы используете в двух камерах вы просто используете простой треугольник, чтобы найти реальную позицию (легко найти расстояние от объектов), но пробкой с этим вторым метозом является соответствие, которое означает, как вы можете найти положение объекта «х», в камере2, если вы уже поставили его положение в камеру1, и здесь вы можете использовать алгоритм «SIFT». Я просто дал вам несколько ключевых слов, которые могли бы вам помочь.

Interesting Posts

Как получить имя и тип вызывающего метода с помощью отражения?

Команда Backtick не работает для перехода через окна в некоторых приложениях (включая Safari)

MySQL SELECT LIKE или REGEXP для сопоставления нескольких слов в одной записи

Оптимизация скорости беспроводного маршрутизатора и минимизация помех

Как заставить Thunderbird загружать все электронные письма с помощью IMAP?

вставить переменную в команду cmd

Является ли LIKE-оператор чувствительным к регистру с сервером MSSQL?

Больше не удается найти приложения в Windows 10

Hibernate / JPA ManyToOne против OneToMany

Могу ли я объединить два разных модуля памяти частоты и размера?

Как изменить / удалить нижнюю панель в Mac OS X?

Как я могу легко разбить CSV на два листа Excel с помощью PowerShell?

USB WiFi-устройство, которое может эмулировать виртуальное запоминающее устройство для домашнего видеопроигрывателя

Как я могу сделать Windows XP загрузочным с флеш-накопителя?

Есть ли способ дублировать панель задач на нескольких мониторах в Windows 7?

Давайте будем гением компьютера.