在kinect中指定一个新的世界坐标系

时间:2013-09-19 04:39:20

标签: computer-vision kinect

如何在kinect中指定新的世界坐标系?例如,我的kinect正在移动,我需要在场景中指定一个静态世界坐标系。如果使用深度图来识别用户指定的世界坐标,那么最准确的方法是什么?由于深度图的分辨率不高,因此难以选择定义用户指定的世界坐标的精确像素。 将默认世界坐标转换为此用户指定的世界坐标系的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

您想要查看转换矩阵。这些将允许您转换一组坐标,例如旋转,平移,缩放等。有各种各样的库提供矩阵结构,如Math.NET Numerics,XNA等。

答案 1 :(得分:0)

AS Bas提到它应该是使用转换矩阵的问题。 在XNA中,有一个Matrix和一个Vector3。那里有other implementations。我没有使用C#所以我不能建议哪一个是最好的。然而,无论您使用哪个库,这个想法都是一样的:它只是一些线性代数:

  1. 使用Matrix实例及其方法轻松旋转/转换为您需要的坐标系。
  2. 将Vector3实例乘以变换矩阵,以便将新矢量导入新坐标系。 (就我在文档中看到的那样,XNA的Vector3使用Transform方法执行此操作,其他实现可能会为您提供mult()/ multiply()或仅支持*运算符在矢量和矩阵之间)
  3. 或者,如果要将自定义坐标空间转换回kinect坐标系,可以轻松获取所创建的变换矩阵的逆矩阵,并使用该变换矩阵乘以自定义坐标中的矢量/位置系统在kinet坐标系中得到一个矢量。
  4. 只要你理解线性代数中的一些概念(主要是向量和矩阵,你可能在这个阶段不需要四元数),代码部分是微不足道的。那里有很多资源,例如:

    1. 我个人发现3D Math Primer非常容易理解。虽然这些概念最初可能看起来很难,但通过视觉几何解释,线性代数更有意义,特别是如果你在视觉上思考
    2. Khan's Academy course on Linear Algebra
    3. Eric Haines(来自Autodesk)在Interactive 3D Graphics开设了Udacity课程。很好地解释和超级容易拿起。它使用的是three.js / webgl,但你应该在Transformations and Matrices课程中找到一些方便的信息。