我正在尝试使用kinect来计算关节速度。我的algorythm让坐标每30帧执行一次,这就是我做到的:
每当kinect具有骨架框架时,此事件就会运行:
public void SensorSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
//*default code to draw skeleton here*
count++
if (count == 30){
//my code to acquire and display coordinates
count = 0;
}
}
理论上,坐标获取的部分应该在现实生活中每1秒运行一次(aproximatly),但那不是什么事情发生的。它比它应该的速度快得多,但它不像我不使用if计数时那么快。
关键是,id喜欢使用两个关节捕获之间的时间间隔来计算速度,因为坐标以米为单位,所以(x1 - x2)/ 1将具有m / s速度。
我知道这会非常不准确,但它仅用于测试。
我认为kinect不是以每秒30帧的速度捕捉,它的速度要快得多?
有没有更简单的方法呢?
哦,即时通讯使用Visual C#和Kinect SDK
答案 0 :(得分:1)
以40FPS(每秒30帧)捕获Kinect。
理论上速度定义为循环中的运动,因此每个关节在1/30秒内具有自己的位置,因此在每30帧中您可以在一秒钟内移动。
如果您想以准确的方式计算它,则必须使用一些timer
来计算此时间而不是counter
。
如果在项目中拥有准确的数据并不重要,您可以将关节的所有位置存储在列表或数组中,然后根据列表中的数据开始计算:
F = 0中的FYI,arr [0]具有一些值,并且在f = 30中,存储帧编号30的值。因此,通过计算这两个值之间的距离,您可以找到您的结果。
实际上我用这种方法来计算平均步行速度。