【问题标题】:How to optimize opencv's calcOpticalFlowPyrLK?如何优化opencv的calcOpticalFlowPyrLK?
【发布时间】:2012-05-29 20:30:14
【问题描述】:

我正在使用 calcOpticalFlowPyrLK 来检测 300x400 图像中的点。我将这些数据提供给 findHomography 和 warpPerspective 并进行视频稳定。在 iPhone 上,它目前以 500 毫秒的速度执行此操作,我想知道是否可以将其降低。

TermCriteria termcrit(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,20,0.03);
cv::Size winSize(31,31);
[..]
calcOpticalFlowPyrLK(baseGray, gray, points[0], points[1], status, err, winSize, 3, termcrit, 0, 0.001);

什么是好的参数(例如获胜大小)同时仍然可以很好地稳定视频?

【问题讨论】:

    标签: ios opencv


    【解决方案1】:

    对于图像处理中耗时的算法,我通常首先尝试降低图像分辨率(假设降低 2 个因子)并检查是否仍能得到相同的结果。

    众所周知,光流是一种高消耗技术

    cvResize 可能是你的解决方案

    在很多情况下,您的算法的结果将大致相同,在您的情况下,您可能会得到低至 100 毫秒的结果。

    关于 winsize,文档说:

    winSize – 每个金字塔级别的搜索窗口大小。

    这是一个搜索窗口,因此您希望缩小它以加快速度。尝试使用 15 像素的窗口。

    编辑:

    大多数时候,我会尝试为获得的每个输入图像创建多个不同分辨率的 sn-ps。 这样,根据要执行的操作,我可以明智地选择分辨率,并提高我的性能。

    一个具体的例子: 我得到一个 640*480 的输入图像。 我创建了这个图像的 320*240 版本。 出于某种原因,我必须计算它上面的光流,我知道这很消耗。我将使用较低分辨率的版本来计算我的系数。 至于直方图均衡,其实我会选择全分辨率图像作为输入,以获得最大的数据。

    只要避免同时用不同分辨率的数据计算东西,你就不应该有问题。

    【讨论】:

    • 如果我调整它的大小,那么 findHomography 和 warpPerspective 的数据将不再准确,对吧?如何使用较小图像的数据对原始图像进行warpPerspective?
    • 好吧,用调整大小的图像处理所有算法(并始终尝试保持原始宽度/高度比)。
    • 最后我需要全尺寸的图像(因为我正在做视频稳定)。我想试试你的建议,似乎是个好主意,但我不知道如何修改转换矩阵以将所有内容应用于更大的原始图像。
    • 不能下采样、计算矩阵、继续工作、获得最终图像并最终恢复全分辨率吗?
    • 你的意思是先缩小再放大?这不会失去质量吗?
    猜你喜欢
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 2013-03-15
    • 2012-07-26
    • 2014-07-20
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    相关资源
    最近更新 更多