我目前正在研究使用一个垂直面对地面(固定高度)的低分辨率相机来测量速度(相机通过表面的速度)。在C++中使用OpenCV 2.1。
由于整个背景将在结果帧之间不断移动、平移和/或旋转,在确定“可用值”形式的帧的位移时,最合适的方法是什么?(返回帧位移的函数?)然后,基于相机的高度和捕获的帧区域(现实世界中帧的尺寸),我将能够根据帧位移计算真实世界中的位移,然后计算测量时间间隔的速度。
尝试确定我的方法,或者如果有任何示例代码可用,将帧位移(或一组像素的位移)转换为基于相机高度的距离位移。
谢谢你乔什。
发布于 2012-04-30 16:55:02
这取决于你在计算机视觉方面的知识。首先,我会使用opencv可以提供的功能。请看一下the feature2d module。
您需要的是首先提取特征点(例如sift或surf),然后使用其内置匹配算法来匹配从两个帧中提取的点。每一次匹配都会给你一些约束,你最终会解决一个过饱和的Ax=B。
当然,您可以离线进行实验,即先拍摄视频,然后对单个图像进行操作。
更新:
在多摄像机校准的情况下,您的目标是确定每个摄像机的3D位置,这正是您所拥有的。想象一下,不是移动单个摄像机,而是拥有与单个摄像机捕获的视频中的图像数量一样多的摄像机,并且您想知道每个摄像机位置的3D位置,这些位置表示由单个移动摄像机拍摄的每个图像的位置。
有一个矩阵,您可以将世界上的任何3D点映射到您的图像see wiki上的2D点。摄像机矩阵由两部分组成,内部参数和外部参数。我(可能不准确地)将内部参数引用为内部矩阵。内部参数包括单个相机的静态参数(例如焦距),外部参数包括相机的位置和旋转。
现在,一旦你有了相机的内部参数和匹配点,你就可以将这些projection equations堆叠在一起,并求解所有匹配点的实际3D位置和所有外部参数的系统。
发布于 2012-06-20 23:49:46
给定如上所述的兴趣点,您可以使用opevcv的findHomography找到转换。
此外,如果您可以假设变换会有点小且接近线性,则只需比较两个连续帧的图像像素即可找到最佳匹配。有了足够的下采样,这不会花费太长时间,根据我的经验,效果相当好。
祝好运!
https://stackoverflow.com/questions/10380503
复制相似问题