【问题标题】:Speeding up optical flow (createOptFlow_DualTVL1)加速光流(createOptFlow_DualTVL1)
【发布时间】:2013-10-19 00:40:00
【问题描述】:

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

提前谢谢你下面是我如何申请createOptFlow_DualTVL1()

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

【问题讨论】:

    标签: opencv opticalflow


    【解决方案1】:

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

    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) 的值是已知仍在工作。

    【讨论】:

    • 感谢 sansuiso,但我看不到在 creatOptFlow_DualTVL1() 中调整此参数的位置,它只允许我使用此参数 tvl1->calc(Previous_Gray_Frame, Current_Gray_Frame, Optical_Flow);还是你向我推荐你的另一个功能?
    • 这些参数是调用 cv::createOptFlow 时创建的结构的成员... 使用例如 tvl1->theta = 0.125;等
    • 感谢您的帮助。如果我可以添加一些修改:tvl1->getDouble("theta"); //获取值 tvl1->set("theta",0.125); // 设置值
    猜你喜欢
    • 2023-04-01
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 2016-06-27
    • 1970-01-01
    相关资源
    最近更新 更多