2012-01-09 12 views
15

Microsoft Kinect SDKを使用して、Kinectから深度と色の情報を取得し、その情報をポイントクラウドに変換します。カメラの中心を原点とする実世界座標になるように奥行き情報が必要です。Microsoft Kinect SDKの実世界座標への深さデータ

私は多くの変換関数を見てきましたが、これは明らかにOpenNIとMicrosoft以外のドライバーのためのものです。私は、Kinectからの深さ情報がすでにミリメートルであり、11ビットに含まれているということを読んだ。

このビット情報を使用できる実世界座標に変換するにはどうすればよいですか?

ありがとうございます!

答えて

10

これはMicrosoft.Research.Kinect.Nui.SkeletonEngineクラス、以下の方法を使用して、WindowsのライブラリのためのKinect内の仕出し料理されています

public Vector DepthImageToSkeleton (
    float depthX, 
    float depthY, 
    short depthValue 
) 

この方法は、によって生成奥行き画像をマッピングします現実世界の測定値に基づいてベクトルスケーラビリティに変換することができます。そこから

(私は過去にメッシュを作成しました)、Kinectの深度画像によって作成されたビットマップにバイト配列を列挙した後、あなたはベクターの新しいリストを作成し、次のように指摘:

 var width = image.Image.Width; 
     var height = image.Image.Height; 
     var greyIndex = 0; 

     var points = new List<Vector>(); 

     for (var y = 0; y < height; y++) 
     { 
      for (var x = 0; x < width; x++) 
      { 
       short depth; 
       switch (image.Type) 
       { 
        case ImageType.DepthAndPlayerIndex: 
         depth = (short)((image.Image.Bits[greyIndex] >> 3) | (image.Image.Bits[greyIndex + 1] << 5)); 
         if (depth <= maximumDepth) 
         { 
          points.Add(nui.SkeletonEngine.DepthImageToSkeleton(((float)x/image.Image.Width), ((float)y/image.Image.Height), (short)(depth << 3))); 
         } 
         break; 
        case ImageType.Depth: // depth comes back mirrored 
         depth = (short)((image.Image.Bits[greyIndex] | image.Image.Bits[greyIndex + 1] << 8)); 
         if (depth <= maximumDepth) 
         { 
          points.Add(nui.SkeletonEngine.DepthImageToSkeleton(((float)(width - x - 1)/image.Image.Width), ((float)y/image.Image.Height), (short)(depth << 3))); 
         } 
         break; 
       } 

       greyIndex += 2; 
      } 
     } 

こうすることで、最終結果はミリメートル単位で格納されたベクトルのリストになります.100センチメートルに100を掛けたい場合は、

+0

ありがとうございました!私はまだ深い価値を得るためにビットシフトのビジネスを理解していませんが、まさに私が後にしたものです。 –

+1

私はDepthImageToSkeletonメソッドがKinectSensorオブジェクトのMapDepthToSkeletonPointにリファクタリングされていると信じています –

+0

http://arena.openni.org/OpenNIArena/Applications/ViewApp.aspx?app_id=426 – EdgarT

関連する問題