8

createOptFlow_DualTVL1()用来计算光流,这正是我想要的,但它很慢。有什么办法可以加快一点速度,还是有任何其他光流功能可以用更少的处理时间给我相同的结果?我用过calcOpticalFlowFarneback()cvGoodFeaturesToTrack()但质量不好。请帮忙。

提前谢谢以下是我的申请方式createOptFlow_DualTVL1()

Ptr<DenseOpticalFlow> tvl1 = createOptFlow_DualTVL1();
tvl1->calc(Previous_Gray_Frame, Current_Gray_Frame, Optical_Flow);
4

1 回答 1

14

为了加快计算速度,您需要减少每次执行的计算总数。这似乎很明显,但实现该目标的大量策略可能会令人困惑。所以,这里有一些建议:

  1. 减小图像(输入数据)的大小。特别是,您应该尝试将它们的大小沿每个维度除以 2,计算流量,然后使用线性插值计算全尺寸流量。除非您的应用程序需要非常高的精度,否则此解决方案应该是可以接受的,并且会给您带来巨大的加速。

  2. 减少每个比例的扭曲数(参数: )。warps这会稍微损害准确性,但除非您有非常困难的运动模式(例如,当所有图像像素都在不同方向上移动时,或者当您在图像内有非常快速的运动时),结果仍然应该是可以接受的。该算法warps在图像金字塔中运行每个级别的最小化过程时间,因此即使是很小的变化warps也会给您带来明显的加速。

  3. 减少图像金字塔中的层数scales(参数: )。但是,这可能会对准确性产生重要影响,因此请小心并对其进行大量试验。在文献中发现,级别之间的良好(准确度)比例因子是 0.8,因此您应该相应地计算级别数。在0.8之前,光流实验的标准是0.5的比例因子,所以你可以尝试向下直到这个值。

  4. 收敛速度:L1 最小化的内部过程tau在理论上对于高达 1/8 (0.125) 的时间步长(参数: )是稳定的,但在实践中,已知 1/4 (0.25) 的值仍然有效。

于 2013-10-11T14:24:32.133 回答