0

我正在编写一个代码,我必须找到我感兴趣的所有角点的轨迹。所以,同样,我使用了 LKPyr 光流,它使用前一个图像的角点并在当前图像中找到它们图片。我正在逐帧使用光流,即第 1 帧和第 2 帧,然后是第 2 帧和第 3 帧。所以,我认为我在上一次迭代中找到的第 2 帧角特征将是光流的当前特征,但是并非如此,每次我做Good Features to Track时点都会改变,问题是,对于轨迹点,我需要跟踪当前点并在它们到来时添加新点,而当旧点即将丢失时,我应该得到状态= 0,这样我就可以一个一个地跟踪点。有没有办法这样做?有没有办法知道视频中每个点何时结束,这样我就可以跟踪轨迹?更改对 cvLKpyrOpticalFlow 的调用中的标志是否有助于获得连续流?

    cvGoodFeaturesToTrack ( imgGrayscale, imgEigen, imgTemp, corners_img, &corner_count, 0.01, 5.0, 0, 3, 0.4 );

    cvCalcOpticalFlowPyrLK( imgGrayscale, nxtimgGrayscale, pyr_img, pyr_nxtimg, corners_img, corners_nxtimg, corner_count, cvSize ( win_size, win_size ), 5, status, track_error, IterCriteria, NULL);

这是我正在运行以获取光流的代码块。

4

1 回答 1

2

您应该仅在您正在跟踪的序列的“第一”(或“参考”)帧中运行 cvGoodFeturesToTrack,然后仅在后续帧中运行 cvCalcOpticalFlowPyrLK。

前一个例程在参考帧中识别具有“高对比度”(在明确定义的表达意义上)的像素和补丁,因此可能更容易跟踪。后一个例程实际上进行跟踪,将参考特征与后续帧中的附近位置进行匹配,从而识别它们的新位置。当它成功时,它将状态向量中的相应元素设置为 1。后续帧中的这些特征可能是也可能不是帧本身的“跟踪的好特征”,因为可能存在其他具有更高对比度的图像区域。无论如何,对于大多数应用程序,您只想继续跟踪在参考框架中检测到的“好特征”。

由于某些特征的跟踪通常会失败,因此在几帧之后,您可能会发现没有(或没有足够的)“实时”跟踪特征。此时,您可以运行另一轮“良好特征”检测来补充集合。

于 2012-06-07T12:19:38.843 回答