opencv - 加速光流 (createOptFlow_DualTVL1)

标签 opencv opticalflow

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

提前谢谢你下面是我如何应用createOptFlow_DualTVL1()

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

最佳答案

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

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

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

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

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

关于opencv - 加速光流 (createOptFlow_DualTVL1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19309567/

相关文章:

python - 添加到人脸识别数据路径新图像,而不是覆盖它们

c# - 扫描图像 OpenCV 上的文档检测

OpenCV的partition()底层算法

python - scipy.signal.sepfir2d 中的类型错误

python - OpenCV 密集光流矩阵

opencv - 图像分析技术可以确定短时间内 View 的大致变化?

python - 如何使用 tvl1 opencv 函数计算光流

c++ - 图像处理 : luminance weighted 2

c++ - OpenCV接触光流的时间

opencv - 找到轮廓属性