5

SDKを使用してプログラムを作成しています。ユーザーが検出されると、プログラムはユーザーがフォローするためのスケルトンを描画します。最近、Xbox、Nike + Kinectで宣伝されているゲームを見て、次のようなことをしているキャラクターのコピーがどのように表示されるかを確認しました。

http://www.swaggerseek.com/wp-content/uploads/2012/06/fcb69__xboxkinect1.jpg

または

http://www.swaggerseek.com/wp-content/uploads/2012/06/fcb69__xboxkinect.jpg

検出された人物のみ(背景は含まない)の点群表現を作成できますか?前もって感謝します!


編集

このサイトを使用すると、点群を作成できますが、それでも人の体の周りをトリミングすることはできません。

4

4 に答える 4

6

ポイントの非常に単純な三角測量を行うことができます。このチュートリアルを確認してください:

http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series1/Terrain_basics.php

結果を確認します。

ここに画像の説明を入力してください

于 2012-09-04T02:37:07.597 に答える
5

完全な点群を表示しているようには見えませんが、青い影付きの強度マップを表示しています。これは、Kinect forWindowsSDKの深度画像を使用して実行できます。あなたが探しているのはプレイヤーインデックスです。これは、深度画像の各ピクセルに提供されるビットです。プレーヤーのインデックスビットを取得するには、初期化コードで骨格ストリームも有効にする必要があります。

だから、これは私がそれをする方法です。ここにあるKinectforWindows SDKクイックスタートの1つを変更してロードし、次の変更を加えます。

//Change image type to BGRA32
image1.Source = 
                BitmapSource.Create(depthFrame.Width, depthFrame.Height, 
                96, 96, PixelFormats.Bgra32, null, pixels, stride); 

        //hardcoded locations to Blue, Green, Red, Alpha (BGRA) index positions       
        const int BlueIndex = 0;
        const int GreenIndex = 1;
        const int RedIndex = 2;
        const int AlphaIndex = 3;

//get player and depth at pixel
int player = rawDepthData[depthIndex] & DepthImageFrame.PlayerIndexBitmask;
int depth = rawDepthData[depthIndex] >> DepthImageFrame.PlayerIndexBitmaskWidth;

//check each pixel for player, if player is blue intensity.

            if (player > 0)
            {
                pixels[colorIndex + BlueIndex] = 255;
                pixels[colorIndex + GreenIndex] = intensity;
                pixels[colorIndex + RedIndex] = intensity;
                pixels[colorIndex + AlphaIndex] = 100;

            }
            else
            {
                //if not player make black and transparent
                pixels[colorIndex + BlueIndex] = 000;
                pixels[colorIndex + GreenIndex] = 000;
                pixels[colorIndex + RedIndex] = 000;
                pixels[colorIndex + AlphaIndex] = 0;
            }

この例を使用して色をテストするのが好きです。これは、右側に深度ビューアーが表示されるためです。この効果の画像を以下に添付しました。

ここに画像の説明を入力してください

左の画像は、わずかに色付けされたピクセルレベルの強度データを含む強度マップです。

デビッドベイツを助けることを願っています

于 2012-07-01T21:33:30.957 に答える
2

これは、公式のKinectSDKでは自動的に実行できません。ただし、OpenNIと呼ばれる代替SDKで実装されているため、ユーザーが構成するポイントのセットを取得できます。使用したくない場合は、ユーザーを背景から分離するかなり簡単な方法を提案できます。ユーザーのz位置がわかっているので、zが0からuserZ+体の厚さを表す値までのポイントを取ることができます。

もう1つのアイデアは、いくつかのジョイント(または複数のジョイント)から開始して、距離がスムーズに変化している場合にのみポイントを取得するポイントクラウドをウォークオーバーすることです。これは、バックグラウンドポイント、境界ボディ、および次のボディポイントを取得すると、距離の低下が簡単に目立つためです。ここでの問題は、床の遷移がスムーズであるため、床を体の一部として数え始めることです。したがって、最も低い(足首)関節を使用して検証する必要があります。

または、PCL( http://docs.pointclouds.org/trunk/group__segmentation.html )でセグメンテーションを使用することもできますが、足の床の問題がそこで解決されるかどうかはわかりません。彼らはそれでうまくいくようです(http://pointclouds.org/documentation/tutorials/planar_segmentation.php)。

于 2012-06-13T22:30:05.987 に答える
0

Kinect for Windows SDK v1.5には、このために変更できるサンプルがあります。

サンプル名:depth-d3dまたはdepthwithcolor-d3d。

どちらも点群を行います。

于 2012-06-14T00:35:02.100 に答える