2

kinect でジョイント トラッキングを実行しようとしています (右手の中に楕円を入れるだけです)。デフォルトの 640x480 画像ですべて正常に動作します。このchannel9 ビデオに基づいています。新しい CoordinateMapper クラスを使用するように更新された私のコードはこちら

 ...
CoordinateMapper cm = new CoordinateMapper(this.KinectSensorManager.KinectSensor);
ColorImagePoint handColorPoint = cm.MapSkeletonPointToColorPoint(atualSkeleton.Joints[JointType.HandRight].Position, ColorImageFormat.RgbResolution640x480Fps30);

Canvas.SetLeft(elipseHead, (handColorPoint.X) - (elipseHead.Width / 2)); // center of the ellipse in center of the joint
Canvas.SetTop(elipseHead, (handColorPoint.Y) - (elipseHead.Height / 2));

これは機能します。質問は:

たとえば、540x380 のスケーリングされた画像でジョイント トラッキングを行うにはどうすればよいですか?

4

2 に答える 2

3

これに対する解決策は非常に簡単です。私はそれを考え出しました。

必要なのは、そのポジションに適用する何らかの要因を見つけることです。この係数は、Kinect の実際の ColorImageFormat を取得し、目的のサイズで除算して見つけることができます。例:

私がRgbResolution640x480Fps30フォーマットを使用していて、私の画像(ColorViewer)が220x240であるとしましょう。それでは、X の因数を見つけてみましょう。

double factorX = (640 / 220); // the factor is 2.90909090...

y の係数:

double factorY = (480/ 240); // the factor is 2...

次に、この係数を使用して楕円の位置を調整します。

Canvas.SetLeft(elipseHead, (handColorPoint.X / (2.909090)) - (elipseHead.Width / 2));
Canvas.SetTop(elipseHead, (handColorPoint.Y / (2)) - (elipseHead.Height / 2));
于 2012-11-21T20:29:38.423 に答える