我正在使用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);
什么是好的参数(例如赢取大小),同时还能做好视频稳定工作?
答案 0 :(得分:3)
对于图像处理中的耗时算法,我通常首先尝试降低我的图像分辨率(假设为2个因子)并检查我是否仍然得到相同类型的结果。
众所周知,光流是一种高消耗技术
cvResize可能是您的解决方案
在很多情况下,算法的结果大致相同,在您的情况下,您可能会低至100毫秒。
关于winsize,文档说:
winSize - 每个金字塔等级的搜索窗口大小。
这是一个搜索窗口,因此您希望将其缩小以加快速度。尝试使用15像素的窗口。
编辑:
大多数时候,我尝试为每个输入图像创建几个不同分辨率的片段。 这样,根据要执行的操作,我可以明智地选择分辨率,并提高我的表现。
一个具体的例子: 我得到一个640 * 480的输入图像。 我创建了这个图像的320 * 240版本。 出于某种原因,我必须计算它上面的光流量,我知道它正在消耗。我将使用较低分辨率的版本来计算我的系数。 至于直方图均衡,这是事实,我将选择全分辨率图像作为输入以获得最大数据。
避免同时使用不同分辨率的数据来计算事物并且你没有问题。