使用光流计算实际速度

Posted

技术标签:

【中文标题】使用光流计算实际速度【英文标题】:Calculate actual velocity using optical flow 【发布时间】:2011-02-07 06:07:10 【问题描述】:

如何使用从两幅图像中获得的光流信息找到物体在现实世界中的实际速度?谁能帮帮我?

【问题讨论】:

您必须知道它与相机的距离和运动方向(斜距相机使其在 X 方向上的移动速度较慢,即使它可能会走得很快)。如果你知道这些变量,那么速度实际上是可以得到的。 无意冒犯,但计算机视觉是一个如此复杂的主题,如此简短的问题无法回答。试着缩小范围,至少描述一下你想要追踪的风景和物体。 +1 @PauloScardine。此外,正如@Blender 指出的那样,您需要大量关于目标对象的 x、y、z 坐标的元数据,因为它需要与图像中其他可能移动的组件区分开来。现在,它变成了一个 2D 到 3D 的图像查看问题。也许this 会有所帮助 ***.com/questions/4872570/… 的副本(同一用户) 【参考方案1】:

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

但这一切都取决于以下几点:

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

要计算场景中任何被跟踪对象的速度,您可能需要后面的所有内容才能真正计算场景中的距离。但这要困难得多。

如果您有固定车道的情况,即想要测量汽车的速度,我更喜欢在现实世界中测量或标记点的方法。

因为如果有这些信息:

x m = y px

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

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

对于分割,您可以简单地尝试减法。彼此减去两个或三个后续帧。移动的对象(以及因此发生变化的图像部分)将产生非零值,而稳定图像部分的颜色值应该减去大约 0。

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

【讨论】:

让我解释一下这个场景。我们实际上是坐在一辆车里,例如一辆车。然后使用相机,我们将拍摄任何物体的照片。那个物体在路上。将提供摄像机与道路之间的固定距离。因此,通过从摄像头获取连续图像,我们必须计算车辆的速度。这怎么可能?【参考方案2】:

这个方法很长,但很简短:

你可以做的是设置一个值来指定物体到相机的距离。

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

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

在两个框架上应用阈值。

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

关于详细教程,我认为这篇文章可能对您有所帮助。

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

【讨论】:

请注意,不鼓励仅链接的答案,因此答案应该是搜索解决方案的终点(相对于另一个参考中途停留,随着时间的推移往往会变得陈旧)。请考虑在此处添加独立的概要,并保留链接作为参考。

以上是关于使用光流计算实际速度的主要内容,如果未能解决你的问题,请参考以下文章

使用 FFmpeg 计算光流大小

Horn-Schunck 光流计算

用于计算光流空间导数的 Python 库

有没有办法在不知道深度 Z 的情况下从现实世界物体的运动中找到光流速度?

如何确定光流所需的处理器速度?

目标跟踪之Lukas-Kanade光流法