Как найти скорость характерной точки (определенного пикселя) в плотном оптическом потоке для временного окна из 15 кадров? - PullRequest
0 голосов
/ 15 января 2019

Я хочу отслеживать каждый пиксель как характерную точку для временного окна из 15 кадров, используя оптический поток Farneback Dense. Используя flow = cv2.calcOpticalFlowFarneback (prvs, next, None, 0.5,3,15,3,5,1.2,0), он показывает dx и dy каждого пикселя в предыдущем кадре. Здесь я хочу отследить определенный пиксель характерной точки в течение 15 кадров и найти скорость этой характерной точки.

Как можно оценить скорость по плотному оптическому потоку характерной точки с последовательностью пространственных местоположений во времени с длиной траектории L?

1 Ответ

0 голосов
/ 15 января 2019

У вас уже есть dx и dy. С этой информацией вы всегда можете иметь скорость такого пикселя, если знаете время t.

vx =  dx / t
vy =  dy / t

dx и dy могут быть отрицательными, поэтому они сохранят вид ориентации ... помните, что начало координат находится в верхнем левом углу и указывает вправо и вниз.

Таким образом, вы можете иметь скорость каждого пикселя на кадр в измерении. Вы всегда можете выполнить отслеживание пикселя и рассчитать его траекторию длина и разделить его по времени, можно сказать, что это средняя скорость пикселя в некотором смысле.

Для этого вы рассчитываете длину каждой точки на траектории:

length =  sqrt(dx**2 + dy**2)

и добавьте их после пикселя, под этим я подразумеваю что-то вроде:

totalLength = length(prev1[y,x]) + length(prev2[y+prev1[y,x][1], prev2[x+prev1[y,x]][0]]) ....

, а затем разделите общую длину со временем.

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

disp = (x,y) + prev1[y,x] + prev2[y,x] ...
speed = disp / t

Надеюсь, это поможет вам, если не оставите комментарий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...