Kinect:以毫米为单位转换Joint.Position.Z

时间:2013-03-13 16:16:09

标签: c# kinect kinect-sdk

我知道如何转换从Joint.Position.XJoint.Position.Y获得的值的像素。我有一个例子:

void kinectSensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
    {
        using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
        {
            if (skeletonFrame != null)
            {
                Skeleton[] skeletonData = new Skeleton[skeletonFrame.SkeletonArrayLength]; //conterrà tutti gli skeleton

                skeletonFrame.CopySkeletonDataTo(skeletonData);

                Skeleton playerSkeleton = (from s in skeletonData where s.TrackingState == SkeletonTrackingState.Tracked select s).FirstOrDefault();

                if (playerSkeleton != null)
                {
                    Joint rightHand = playerSkeleton.Joints[JointType.HandRight];
                    Joint leftHand = playerSkeleton.Joints[JointType.HandLeft];

                    //EDIT: The following formulas used to convert X and Y coordinates in pixels are wrong.
                    //Please, see the answer for details
                    rightHandPosition = new float[] { (((0.5f * rightHand.Position.X) + 0.5f) * (640)), (((-0.5f * rightHand.Position.Y) + 0.5f) * (480)) };
                    leftHandPosition = new float[] { (((0.5f * leftHand.Position.X) + 0.5f) * (640)), (((-0.5f * leftHand.Position.Y) + 0.5f) * (480)), leftHand.Position.Z };
                }
             }
         }
    }

现在,我想要做的是使用Joint.Depth.Z获取真实深度(以毫米为单位)。参考前面的示例,我想获得rightHandPositionleftHandPosition的两个3D数组,其中最后一个坐标代表深度。什么是正确的公式,以便以毫米为单位转换从rightHand.Position.ZleftHand.Position.Z返回的相应值的值?

编辑:用于在上面的代码中以像素为单位转换X和Y坐标的公式是错误的。请阅读我的以下答案。

2 个答案:

答案 0 :(得分:8)

我已经意识到Joint.Position.XJoint.Position.Y不限于-1和1.这个错误的信息在互联网上非常分散,这就是我回复自己的原因。< / p>

正如Evil Closet Monkey所述,在上面的评论中,official documentation表示“骨架空间坐标以米为单位”。在this post中,Kinect for Windows团队的成员也证实了这一点。

这意味着为了转换以Joint.Position.XJoint.Position.YJoint.Position.Z获得的X,Y和Z坐标,以毫米为单位,您只需将这些值除以1000(或者你也可以用米工作,不需要转换。)

答案 1 :(得分:0)

如前所述,职位以米为单位。只需乘以1000即可转换毫米数。 Conversion According To Google