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

How can I find speed of a feature point (certain pixel) in dense optical flow for temporal window of 15 frames?

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

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

您已经有 dx 和 dy。有了这些信息,如果您知道时间 t.

,您总能获得此类像素的速度
vx =  dx / t
vy =  dy / t

dx 和 dy 可以是负数,因此它会保持某种方向...请记住原点是左上角并指向右下。

通过这种方式,您可以获得每个维度每个帧每个像素的速度。您始终可以对像素进行跟进并计算其轨迹 length 并将其除以时间,您可以说是像素的平均速度。

为此,您计算轨迹中每个点的长度:

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

希望对你有帮助,如果没有请留下评论。