手检测会导致光标抖动

时间:2011-01-28 19:26:37

标签: c# kinect

我编写了一个使用Kinect深度数据的程序,并进行blob检测以找到用户的手。然而,当使用用户的手控制鼠标时,它变得非常生涩,可能是因为人们不太擅长完全保持身体部位。

我已经尝试根据最后十个定位来平均位置,但这只会导致延迟时间而不会实际阻止抽搐。到目前为止,我使用的最佳解决方案是,如果像素变化在两个方向上都小于10,则不移动光标(即,任一方向上的10个像素变化导致移动)。这没关系,但它仍然有点生涩,导致笨重的界面,因为你的精度不高。

我怎样才能弥补人体形态的不稳定性,使鼠标不那么生涩?

3 个答案:

答案 0 :(得分:2)

无论如何,这将是滞后与稳定之间的权衡。

检查您的数据。您可能会发现抽搐是因为Kinect的分辨率低。如果是这样,将根据您与Kinect摄像机的距离确定抽搐距离。当你离得太远时,相机分辨率太低,它会在一到两个像素(立体声凸轮)之间保持弹跳。

通过计算平均值和移动阈值,您正在思考正确的方向。你说你已经计算了最后10个位置的平均值,其分辨率为30 fps会导致0.33秒的延迟。

您可能只想平均最后5个(实验),而不是平均值计算平均值。

只是一个想法;移动很少单独出现,因此您可以设置一个阈值,用于减少用于平均/均值的样本数。

答案 1 :(得分:1)

您的采样率是多少? 10个职位可能只是百分之一秒。您可能希望平均最后10秒或3秒。

答案 2 :(得分:1)

在进行斑点检测之前,您是否尝试将median filter应用于深度贴图?我在finger tracking demo中使用了它,它大大提高了稳定性。

3到5之间的带宽给了我最好的结果(5次触发fps,但它真的很流畅)。