cvCalcOpticalFlowPyrLK无法按预期工作

时间:2013-10-09 11:12:11

标签: opencv image-processing motion-detection opticalflow

我知道这是一个记录良好的问题但我无法在网上找到满意的解决方案。到此为止。

我使用cvCalcOpticalFlowPyrLK来跟踪特征点的运动。我找到了cvGoodFeaturesToTrack的特征点,并用cvFindCornerSubPix对其进行了细化。我在第一帧(参考帧)中找到了特征点,并使用LK跟踪这些点相对于参考帧的移动。我用当前帧特征点坐标更新点,并找到它们。这是我观察到的:

1)没有。 cvGoodFeaturesToTrack找到的好特征点非常少。我试图找到100分,但总是得不到10分。 2)没有。 5-6帧之后的特征点减少50%,然后在5帧之后减少另外50个,这是当主体不运动时。从某种意义上说,跟踪是不完整的,有些点是正确跟踪的,但有些是远离的。

我在youtube或iphone app上看过演示应用程序。没有下降。帧与帧之间的特征点不是我在应用程序中看到的。所以我怀疑我设置的参数可能是错误的。

这就是我调用函数的方式:

cvGoodFeaturesToTrack(       图片,       eigen_image,       temp_image,       corners_point,       &安培; corner_count,       0.01(质量等级),       3(最小距离),       0,       10(块大小),       0(使用哈里斯),       0.04(K));

cvFindCornerSubPix(         图片,       cornersPoint,       corner_count,       cvSize(WINDOW_SIZE,WINDOW_SIZE),       cvSize(-1,-1),       cvTermCriteria(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS,20,0.3));

cvCalcOpticalFlowPyrLK(图像,       设置currentFrame,       rpV-> pyramid_images0,       rpV-> pyramid_images1,       cornersPoint,       cornersCurrent,       corner_count,       cvSize(WINDOW_SIZE,WINDOW_SIZE),       10(电平),       features_found,       feature_errors,       cvTermCriteria(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS,20,0.3),       0);

另一件事是我使用的是灰度相机(红外相机)。不过我不重要。我想知道我是否遗漏了这里重要的事情。

非常感谢任何形式的帮助。

谢谢, 开尔文

1 个答案:

答案 0 :(得分:0)

有一些问题:

  • 如果您跟踪的功能看起来不像棋盘的一角,则调用cvFindCornerSubpix无效。
  • 对于合理的窗口大小,只有当视觉运动大于帧与帧的窗口大小时,才能使用金字塔。
  • 很难说出为什么在没有看到图像的情况下没有获得足够好的功能来跟踪。也许它相当模糊?