什么是骨骼的XYZ坐标的性质是什么?

我正在开发与kinect设备的手势应用程序。 在这里,我正在用X,y,z坐标检查手势。

我想知道一个特定手势骨架的性质。 我正在检查的手势是否推手。

private handpush() { bool MovedFront = false; float refDistance = 0.2F; SkeletonPoint refPos = SkeletonHistory[0].Joints[JointType.ShoulderCenter].Position; SkeletonPoint startPos = SkeletonHistory[0].Joints[JointType.HandRight].Position; //printing all intial cordinates Console.WriteLine(" ShoulderCenter[0].Z = " + refPos.Z); Console.WriteLine(" HandRight[0].X = " + startPos.X); Console.WriteLine(" HandRight[0].Y = " + startPos.Y); Console.WriteLine(" HandRight[0].Z = " + startPos.Z); for (int i = 20; i < SkeletonHistory.Count; i++) { Console.WriteLine(" ShoulderCenter[i].Z = " + SkeletonHistory[i].Joints[JointType.ShoulderCenter].Position.Z); Console.WriteLine(" HandRight[i].X = " + SkeletonHistory[i].Joints[JointType.HandRight].Position.X); Console.WriteLine(" HandRight[i].Y = " + SkeletonHistory[i].Joints[JointType.HandRight].Position.Y); Console.WriteLine(" HandRight[i].Z = " + SkeletonHistory[i].Joints[JointType.HandRight].Position.Z); if (!(SkeletonHistory[i].Joints[JointType.HandRight].Position.Y < SkeletonHistory[i].Joints[JointType.Head].Position.Y && Math.Abs(SkeletonHistory[i].Joints[JointType.ShoulderCenter].Position.Z - refPos.Z) < 0.05F && Math.Abs(SkeletonHistory[i].Joints[JointType.HandRight].Position.Y - startPos.Y) < 0.1F && Math.Abs(SkeletonHistory[i].Joints[JointType.HandRight].Position.X - startPos.X) < 0.1F)) { Console.WriteLine("CheckHandPush breaking !!"); break; } if (SkeletonHistory[i].Joints[JointType.HandRight].Position.Z <= (startPos.Z - refDistance)) { Console.WriteLine("CheckHandPush sucess"); bMovedFront = true; temp_SkeletonHistory.Clear(); } } return MovedFront; } 

但是我正在获得像这样的初始值:

输出:

 ShoulderCenter[0].Z = 1.246491 HandRight[0].X = 0.1519185 HandRight[0].Y = -0.2328865 HandRight[0].Z = 1.014945 ShoulderCenter[i].Z = 1.248788 HandRight[i].X = 0.1397971 HandRight[i].Y = -0.2452036 HandRight[i].Z = 1.054223 ----- ShoulderCenter[0].Z = 1.26865 HandRight[0].X = 0.1545139 HandRight[0].Y = -0.3375102 HandRight[0].Z = 1.057466 ShoulderCenter[i].Z = 1.25049 HandRight[i].X = 0.09602752 HandRight[i].Y = -0.283217 HandRight[i].Z = 1.150237 --- ShoulderCenter[0].Z = 1.243356 HandRight[0].X = 0.1406149 HandRight[0].Y = -0.2458241 HandRight[0].Z = 1.065399 ShoulderCenter[i].Z = 1.250542 HandRight[i].X = 0.1392216 HandRight[i].Y = -0.2418006 HandRight[i].Z = 1.046706 

我正在推动我的手,所以Z轴应该增加值或减less值? 是指Z坐标长度是从运动装置还是人体开始的?

这种情况是否适合手推? 有什么build议么 ? 我可以得到一个示例代码?

任何有用的链接x,y,z坐标检查手推,手拉?

我对统筹检查感到困惑。

这些值在Kinect v2“ 摄像机空间 ”中以米为单位(链接页面上有一个很好的图像):

相机空间是指Kinect使用的三维坐标系。 坐标系定义如下:

  • 原点(x = 0,y = 0,z = 0)位于Kinect上红外传感器的中心
  • X长到传感器的左侧
  • Y长大(注意这个方向是基于传感器的倾斜)
  • Z在传感器面对的方向上长大
  • 1个单位= 1米

因此,当您站在相机的前方并将手推向它时,Z值应该降低。
要根据用户的位置和方向获取坐标,您必须自己旋转和翻译坐标。