2012-06-07 52 views
0

我正在开发一个代码,我必须找到所有我感兴趣的角点的轨迹。因此,对于相同的情况,我使用了LKPyr光流,它使用角点先前的图像并在当前图像中找到它们。我逐帧使用光流帧,即帧1和帧2,然后是2和3.因此,我认为在前一次迭代中发现的帧2角特征将成为光流的当前特征,但是,不是这种情况,每当我做好跟踪的特征时,点就会改变,问题是,对于轨迹点,我需要跟踪当前点并在新点到来时添加新点,当旧点即将丢失时,我应该得到状态= 0,以便我可以跟踪点一个一个。有没有办法做到这一点?有没有办法知道视频中每个点何时结束,以便我可以跟踪轨迹?改变cvLKpyrOpticalFlow调用中的标志是否有助于获得持续流量?OpenCV Lucas Kanade光流

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); 

这是我运行得到光流的代码块。

+1

类似的问题:http://stackoverflow.com/a/9702540/769220 – Chris

回答

2

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

前面的例程在参考帧中标识具有“高对比度”(以明确定义的表达意义)的像素和贴片,因此可能更容易追踪。后者的例程实际上进行跟踪,将参考特征与后续帧中的附近位置进行匹配,以便识别它们的新位置。当它成功时,它将状态矢量中的相应元素设置为1.后续帧中的这些特征可能或可能不是“帧的好特征”,因为可能有其他图像区域具有较高的对比度。无论如何,对于大多数应用程序,您只需要跟踪参考框架中检测到的“良好特征”。

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

+0

感谢您的思想答复。但是请看,如果我只获得一组最初的好功能来跟踪并继续跟踪它们,那么结果会有些模糊。即使下一个特征点的负值,它也会给出状态1。在我的情况下,我需要获得这些特征的轨迹点,所以,我需要一种识别特征的模式,这是我无法生成的。你有什么线索吗?我需要一些更新我的当前功能,因为新对象进入框架。 –