0

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

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

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

谢谢,乔希。

4

2 回答 2

0

这取决于您在计算机视觉方面的知识。首先,我会使用 opencv 可以提供的功能。请查看feature2d 模块

您需要首先提取特征点(例如 sift 或 surf),然后使用其内置的匹配算法来匹配从两帧中提取的点。每场比赛都会给你一些限制,你最终会解决一个过饱和的 Ax=B。

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

更新:

在多摄像头校准的情况下,您的目标是确定每个摄像头的 3D 位置,这正是您所拥有的。想象一下,不是移动单个摄像头,而是拥有与单个摄像头捕获的视频中的图像数量一样多的摄像头,并且您想知道每个摄像头位置的 3D 位置,这表示每个摄像头拍摄的图像的位置您的单个移动相机。

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

现在,一旦您有了相机的内在参数和匹配点,您就可以将许多这些投影方程堆叠在一起,并求解所有匹配点的实际 3D 位置和所有外在参数的系统参数。

于 2012-04-30T08:55:02.313 回答
0

给定如上所述的兴趣点,您可以使用 opevcv 的findHomography找到平移变换。

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

祝你好运!

于 2012-06-20T15:49:46.320 回答