【问题标题】:Velocity and acceleration measurement in a video视频中的速度和加速度测量
【发布时间】:2015-08-03 09:57:50
【问题描述】:

我正在尝试找到一种方法来计算被跟踪物体的速度和加速度,比如说一个球落下。我正在使用 Processing 2 来制作这个程序,我知道相机到物体的距离,它可以计算出它在运动过程中每一帧的位置。

为了计算速度,我使用了这个公式(全部以像素计算):VelocityX=(PositionX - LastPositionX)/delta time

与加速度类似:AccelerationX=(VelocityX - LastVelocityX)/delta time

然后,我用帧更改了增量时间。所以现在我有每帧像素的速度和加速度,但我的问题是如何将每帧像素单位转换为毫米/秒?到更直观的单位。

我也以像素为单位计算位置,但之后我转换为毫米,但我对如何为速度和加速度进行转换有点困惑。

// Get the current time
currTime = frameCount;
deltaTime = (currTime - prevTime);

// Remember current time for the next frame
prevTime = currTime;

// Calculate velocity in X and Y directions (pixels / frame)
if (lastMovingX != Float.MAX_VALUE) {
    velX = (PX - lastMovingX) / deltaTime;
    velY = (PY - lastMovingY) / deltaTime;
}

// Save the current frame position for the next calculation
lastMovingX = PX;
lastMovingY = PY;
if (lastVelX != Float.MAX_VALUE) {
    accelX = (velX - lastVelX) / deltaTime;
    accelY = (velY - lastVelY) / deltaTime;
}

lastVelX = velX;
lastVelY = velY;

【问题讨论】:

  • 没有标准的方法来做到这一点,因为它完全取决于用户在哪个屏幕上显示。手机上的 100 像素与投影仪上的 100 像素将以毫米为单位的测量值将非常不同。为什么您认为需要转换为毫米?
  • 这个单位的测量对我的项目来说是必要的,所以用户可以理解更熟悉的单位的结果。你建议怎么做才能做到这一点?我的屏幕是 640x480 像素。并且我介绍了相机到物体的距离。
  • 啊,我误解了你的问题。您希望以毫米为单位跟踪对象,而不是您在屏幕上绘制的对象。对于计算机视觉来说,这更像是一个问题,而不是专门针对处理的问题。这也可能取决于您使用的相机类型(例如,鱼眼镜头与长焦镜头会给您带来非常不同的结果)。在计算机视觉论坛上发帖可能会更好。
  • 关于计算机视觉的所有部分都已完成,我唯一缺少的是如何将每帧单位的像素转换为 mm/s 。我正在使用 30fps 网络摄像头。
  • 从像素转换为现实世界的单位是一个计算机视觉问题。这也取决于您使用的镜头类型。在 StackOverflow 上很难找到这种类型的专业知识,这就是为什么您可能想要寻找计算机视觉论坛的原因。如果您这样做,请确保在交叉帖子之间建立链接。祝你好运!

标签: opencv processing velocity frames units-of-measurement


【解决方案1】:

如果你知道物体的大小,你可以提取像素/毫米的比率。如果您知道您的帧速率,您可以将帧转换为秒。

求像素/mm = 对象大小(以像素为单位)/对象大小(以 mm 为单位)

(像素/帧)/(像素/毫米)= 毫米/帧

毫米/帧 * 帧/秒 = 毫米/秒

这是你要找的吗?

【讨论】:

  • 是的!我一直在寻找这个,我对我应该采取的方法有点困惑,谢谢你的澄清。我会用这个测试结果,然后让你知道它是否有效。
猜你喜欢
  • 2011-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-29
  • 1970-01-01
  • 1970-01-01
  • 2014-02-08
  • 1970-01-01
相关资源
最近更新 更多