如何确定与视频中的物体的距离?
c++
computer-vision
opencv
5
0

我有一个从行驶中的车辆前部录制的视频文件。我将使用OpenCV进行对象检测和识别,但我只停留在一个方面。如何确定距识别对象的距离。

我可以知道我当前的速度和现实世界中的GPS位置,仅此而已。我无法对要跟踪的对象做任何假设。我计划使用它来跟踪和跟踪对象,而不会与它们发生冲突。理想情况下,我想使用此数据来得出对象的真实位置,如果我可以确定相机到对象的距离,我可以这样做。

参考资料:
Stack Overflow
收藏
评论
共 6 个回答
高赞 时间 活跃

如果我错了,请有人纠正我,但是在我看来,如果您仅使用一台摄像机并仅依靠软件解决方案,那么您可能进行的任何处理都容易出现误报。我高度怀疑是否有任何处理能够分辨出电影中真正处于感知距离处的对象与看起来仅处于该距离处的对象(例如“强制透视”)之间的区别。

您是否可以添加超声波传感器?

收藏
评论

两个摄像头,以便您可以检测视差。这就是人类所做的。

编辑

请参阅ravenspoint的答案以获取更多详细信息。另外,请记住,带分割器的单个摄像机可能就足够了。

收藏
评论

您需要在相距已知距离的两个不同帧上标识同一对象中的相同点。由于您知道了相机在每一帧中的位置,因此有了一个基线(两个相机位置之间的向量。从已知基线和所确定的点的角度构造一个三角形。三角函数为您提供了未知边的长度对于已知的基线长度以及基线与未知边之间的已知角度,训练框。

您可以使用两台相机,也可以使用一台相机连续拍摄。因此,如果您的车辆以1 m / s的速度运动并且每秒成名,那么成功帧将为您提供1m的基线,这对于测量距离达5m的物体的距离应该是很好的。如果您需要将物体放置在较远的地方,而所使用的框架则需要分开得更远-但是距离较远的物体的视野更长。

F1的观察者看到目标T与速度矢量成a1角。观察者将距离b移动到F2。以角度a2在T处看到目标。

找到r1所需,距离目标为F1

余弦的三角恒等式给出

Cos(90 – a1)= x / r1 = c1

Cos(90-a2)= x / r2 = c2

Cos(a1)=(b + z)/ r1 = c3

Cos(a2)= z / r2 = c4

x是与观察者速度向量正交的目标距离

z是从F2到与x的交点的距离

求解r1

r1 = b /(c3 – c1。c4 / c2)

收藏
评论

当您移动视频时,可以使用时间视差来确定对象的相对距离。视差:( 定义 )。

效果与我们用眼睛获得的效果相同,通过从略微不同的角度看同一物体,可以获得深度感知。由于您正在移动,因此可以使用两个连续的视频帧来获得稍微不同的角度。

使用视差计算,可以确定对象的相对大小和距离(相对于彼此)。但是,如果您需要绝对的大小和距离,则需要一个已知的参考点。

您还需要知道行进的速度和方向(以及视频帧速率)才能进行计算。您也许可以使用视觉数据得出车辆的速度,但这又增加了复杂性。

该技术已经存在。卫星通过比较在短时间内拍摄的多个图像来确定地形的突出程度 (高度)。我们使用视差通过在围绕太阳的地球轨道上不同点拍摄夜空来确定恒星的距离。通过在短时间内连续拍摄两张照片,我能够在飞机窗外创建3-D图像。

确切的技术和计算(即使我知道他们把我的头顶部)都在这里讨论的范围之内的方式 。如果可以找到不错的参考,请在此处发布。

收藏
评论

您的问题在现场相当标准。

首先,

您需要校准相机。可以离线进行 (使生活更加简单),也可以通过自我校准在线进行。

离线校准 -请。

其次,

获得摄像机K的校准矩阵后,确定连续场景中摄像机的投影矩阵(您需要使用其他人提到的视差)。此OpenCV教程对此进行了很好的描述。

您必须使用GPS信息来查找连续场景中摄像机之间的相对方向(由于大多数GPS单元固有的噪声,这可能会造成问题),即教程中提到的Rt或旋转和平移在两个相机之间。

解决所有问题后,您将拥有两个投影矩阵---在这些连续场景中的摄像机表示。使用这些所谓的相机矩阵之一,您可以将场景中的3D点M “投影”到相机的2D图像上的像素坐标m上 (如本教程所述)。

我们将使用它从您的视频中找到的2D点对真实3D点进行三角剖分。

第三,

使用兴趣点检测器跟踪视频中位于感兴趣对象上的同一点。有几个可用的探测器,我推荐SURF,因为您有OpenCV,它也有其他几个探测器,例如Shi-Tomasi角Harris

第四,

一旦在整个序列中跟踪了对象的点并获得了相应的2D像素坐标,就必须根据给定的投影矩阵和2D点,对最合适的3D点进行三角测量三角剖分

上面的图像很好地捕获了不确定性以及如何计算最合适的3D点。当然,在您的情况下,摄像头可能在彼此前面!

最后,

一旦获得了对象上的3D点,就可以轻松计算相机中心(在大多数情况下是原点)与该点之间的欧几里得距离。

注意

这显然不是一件容易的事,但也不是那么困难。我推荐Hartley和Zisserman的出色著作《 多视图几何》 ,其中详细介绍了上面的所有内容,并介绍了要启动的MATLAB代码。

玩得开心,继续提问!

收藏
评论

使用立体视差图。许多实现都在浮动,这里有一些链接: http : //homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/OWENS/LECT11/node4.html

http://www.ece.ucsb.edu/~manj/ece181bS04/L14(morestereo).pdf

如果您没有立体声摄像头,则可以使用视频http://www.springerlink.com/content/g0n11713444148l2/评估深度

我认为以上将是对您最大的帮助。

到目前为止,研究已经取得了进展,因此可以从单个单眼图像评估深度(尽管不能令人满意) 。http://www.cs.cornell.edu/~asaxena/learningdepth/

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号