框架之间的OpenCV平移/旋转位移?

时间:2012-04-30 08:20:09

标签: c++ opencv rotation translation

我目前正在研究使用垂直面向地面(固定高度)的低分辨率相机来测量速度(相机通过表面的速度)。使用OpenCV 2.1和C ++。

由于整个背景将在连续帧之间不断移动,平移和/或旋转,因此以“可用值”形式确定帧位移的最合适方法是什么? (返回帧位移的函数?)然后根据摄像机的高度和捕获的帧区域(现实世界中的帧的尺寸),我将能够根据帧位移计算现实世界中的位移,然后计算测量时间间隔的速度。

尝试确定我的逼近方法或是否有任何示例代码可用,将帧位移(或一组像素的位移)转换为基于相机高度的距离位移。

谢谢, 约什

2 个答案:

答案 0 :(得分:0)

这取决于您对计算机视觉的了解。首先,我会使用opencv可以提供的内容。请看the feature2d module

您需要的是首先提取特征点(例如筛选或冲浪),然后在匹配算法中使用其构建来匹配从两个帧提取的点。每次匹配都会给你一些约束,你最终会解决过度饱和的Ax = B.

当然,离线进行实验,即首先拍摄视频,然后对单张图像进行操作。

更新:

如果是多摄像机校准,您的目标是确定每台摄像机的3D位置,这正是您所拥有的。想象一下,不是移动你的单个相机,你拥有的摄像机数量与单个摄像机捕获的视频中的图像数量一样多,你想知道每个摄像机位置的3D位置,它代表每个摄像机的位置。你的单人移动相机。

有一个矩阵,您可以将世界中的任何3D点映射到图像see wiki上的2D点。相机矩阵由两部分组成,内在和外在参数。我(可能不完全)将内在参数称为内部矩阵。内在参数由单个摄像机的静态参数(例如焦距)组成,而外部参数由摄像机的位置和旋转组成。

现在,一旦你拥有了相机的内在参数和匹配的点,你就可以将很多projection equations堆叠在一起,并为你所有的实际3D位置解决系统问题。匹配点和所有外在参数。

答案 1 :(得分:0)

如上所述给出兴趣点,您可以使用opevcv findHomography找到转换变换。

此外,如果您可以假设变换有点小且接近线性,您可以只比较两个连续帧的图像像素以找到最佳匹配。通过足够的下采样,这不会花费太长时间,而且从我的经验来看相当不错。

祝你好运!