我实际上使用Kinect v2相机测量了在矢状平面中与人体骨骼相关的(x,y)关节位置。现在,我想创建Kinect v2和骨架运动方向之间的角度(如图所示:http://www.mediafire.com/file/7wf8890ngnmi1d4/kinect.pdf)。
如何使用MATLAB测量相对于固定在骨架上某些连接上的坐标的关节位置,如SpineBase位置?
这需要做什么转变?
答案 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 的绝对长度,您还可以获得有关身体移动速度的信息。
希望有所帮助。