Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv cvCalcOpticalFlowPyrLK未按预期工作_Opencv_Image Processing_Motion Detection_Opticalflow - Fatal编程技术网

Opencv cvCalcOpticalFlowPyrLK未按预期工作

Opencv cvCalcOpticalFlowPyrLK未按预期工作,opencv,image-processing,motion-detection,opticalflow,Opencv,Image Processing,Motion Detection,Opticalflow,我知道这是一个有充分记录的问题,但我没有设法在网上找到一个令人满意的解决方案。来吧 我使用cvCalcOpticalFlowPyrLK来跟踪特征点的运动。我使用cvGoodFeaturesToTrack查找特征点,并使用cvFindCornerSubPix对其进行优化。我在第一帧(参考帧)中找到特征点,并使用LK跟踪这些点相对于参考帧的移动。我使用当前帧特征点更新这些点,这些点与找到的帧特征点坐标一致。以下是我观察到的: 1) cvGoodFeaturesToTrack发现的良好特征点数量很少。

我知道这是一个有充分记录的问题,但我没有设法在网上找到一个令人满意的解决方案。来吧

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

1) cvGoodFeaturesToTrack发现的良好特征点数量很少。我试着找到100分,但我总是得到不到10分。 2) 在5-6帧之后,特征点的数量减少了50%,然后在5帧之后又减少了50个,这是在主体不运动的情况下。从某种意义上说,跟踪是不完整的,一些点被正确地跟踪了,但有些点偏离了方向

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

这是我如何调用函数的:

cvGoodFeaturesToTrack( 形象,, 本征图像, 临时图像, (小标题), &角落(u count),, 0.01(质量等级), 3(最小距离), 0, 10(块大小), 0(使用harris), 0.04(k))

cvFindCornerSubPix( 形象,, 角点, 角落(u count),, cvSize(窗口大小,窗口大小), cvSize(-1,-1), cvterm标准(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS,20,0.3))

cvCalcOpticalFlowPyrLK(图像, 当前帧, rpV->pyramid_图像0, rpV->金字塔图像1, 角点, 拐角处的水流, 角落(u count),, cvSize(窗口大小,窗口大小), 10(级别), 你发现的特征, 特征错误, CVTERM标准(国际热核试验堆CV|U TERMCRIT|U EPS,20,0.3), 0);

另一件事是,我使用的是灰度相机(红外线相机)。不过我觉得这并不重要。我想知道我是否遗漏了什么重要的东西

非常感谢任何形式的帮助

谢谢,
开尔文有几个问题:

  • 如果您正在跟踪的功能看起来不像棋盘格的角,那么调用cvFindCornerSubpix没有帮助
  • 只有当视在运动大于帧与帧之间的窗口大小时,才适合使用棱锥,以获得合理的窗口大小
  • 很难说为什么在没有看到图像的情况下,你没有获得足够好的特征来跟踪。也许它相当模糊

感谢您指出这一点。我看过很多使用cvFindCornerSubpix的人脸检测和跟踪示例,所以我认为这会有所帮助。我的图像不太模糊。但是,照明源不像天花板灯那样均匀。它的红外线LED围绕着摄像机。也许这就是LK强度一致性假设不起作用的原因?上次我查看时,cvFindCornerSubpix将特征建模为强度图像的鞍点。这在自然图像中几乎从未出现过,但它是棋盘游戏的理想选择。光照的变化也许可以解释。你试过一个简单的标准化xcorr跟踪器吗?我不确定xorr跟踪器是否可以处理旋转或缩放。如果可以,那就太完美了。我试着看看冲浪是否更适合我的需要。如果你有旋转和适度的缩放,我会从仿射LK开始,除非你必须要避免金字塔。xcorr的优点是,当使用FFT实现时,它在大窗口上的速度非常快。我有使用xcorr的经验。因为我感兴趣的对象是一张脸,所以我可以通过人脸检测使窗口变得更小。但无论我实现什么,都必须使用旋转和缩放。我可以知道仿射LK和金字塔LK有什么不同吗?