如何测量 Kinect 骨架轴尺寸?
Posted
技术标签:
【中文标题】如何测量 Kinect 骨架轴尺寸?【英文标题】:how to measure Kinect Skeleton Axis dimension? 【发布时间】:2016-11-04 02:55:58 【问题描述】:我正在开发一个 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 距离的距离。是吗?此代码未检测到 hand up 。有什么错误或建议吗?
【问题讨论】:
【参考方案1】:C#
中的0.05F
表示浮点数。
float 关键字表示存储 32 位的简单类型 浮点值。下表显示了精度和 float 类型的大概范围。
默认情况下,赋值右侧的实数字面量 运算符被视为双精度。因此,初始化一个浮点数 变量,请使用后缀 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 轴是深度传感器的身体轴,如下所示:
这是一个右手坐标系,它将 Kinect 放置在原点,正 z 轴沿 Kinect 指向的方向延伸。正y轴向上延伸,正x轴向左延伸。
来源:https://msdn.microsoft.com/en-us/library/hh973078.aspx
至于您的最后一个问题 - 尝试降低 0.5F 容差。
此外,我想向您指出 Windows Kinect 站点中的一些示例: https://kinectforwindows.codeplex.com/
【讨论】:
以上是关于如何测量 Kinect 骨架轴尺寸?的主要内容,如果未能解决你的问题,请参考以下文章