4

Joint.Position.Xとから取得した値をピクセル単位で変換する方法を知っていますJoint.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。前の例を参照して、との2つの3D配列を取得rightHandPositionleftHandPosition、最後の座標が深度を表します。rightHand.Position.Z対応する値から返されるleftHand.Position.Z値をミリメートル単位で変換するための正しい式は何ですか?

編集:上記のコードでピクセル単位のX座標とY座標を変換するために使用される式が間違っています。私の次の答えを読んでください。

4

2 に答える 2

8

Joint.Position.X私は、-1と1の間で制限されていないことに気づきましたJoint.Position.Y。この間違った情報はインターネット上でかなり拡散しており、これが私が自分自身に返信する理由です。

邪悪なクローゼットモンキーが述べたように、上記のコメントで、公式文書は「スケルトン空間座標はメートルで表される」と述べています。この投稿では、KinectforWindowsチームのメンバーによっても確認されています。

つまり、、、で取得したX、Y、Z座標をミリメートル単位で変換するには、これらJoint.Position.Xの値を1000で割るだけです(または、変換を必要とせずにメートル単位で作業することもできます)。Joint.Position.YJoint.Position.Z

于 2013-03-13T20:16:37.813 に答える
0

前述のように、位置はメートルで示されます。1000を掛けるだけで、メートルをミリメートルに変換できます。グーグルによる変換

于 2017-11-25T04:55:19.063 に答える