使用光流计算实际速度

时间:2011-02-07 06:07:10

标签: python image-processing opencv opticalflow

如何使用从两幅图像获得的光流信息找到物体的实际真实世界速度?任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

正如评论员已经说过我们需要更多关于你的问题的信息。 基本上:是的,可以从图像计算实际世界速度

但所有这些都取决于以下几点:

  • 你的相机是固定还是可能还在移动
  • 您是否尝试计算在场景中任何地方移动的任何物体的速度,或者您是否有固定的车道,例如用安装的摄像机拍摄的街道和物体(汽车)将始终沿着一条车道移动?
  • 如果是后者,您可以在现实世界的街道上进行测量吗?就像木板路上的标记点一样(永久地或仅仅是为了找出现实世界中x米的距离会以多少像素出现在你的相机图像上)
  • 如果您无法在现实场景中进行这些测量,则需要提供相机与场景/地平面的角度,相机与场景的距离以及相机参数的信息。

为了计算场景中任何被跟踪物体的速度,您可能需要所有后者才能真正计算场景中的距离。但这要困难得多。

如果你有一个固定车道的情况,你想要测量一辆车的速度,我宁愿采用现实世界中测量或标记点的方法。

因为如果有这些信息:

x m = y px

并且一个对象在y px时间内移动了t(按计算的刷新率得到的时间)你可以计算它在1秒内移动了多少像素,因为你知道有多少像素是一米,你知道它的速度,以米/秒(或任何其他你喜欢的单位)。

您也可以在场景中设置两个标记,然后简单地测量对象从一个标记移动到另一个标记所需的帧数(以及因此需要多长时间)。这将为您提供更平均的速度,因为如果您在小时间步骤中进行计算,您可能会因分割问题而产生嘈杂的结果,或者仅仅因为测量的时间跨度越短之间的变化相当小。

好吧,对于细分你可以简单地尝试一种减法方法。相互减去两个或三个以下的帧。移动对象(以及因此已更改的图像部分)将导致非零值,而稳定图像部分的颜色值应减去大约0的值。

也许这可以帮助您解决问题...但是这取决于您的设置和您期望的目标......您需要提供更多信息然后......

答案 1 :(得分:1)

这种方法很长,但简而言之:

您可以做的是设置一个指定物体与相机距离的值。

然后捕获第一帧并将其保存在某处。

捕获最后一帧并将其保存在某处。

在两个帧上应用阈值。

修剪第一帧左边的所有像素,然后对第二帧进行相同的操作。

有关详细教程,我认为本文可能对您有所帮助。

http://morefunscience.blogspot.in/2012/05/calculating-speed-using-webcam.html