[Kinect SDK][C#][XNA]スケルトントラッキングにスムージングをかける
Kinectのスケルトントラッキングで取得した関節の座標データは、生の値をそのまま使ってしまうと取得の際の誤差等ですこしカクカクしてしまいます。
Kinectに限らずセンサーで取得したデータを使用する際には、過去数フレーム間の平均値を使用してスムージングをかける事がしばしばあります。いわゆる「丸める」というやつです。
そこでKinectのスケルトントラッキングの値も同じようにスムージングをかけようとしていたのですが、調べてみるとKinect for Windows SDKには初めからスムージングの機能が用意されていたのでメモしておきます。
■ソースコード
kinect.Initialize(RuntimeOptions.UseSkeletalTracking);
kinect.SkeletonEngine.TransformSmooth = true;
var parameters = new TransformSmoothParameters
{
Smoothing = 0.75f,
Correction = 0.0f,
Prediction = 0.0f,
JitterRadius = 0.05f,
MaxDeviationRadius = 0.04f
};
kinect.SkeletonEngine.SmoothParameters = parameters;
kinect.SkeletonFrameReady += new EventHandler<SkeletonFrameReadyEventArgs>(nui_SkeletonFrameReady);
parametersの部分は自由に設定できます。
Smoothingを0.0fに近づければ近づけるほど、滑らかになりぬるぬる動きます。ただし、反応が遅れます。
逆に1.0fに近づけるほど生の値に近くなり、高速に動作します。
他の値は骨格予測とかに関わってくるみたいですが、自分もよくわかってないので色々試してみて下さい。