0

我正在使用 OpenCV 开展一个项目,我正在使用光流算法 cvCalculateOpticalFlowFarneback 来获取视频中的光流。

我一直在阅读文档,甚至一直在研究源代码,并且有一个选项可以提供给算法:OPTFLOW_USE_INITIAL_FLOW

我一直在玩它,但我看不出速度或准确性有任何差异。所以我的问题是:

选项有什么作用?与没有相比,您在使用它时有什么不同吗?(是好是坏)

此外,在查看某些实现时,我遇到了一条代码注释,说应该避免使用此选项,因为其中存在错误。我在其他任何地方都无法做到这一点,但这让我有点紧张(尤其是在包含到生产软件中时)。

任何评论都可以理解!

4

1 回答 1

2

cvCalculateOpticalFlowFarneback的OpenCV 文档说:

OPTFLOW_USE_INITIAL_FLOW 使用输入流作为初始流近似

这意味着:如果您在输出参数流中填写您对流量的估计,那么此函数将使用您提供的流量作为初始估计,正如您所怀疑的那样。如果您可以将流量的合理估计作为输入,您只会看到任何真正的差异。否则,这将没有任何效果,甚至会变得更糟。如果您有一个摄像机以恒定速度移动的视频序列,您可以轻松测试效果:

  • 对于前两个图像,计算不带参数的流。
  • 对于后续图像,使用为前一对计算的流量作为具有 OPTFLOW_USE_INITIAL_FLOW 参数的新计算的输入。并计算没有它的流量。
  • 比较生成的流程和所需的时间。这应该向您显示参数的效果。

由于(如果我理解正确的话)Gunnar Farneback 的算法是一种寻找光流的优化算法,它很容易陷入局部最大值,所以一个好的初始化大概可以帮助你找到一个更好的全局最大值,所以效果该参数应该是更好的流量输出。不一定更快。

关于实现和生产使用中可能出现的错误(注意:我没有查看实际来源):

  • 如果您发现没有它的光流可以满足您的需求,请不要使用它。
  • 如果您测试参数的影响并且发现它有帮助,请再测试一些,直到您确信它有帮助并使用它。
  • 您可以在OpenCV 邮件列表上询问该错误,但我建议您在尝试之前先进行一些测试和更多代码阅读。
于 2012-02-22T09:39:56.447 回答