我应该如何使用velX,vely信息来获得当前帧和前一帧之间的X和Y位移?

我在C#中使用openCV库中的Lucas Kanade光流算法; 有两个系列的框架,我想在每两个框架中找出什么是光学流程并在pictureBox中显示它。

我可以从以下函数中获取velX和velY:

Emgu.CV.OpticalFlow.LK(imGrayCurrent, imGrayNext, windSize, velX, velY); 

现在,我应该如何使用这两个来显示两帧之间的流量? 或换句话说,我应该如何获得像素的位移?

TNX

常见的方法是使用HSV到RGB转换,请参阅Middlebury Flow Dataset 。 因此:

  1. 将运动矢量转换为极坐标:

    长度= sqrt(velx²+vely²)

    angle = acos(vely / length)[注意必须进行额外的检查,例如无限远]

  2. 将角度标准化为[0,360](对于OpenCV,或[0,1],取决于您稍后使用的函数)和长度为[0,1]。 创建一个hsv空间(具有第一个通道H(色调),第二个通道S(饱和度)和第三个通道V(值)的3通道图像)并设置:H =角度,S =长度和V = 1。

  3. 将HSV颜色空间转换为RGB,例如使用cv :: cvtColor(hsv,rgb,HSV2BGR);

生成的图像现在显示运动矢量场(velx,vely),其中颜色提供运动方向,饱和运动的长度或速度。