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

问题描述:

实际上,我使用Kinect v2相机测量了与人体骨骼相关的关节位置(x,y)关节位置。现在,我想创建Kinect v2和运动的骨架方向之间的角度(如图中的http://www.mediafire.com/file/7wf8890ngnmi1d4/kinect.pdf)。将kinect v2坐标转换到另一个坐标

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

需要做什么转换?

我有没有可用的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_newP_old。为了得到方向向量,我们只是两者相减,像这样:

p_dir = P_NEW - P_OLD

现在我们必须得到这个方向矢量和矢量“出”之间的夹角在kinect坐标系下的kinect是< 0,0,1>。但考虑到您的绘图,我们需要使用z_dir = < 0,0,-1>。 通过使用p_dir的单位向量,让我们把它叫做p_dir_unit,我们可以使用点积得到z_dirp_dir_unit之间的角度。

THETA = ACOS(z_dir * p_dir_unit

如果您只需要在X方向,Z平面,你可以设置Y值p_dir为0,并获得单位该矢量的矢量。从p_dir的绝对长度中,您还可以获得身体移动速度的信息。

希望有所帮助。