将kinect v2坐标转换为另一个坐标

时间:2016-09-28 23:24:46

标签: c# matlab kinect openkinect kinect-interaction

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

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

这需要做什么转变?

1 个答案:

答案 0 :(得分: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的spineMid点。我们比较每个帧的spineMid指向最后一帧的spinMid点(并在之后保存它以便在下一帧中进行比较)。让我们称这些点为 P_new P_old 。为了获得方向Vector,我们只需减去两个:

p_dir = P_new - P_old

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

theta = acos( z_dir * p_dir_unit

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

希望有所帮助。