我有一个用移动摄像机拍摄的视频,其中包含移动的物体。我想稳定视频,以便所有静止物体在视频源中保持静止。我怎样才能做到这一点OpenCV?
即,例如,如果我有两个图像 prev_frame 和 next_frame,我该如何转换下一帧所以摄像机看起来是静止的?
我可以建议以下解决方案之一:
- 使用局部高级特征:OpenCV包含SURF,因此:对于每一帧,提取SURF特征。然后构建特征 Kd-Tree(也在 OpenCV 中),然后匹配每两个连续帧以找到对应特征对。将这些对输入 cvFindHomography 来计算这些帧之间的单应性。根据(组合..)单应性扭曲框架以稳定。据我所知,这是一种非常强大和复杂的方法,但是 SURF 提取和匹配可能非常慢
- 如果您预计两帧之间只有较小的移动,例如,您可以尝试使用“不太稳健”的功能来执行上述操作。使用 Harris 角点检测并在两个帧中构建彼此最接近的角点对,然后将其输入到 cvFindHomography,然后如上所述。可能更快但不太健壮。
- 如果您将移动限制为翻译,您也许可以用更...简单的东西替换 cv FindHomography,以获取特征对之间的翻译(例如平均值)
- 使用相位相关(参考。http://en.wikipedia.org/wiki/Phase_correlation http://en.wikipedia.org/wiki/Phase_correlation),如果您期望仅在两个框架之间进行翻译。 OpenCV 包括 DFT/FFT 和 IFFT,请参阅链接的维基百科文章中的公式和解释。
EDIT为了以防万一,我最好明确提及三点:
- 基于单应性的方法可能非常精确,因此静止的物体将保持静止。然而,单应性还包括透视畸变和缩放,因此结果可能看起来有点……不常见(或者甚至因某些快速移动而扭曲)。虽然很准确,但这可能在视觉上不太令人愉悦;因此,请将此用于进一步处理或取证等。但你应该尝试一下,对于某些场景/动作来说也可能会非常令人愉悦。
- 据我所知,至少有几个免费的视频稳定工具使用相位相关。如果您只是想“不晃动”相机,这可能会更好。
- 这个领域正在进行相当多的研究。您会在一些论文中发现一些更复杂的方法(尽管它们可能需要的不仅仅是 OpenCV)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)