调整kinect区域中手形光标的速度

时间:2014-07-14 11:19:19

标签: kinect kinect-interaction

我正在使用Kinect SDK 1.8,我正在使用默认的Kinect控件。 KinectRegion显示Microsoft.Kinect.Toolkit.Controls的手形光标。但是手形光标太快而且敏感。我希望它能让它变慢,这样我的Kinect应用程序的最终用户就可以在屏幕上轻松控制光标。我尝试使用AccelerometerGetCurrentReading()(第962行)并尝试使用KinectAdaptor.cs(第299行)handPointer.X,Y,Z,但没有取得任何成功。可以帮助一些人。 我已经完成了人机界面指南并尝试了Kinect交互演示,但它的工作速度与手形光标相同,就像在我的应用程序中工作一样。 这有什么工作吗? 或者任何控制PHIZ中手形光标速度的属性,将来会发布。

1 个答案:

答案 0 :(得分:2)

我不知道有任何内置的解决方案。但是,如果您愿意在中间生成一些代码,那么您可以采取一些技巧。

你说有两个问题

  1. Kinect光标速度太快(即手的移动量在现实世界中,光标在屏幕上移动过多。

  2. Kinect光标过于敏感。 (即Kinect的动作难以控制)

  3. 对于#1,我不确定cursor->屏幕映射是否是绝对的。如果您将手放在Kinect视觉的边缘,它是否与计算机屏幕的边缘相匹配?如果是这样,可能很难调整光标的速度(也称为增益)。一个hack-y解决方案可以是让你的身体远离屏幕移动,这样你在物理空间中的移动就会更大。

    对于#2,您可以实现基本的低通滤波器。这意味着大型动作通过"过滤器,但小的,紧张的动作被忽略。最简单的方法是运行平均值。

    Point CurrentKinectPoint; //this is the filtered position of the mouse cursor
    const double FILTER_FACTOR = 0.5;
    void UpdateKinectControlPoint(Point NewPoint) {
        CurrentKinectPoint.x = CurrentKinectPoint.x * FILTER_FACTOR + NewPoint.x * (1 - FILTER_FACTOR);
        CurrentKinectPoint.y = CurrentKinectPoint.y * FILTER_FACTOR + NewPoint.y * (1 - FILTER_FACTOR);
    }
    

    我希望这对至少在高层有帮助。