gpt4 book ai didi

c++ - Opencv - 如何区分抖动和平移?

转载 作者:行者123 更新时间:2023-11-28 07:34:03 31 4
gpt4 key购买 nike

我正在使用 C++ 中的 Opencv 开发视频稳定器
在项目的这个时候,我能够使用 3 种不同的技术(光流、相位相关、兴趣点上的 BFMatcher)正确地找到两个连续帧之间的转换。
为了获得稳定的图像,我将所有平移 vector (来自连续帧)加起来,用于 warpAffine 函数来校正输出图像。

我在固定相机上取得了不错的效果,但在翻译相机上的结果非常糟糕:图像从屏幕上消失了。

我想我必须区分我想要移除的抖动和我想要保留的平移运动。但我对其他解决方案持开放态度。

最佳答案

实际上,整个问题比您一开始想象的要复杂一些。让我们这样看:当你在世界中移动你的相机时,靠近相机的物体比背景中的物体移动得更快 - 因此不同深度的物体会改变它们的相对距离(移动头部时看着你的取景器并查看它如何指向不同的事物)。这意味着图像实际上发生了变化,而不仅仅是平移(在 x 或 y 方向移动)——那么你想如何补偿呢?您需要做的是推断相机移动了多少(沿 x、y 和 z 平移)以及旋转了多少(使用偏航角、平移角和倾斜角)。这不是一项非常简单的任务,但 openCV 附带了一个非常好的包:http://opencv.willowgarage.com/documentation/camera_calibration_and_3d_reconstruction.html

所以我建议你尽可能多地阅读单应性(http://en.wikipedia.org/wiki/Homography)、相机模型和校准,然后考虑你真正想要稳定的是什么,如果只是为了旋转角度,任务就简单多了比如果你还想稳定平移抖动。

如果您不想花哨而忽略三维,我建议您对光流进行平均,对其进行高通滤波,并通过将图像平移到相反方向来补偿这种运动。这将使您的图像或多或少保持在画面的中间,并且只会抵消小而快的变化。

关于c++ - Opencv - 如何区分抖动和平移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17089045/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com