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

时间:2012-04-04 15:53:12

标签: c# c#-4.0 opencv opticalflow

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

我可以拿到velX&来自以下功能的velY:

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

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

TNX

1 个答案:

答案 0 :(得分:1)

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

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

    length = sqrt(velx²+vely²)

    angle = acos(vely / length)[注意例如附加检查无限必须完成]

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

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

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