将kinect v2坐标转换为另一个坐标
Transform kinect v2 coordinate to another coordinate
我实际上使用 Kinect v2 相机测量了与人体骨骼在矢状图中相关的 (x,y) 关节位置。现在,我想创建 Kinect v2 和骨架运动方向之间的角度(如图所示:http://www.mediafire.com/file/7wf8890ngnmi1d4/kinect.pdf)。
如何使用 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_new 和 P_old。要获得方向向量,我们只需像这样减去两者:
p_dir = P_new - P_old
现在我们要得到这个方向向量和kinect坐标系中<0,0,1>的向量"out"之间的夹角。但是鉴于您的绘图,我们需要使用 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 的绝对长度,您还可以获得有关 body 移动速度的信息。
希望对您有所帮助。
我实际上使用 Kinect v2 相机测量了与人体骨骼在矢状图中相关的 (x,y) 关节位置。现在,我想创建 Kinect v2 和骨架运动方向之间的角度(如图所示:http://www.mediafire.com/file/7wf8890ngnmi1d4/kinect.pdf)。
如何使用 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_new 和 P_old。要获得方向向量,我们只需像这样减去两者:
p_dir = P_new - P_old
现在我们要得到这个方向向量和kinect坐标系中<0,0,1>的向量"out"之间的夹角。但是鉴于您的绘图,我们需要使用 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 的绝对长度,您还可以获得有关 body 移动速度的信息。
希望对您有所帮助。