3

我正在使用 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);

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

4

1 回答 1

3

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

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

cvResize可能是你的解决方案

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

关于winsize,文档说:

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

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

编辑 :

大多数时候,我会尝试为我得到的每个输入图像创建几个不同分辨率的片段。这样,根据要执行的操作,我可以明智地选择分辨率,并提高我的表现。

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

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

于 2012-05-29T21:07:31.877 回答