我应该如何使用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. 将运动矢量转换为极坐标:

    长度=平方英尺(velx²+vely²)

    角度=acos(有效/长度)[注意,必须进行额外检查,例如无穷大]

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

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

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

相关内容

最新更新