Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 手部检测会导致光标抖动_C#_Kinect - Fatal编程技术网

C# 手部检测会导致光标抖动

C# 手部检测会导致光标抖动,c#,kinect,C#,Kinect,我已经编写了一个程序,使用Kinect的深度数据,并进行水滴检测以找到用户的手。然而,当使用用户的手来控制鼠标时,它会变得非常急促,这可能是因为人们不太擅长完全静止地握住身体部位 我试着根据最后十个位置平均位置,但这只会导致延迟时间,而实际上无法防止抖动。到目前为止,我使用的最佳解决方案是,如果两个方向上的像素变化小于10,则不移动光标(即,任一方向上的10像素变化都会导致移动)。这是可以的,但它仍然有点不稳定,并导致一个笨重的界面,因为你没有很好的精度 我怎样才能弥补人类形体的不稳定性,从而使

我已经编写了一个程序,使用Kinect的深度数据,并进行水滴检测以找到用户的手。然而,当使用用户的手来控制鼠标时,它会变得非常急促,这可能是因为人们不太擅长完全静止地握住身体部位

我试着根据最后十个位置平均位置,但这只会导致延迟时间,而实际上无法防止抖动。到目前为止,我使用的最佳解决方案是,如果两个方向上的像素变化小于10,则不移动光标(即,任一方向上的10像素变化都会导致移动)。这是可以的,但它仍然有点不稳定,并导致一个笨重的界面,因为你没有很好的精度


我怎样才能弥补人类形体的不稳定性,从而使鼠标不那么急促?

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

这在任何情况下都是滞后和稳定性之间的折衷

检查您的数据。您可能会发现抖动是由于Kinect的低分辨率造成的。如果是这样,则抖动距离将取决于您离Kinect摄像头的距离。当您离得太远时,相机分辨率太低,它将在一个或两个像素(立体摄像头)之间保持反弹

通过计算平均值和设定移动阈值,您的思维方向是正确的。您说您已经计算了最后10个位置的平均值,分辨率为30 fps会导致0,33秒的延迟

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

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

在进行水滴检测之前,您是否尝试将a应用于深度贴图?我在一次测试中使用了它,它极大地提高了稳定性


3到5之间的带宽给了我最好的结果(5杀死了一点fps,但它真的很平滑)。

我每秒获得30到60个样本。这与我所做的非常相似。我平均了最后三个点,如果当前点的距离超过X像素,我会清除最后一个点的队列并使用它。但是,如果手不在X像素之外,我将最后三个点和当前点取平均值,将光标设置为该平均值,并将其存储为最新点。这样,我抛弃了异常值,平滑了精细的移动,但仍然允许粗略的移动。