【问题标题】:Mapping Kinect depth readings to Unity将 Kinect 深度读数映射到 Unity
【发布时间】:2015-11-17 02:07:47
【问题描述】:

我们对使用 Microsoft Kinect 非常陌生,并且正在尝试将其连接到我们的 Unity 2D 游戏以用于课堂项目。我们课程项目的一部分要求我们将游戏投影到一个织物上,并让用户按下该织物以与游戏交互。玩家将轻敲织物以收集掉落的物体。我们正在尝试将深度图与 Kinect 一起使用,以查看用户在屏幕上点击的位置,然后我们可以看到他们正在与哪些对象进行交互。

我们无法找到将 Kinect 深度坐标转换为适用于我们游戏的坐标的方法。由于我们的设置,我们无法使用骨骼跟踪。有没有人在不使用骨架函数的情况下将 Kinect 深度坐标数据转换为 2D Unity 游戏的经验?下面是我们的设置图,以供澄清。

【问题讨论】:

  • 你看过深度帧数据吗? msdn.microsoft.com/en-us/library/… DepthImageFrame 似乎为它接收到的每个像素包含一个 .Depth 成员。您应该将用户未触摸织物的一帧作为“零深度”,然后您可以计算每个像素(或 X x Y 像素集)的差异以检测“触摸”。
  • 您好罗恩,感谢您的回复。我们已经尝试过了,但它仍然在随机位置读取“幻影触摸”。我们的主要目标也是尝试将深度函数提供给我们的 Kinect 坐标转换为我们可以在 Unity 中使用的屏幕坐标。任何帮助将不胜感激!
  • 您是否对某些帧数取平均值?
  • 我们正在对它们进行平均 - unity 游戏仍然无法正确映射坐标。我们需要一种将 Kinect 坐标导入 Unity 的方法。

标签: c# unity3d kinect kinect-sdk unity5


【解决方案1】:

您的问题似乎源于 kinect 深度和颜色流未对齐的事实。这意味着对于您获得的每个深度像素,都有一定的偏移量需要考虑。因此您必须:

在获取第一个深度帧之前,获取坐标映射器。

KinectSensor Sensor = KinectSensor.GetDefault();
CoordinateMapper mapper = Sensor.CoordinateMapper;

在这些人准备好之后。获取您的第一个深度框架。将它与映射器一起使用以填充 ColorSpacePoint 数组,如下所示:

ColorSpacePoint[] _colorPoints;
mapper.MapDepthFrameToColorSpace(DepthData, _colorPoints);

这个新填充的数组将包含映射到 kinect 相机颜色空间的深度数据。 您将开始获得关于色框内深度定位的准确可靠的数据,并使用提供的图像实际校准您的应用程序。

从那里我想您可以使用ColorSpacePoint 来确定图像中应用了触摸的位置,并使用常规颜色流对其进行可视化调试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    • 2013-05-29
    • 2012-07-31
    • 2012-03-27
    相关资源
    最近更新 更多