如何测量Kinect Skeleton Axis尺寸?

时间:2016-07-01 16:06:41

标签: c# windows kinect gesture-recognition skeleton-code

我正在开发一个kinect手势应用程序。所以我从互联网上获得了一个代码来处理手势。

handupgesture()
{

 bool up = false;
 float refDistance = 0.2F;

 SkeletonPoint refPos = localSkeletonHistory[0].Joints[JointType.ShoulderCenter].Position;
 SkeletonPoint startPos = localSkeletonHistory[0].Joints[JointType.HandRight].Position;

 for (int i = 20; i < localSkeletonHistory.Count; i++)
 {
           if (!(Math.Abs(localSkeletonHistory[i].Joints[JointType.ShoulderCenter].Position.Y - refPos.Y) < 0.05F &&
                   Math.Abs(localSkeletonHistory[i].Joints[JointType.HandRight].Position.X - startPos.X) < 0.05F &&
                   Math.Abs(localSkeletonHistory[i].Joints[JointType.HandRight].Position.Z - startPos.Z) < 0.05F ))
            {
                break;
            }
            if (localSkeletonHistory[i].Joints[JointType.HandRight].Position.Y >= (startPos.Y + refDistance))
            {
                up = true;
                SkeletonHistory.Clear();
                break;
            }
        }
        return up;
} 

我的怀疑是:

  • 什么是 0.05F ?是米吗?厘米?
  • Z轴距离是指关节与kinect距离的距离。是吗?

此代码未检测到手动。有什么错误或建议吗?

1 个答案:

答案 0 :(得分:1)

0.05F中的

C#表示浮点数。

  

float关键字表示存储32位的简单类型   浮点值。下表显示了精度和   浮动类型的近似范围。

     

默认情况下,分配右侧的实际数字文字   运算符被视为double。因此,要初始化一个浮点数   变量,使用后缀f或F,如下例所示:

float x = 3.5F; or in your case 0.05F

来源:https://msdn.microsoft.com/en-us/library/b1e65aza.aspx

至于你的第二个问题,z轴代表深度。 每帧,捕获的深度图像由Kinect运行时处理为骨架数据。骨架数据包含最多两个在深度传感器中可见的人的骨骼的3D位置数据。骨架和每个骨架关节的位置(如果启用了主动跟踪)存储为(x,y,z)坐标。与深度空间不同,骨架空间坐标以米为单位表示。

x,y和z轴是深度传感器的主体轴,如下所示:

Skeleton space

这是一个右手坐标系,它将Kinect置于原点,正z轴在Kinect指向的方向上延伸。正y轴向上延伸,正x轴向左延伸。

来源:https://msdn.microsoft.com/en-us/library/hh973078.aspx

至于你的上一个问题 - 尽量减少0.5F容差。

此外,我想指出Windows Kinect网站中的一些示例: https://kinectforwindows.codeplex.com/