2011-02-02 1 views
8

Я делаю проект, чтобы найти скорость транспортного средства из изображений. Мы берем эти изображения из автомобиля. Мы будем отмечать какой-то объект с 1-го изображения в качестве ссылки. Используя свойства одного и того же объекта на следующем изображении, мы должны рассчитать скорость движущегося транспортного средства. Может кто-нибудь мне помочь? Я использую python opencv. Мне удалось найти отмеченный пиксель во втором изображении, используя метод оптического потока. Может ли кто-нибудь помочь мне с остальными?Найти скорость автомобиля из изображений

+0

Не будет ли это также сильно зависеть от камеры, используемой для съемки? Также следует учитывать скорость затвора. – darioo

+3

есть что рассмотреть: например. перпендикулярное расстояние объекта маркировки от линии движения вашего автомобиля, время между двумя изображениями – mauris

+0

, вероятно, вам следует предоставить некоторый код, чтобы показать ваш процесс. Без этого каждому будет трудно ответить. –

ответ

10

Зная частоту обнаружения, вы должны теперь найти расстояние между последовательными позициями маркера.

Чтобы найти это расстояние, я предлагаю оценить поз маркера для каждого изображения. Понятно, что «поза» представляет собой матрицу преобразования, выражающую координаты объекта относительно камеры. После того, как у вас есть эти последовательные координаты, вы можете вычислить расстояние, а затем скорость.

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

Pose description

OpenCV реализует алгоритм оценки Поза: Posit. Док говорит:

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

Это означает:

  1. Вы должны знать фокусное расстояние камеры
  2. Вы должны знать геометрию маркеров
  3. Вы должны быть в состоянии соответствовать четыре знать точки маркеров в 2D-изображении

Возможно, вам придется вычислить фокусное расстояние камеры, используя calibration routines, предоставляемый OpenCV. Я думаю, у вас есть еще две требуемые данные.

Edit:

// Algorithm example 

MarkerCoords = {Four coordinates of know 3D points} 

I1 = take 1st image 
F1 = focal(I1) 
MarkerPixels1 = {Matching pixels in I1} 
Pose1 = posit(MarkerCoords, MarkerPixels1, F1) 

I2 = take 2nd image 
F2 = focal(I2) 
MarkerPixels2 = {Matching pixels in I2 by optical flow} 
Pose2 = posit(MarkerCoords, MarkerPixels2, F2) 

o1 = origin_of_camera * Pose1 // Origin of camera is 
o2 = origin_of_camera * Pose2 // typically [0,0,0] 
dist = euclidean_distance(o1, o2) 
speed = dist/frequency 

Edit 2: "Какова частота приобретения" (ответы на комментарии)

Вычисление скорости вашего транспортного средства эквивалентно вычислению скорости маркера. (В первом случае ссылочным является маркер, прикрепленный к земле, во втором случае ссылочной является камера, прикрепленная к транспортному средству.) Это выражается следующим уравнением:

speed = D/(t2-t1) 

С:

  • D расстояние [o1 o2]
  • o1 положением маркеров во время t1
  • o2 положения маркеров в время t2

Вы можете получить прошедшее время либо путем извлечения t1 и t2 из метаданных ваших фотографий, либо из частоты получения вашего устройства формирования изображения: t2-t1 = T = 1/F.

«Не будет ли лучше отмечать простые вещи, такие как плакаты? И если это не так, мы можем рассматривать это как объект 2d?»

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

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

+0

У меня есть серьезные сомнения. Поскольку у нас будет свобода отмечать объекты сами по себе, не лучше ли будет отмечать простые вещи, такие как плакаты (в основном прямоугольник в форме)? И если это не так, мы рассматриваем его как объект 2d? А какая частота сбора данных? Я немного новичок в таких условиях. –

+0

И спасибо за ваш ценный ответ. :) –

Смежные вопросы