Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.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# Kinect横向骨架显示_C#_Kinect - Fatal编程技术网

C# Kinect横向骨架显示

C# Kinect横向骨架显示,c#,kinect,C#,Kinect,我正在使用Kinect和Windows Kinect SDK 1.5开发一个游戏。Kinect相机放在桌子上,我侧着身子站在Kinect旁边。 我想显示播放器的骨架,如图1和图2所示。 图1 图2 这些都需要通过Kinect骨骼流检测关节的位置。但在大多数情况下,当玩家侧身站立时,Kinect无法检测到隐藏在后面的某些关节。如图1所示,当我重叠手臂时,我不希望隐藏手臂的关节显示在屏幕上。我只想展示我左臂的关节。另一种情况是,当我以正常方式放置手臂时,如图2所示,我希望同时显示这两种手臂 我的想法

我正在使用Kinect和Windows Kinect SDK 1.5开发一个游戏。Kinect相机放在桌子上,我侧着身子站在Kinect旁边。 我想显示播放器的骨架,如图1和图2所示。 图1 图2

这些都需要通过Kinect骨骼流检测关节的位置。但在大多数情况下,当玩家侧身站立时,Kinect无法检测到隐藏在后面的某些关节。如图1所示,当我重叠手臂时,我不希望隐藏手臂的关节显示在屏幕上。我只想展示我左臂的关节。另一种情况是,当我以正常方式放置手臂时,如图2所示,我希望同时显示这两种手臂

我的想法是使用关节的位置信息和跟踪状态来确定一只手臂是否位于身体另一部分的后面(有多种重叠,手臂-手臂-手臂-手臂-身体,手臂-头部-手臂-腿)。但我认为仅仅不显示Kinect未跟踪的关节是不够的。也许我们可以通过计算两个手腕、两个肘部和两个肩膀之间的距离来检测两个手臂是否重叠。如果两个手腕和两个肘部之间的距离都在阈值内,则两个手臂存在重叠,我们可以仅显示跟踪的手臂骨架的关节

但另一个问题是,手臂和身体其他部位重叠的方式有很多种,腿也是如此。所以这个解决方案需要很多阈值和检查才能显示。此外,我不确定这个解决方案的效果如何


你们有更酷的想法来解决这个问题吗?

看看v1.5 SDK工具包示例附带的
SkeletonBasics WPF
示例。它将向你展示你想要做的类似动作

可能最感兴趣的代码块是:

foreach (Joint joint in skeleton.Joints)
{
    Brush drawBrush = null;

    if (joint.TrackingState == JointTrackingState.Tracked)
    {
        drawBrush = this.trackedJointBrush;
    }
    else if (joint.TrackingState == JointTrackingState.Inferred)
    {
        drawBrush = this.inferredJointBrush;
    }

    if (drawBrush != null)
    {
        drawingContext.DrawEllipse(drawBrush, null, this.SkeletonPointToScreen(joint.Position), JointThickness, JointThickness);
    }
}
注意
JointTrackingState.推断的
检查。在本演示中,关节将继续显示,但会变为黄色。在你的情况下,你可以把它们藏起来
JointTracingState
还具有
NotTracked
枚举,根据您的情况,该枚举也可能有用

在本例中,骨骼也仅在
跟踪的关节之间绘制


顺便说一下,截至本文撰写之时,官方的Kinect for Windows SDK版本是v1.6。您可能需要了解更新情况。

这是的一个完全相同的版本,因此只需看看,它解释了Kinect的功能以及为什么这不起作用,以及如何使其起作用的一些尝试。从本质上讲,他是说Kinect是用来追踪人们的脸或背的,但会将其解释为他们的正面。横向跟踪不起作用,因为Kinect只能看到你一半的关节,而必须估计其余的关节,这会导致糟糕的结果。

谢谢你的评论。我的功能是为跟踪、参考和非跟踪关节绘制不同的颜色。请看我图中的灰点是指关节(蓝点是跟踪关节)。您的问题是隐藏隐藏的关节和骨骼。推断关节是Kinect看不到(即,它们被阻止)但正在猜测的关节,而NotTracked关节则完全看不见。查看推断关节(及其与已知关节相比的z指数)将告诉您它们在何处以及如何被阻止。还是我遗漏了你的问题?谢谢你的评论。所以推断出的关节也有x,y,z位置信息,但它们不能被Kinect看到。您知道除了被阻塞之外,其他任何可能导致推断关节的情况吗?
我发现,有时即使关节和Kinect之间没有障碍物,也会推断关节。Kinect在任何时候失去特定关节的轨迹时,都会发生推断关节。这不一定是因为它是隐藏的,只是Kinect失去了它的踪迹。骨架跟踪器“猜测”其所在位置(因此“推断”),并继续提供其认为关节所在位置的x/y/z坐标。精确重复