2015-10-14 4 views
0

Je travaille sur le suivi 3D Skeleton en utilisant Kinect. J'avais une question sur l'étalonnage Kinect. J'utilise Kinect SDK pour le suivi du squelette, mais quand il est projeté sur l'écran, je vois que les articulations du squelette dévient de sa position réelle. J'avais un doute si je pouvais ajuster la longueur focale et les paramètres intrinsèques de la Kinect, il serait mapper le squelette avec précision est-ce correct?Etalonnage intrinsèque Kinect pour le suivi du squelette

+0

Pouvez-vous partager la partie de code dans lequel vous avez projeté le squelette? –

+0

Utilisez-vous kinect v2 ou kinect v1? – JavaNullPointer

+0

J'utilise Kinect v2 – satish

Répondre

1

Je pense que vous devez mapper les coordonnées des joints squelettiques dans l'espace couleur/profondeur.

Essayez ce code:

private Point BodyToColorPoint(Joint joint) 
    { 
     // 3D space point 
     CameraSpacePoint jointPosition = joint.Position; 

     // 2D space point 
     Point point = new Point(); 

     //you need to change the Image and Canvas dimensions 
     //because the resolution of Kinect2 color camera is 1920 X 1080 (too big for my screen) 
     //if your canvas size is 960 X 540, should dived point.X and point.Y by 2 
     if (_mode == CameraMode.Color) 
     { 
      ColorSpacePoint colorPoint = this.kinectSensor.CoordinateMapper.MapCameraPointToColorSpace(jointPosition); 

      point.X = float.IsInfinity(colorPoint.X) ? 0 : colorPoint.X; 
      point.Y = float.IsInfinity(colorPoint.Y) ? 0 : colorPoint.Y; 
     } 
     else if (_mode == CameraMode.Depth || _mode == CameraMode.Infrared) 
     { 
      DepthSpacePoint depthPoint = this.kinectSensor.CoordinateMapper.MapCameraPointToDepthSpace(jointPosition); 

      point.X = float.IsInfinity(depthPoint.X) ? 0 : depthPoint.X; 
      point.Y = float.IsInfinity(depthPoint.Y) ? 0 : depthPoint.Y; 
     } 
     return point; 
    }