0

我实际上使用 Kinect v2 相机在矢状平面中测量了与人体骨骼相关的 (x,y) 关节位置。现在,我想创建 Kinect v2 和骨架运动方向之间的角度(如下图所示:http ://www.mediafire.com/file/7wf8890ngnmi1d4/kinect.pdf )。

如何使用 MATLAB 测量相对于固定在骨架上某个连接上的坐标的关节位置,例如 SpineBase 位置?

这样做需要什么转换?

4

1 回答 1

0

我现在没有可用的 kinect,但这是我如何解决这个问题的理论:

首先你似乎已经能够访问不同的关节坐标,所以你有这样的东西:

if (body.IsTracked)
{
    Joint spineMid = body.Joints[JointType.SpineMid];
    float x = spineMid.Position.X;
    float y = spineMid.Position.Y;
    float z = spineMid.Position.Z;
}

这给了我们一个带有 x,y,z 的 spinMid 点。每一帧我们都会将 spinMid 点与上一帧的 spinMid 点进行比较(然后将其保存以在下一帧中进行比较)。让我们将这些点称为 P_newP_old。为了得到方向向量,我们只需将两者相减,如下所示:

p_dir = P_new - P_old

现在我们必须得到这个方向向量和 kinect 的向量“out”之间的角度,它是 <0,0,1> 与 kinect 坐标系。但是鉴于您的绘图,我们需要使用z_dir = <0,0,-1>。通过使用 p_dir 的单位向量我们称之为p_dir_unit,我们可以使用点积来获得z_dirp_dir_unit之间的角度。

theta = acos( z_dir * p_dir_unit )

如果您只需要 x,z 平面中的方向,您只需将p_dir的 y 值设置为 0 并从该向量中获取单位向量。从p_dir的绝对长度中,您还可以获得有关身体移动速度的信息。

希望有帮助。

于 2016-10-05T19:50:03.780 回答