これは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を掛けたい場合は、
ありがとうございました!私はまだ深い価値を得るためにビットシフトのビジネスを理解していませんが、まさに私が後にしたものです。 –
私はDepthImageToSkeletonメソッドがKinectSensorオブジェクトのMapDepthToSkeletonPointにリファクタリングされていると信じています –
http://arena.openni.org/OpenNIArena/Applications/ViewApp.aspx?app_id=426 – EdgarT