如何在15帧的时间窗口的密集光流中找到特征点(某些像素)的速度?

时间:2019-01-15 03:42:29

标签: python opencv opticalflow

我想使用Farneback Dense光流跟踪每个像素作为15帧的时间窗口的特征点。使用flow = cv2.calcOpticalFlowFarneback(prvs,next,None,0.5,3,15,3,5,1.2,0),它显示前一帧中每个像素的dx和dy。在这里,我想跟踪超过15帧的某些特征点像素,并找到该特征点的速度。

如何通过特征点的密集光流来估计速度,该特征点具有随时间变化的轨迹长度L的一系列空间位置?

1 个答案:

答案 0 :(得分:1)

您已经有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]]) ....

,然后将totalLength除以时间。

如果您想要总位移的速度,那么我的意思是从起始点到终点的速度(如果像素来回移动则可以为0),然后通过添加位移来跟踪像素,然后计算速度。

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

我希望这对您有所帮助,即使不是,请留下评论。