Kinect V2 - 如何将 Kinect v2 坐标转换为现实生活中的度量?



我正在使用kinect v2。我想将 kinect 骨架坐标转换为现实生活中的测量值。我在这里阅读了: 了解 Kinect V2 关节和坐标系

据我了解,如果坐标是0.3124103X,0.5384778Y,2.244482Z,这意味着我在传感器左边0.3米,上面0.5米,传感器前面2.24米。这些坐标是我头部的坐标,传感器离地面0.5米。我的身高是1米?还是我做错了什么?是否有最佳位置或高度可以更好地计算它?也许有不同的方法来计算它?有人知道怎么做吗?谢谢:)

您需要考虑传感器的倾斜度。

在您的示例中,如果传感器正好朝前,则计算是正确的。如果 Kinect 向上倾斜,您的身高会更高。

您可以使用 BodyFrame.FloorClipPlane 计算传感器的倾斜度和传感器的高度。

然后,您需要将关节坐标从 Kinect 的相机空间转换为现实世界的 xyz 坐标。

请参阅这篇文章"FloorClipPlane和联合数据相关性"中的标记答案,作者是Eddy Escardo-Raffo [MSFT]

你需要做的是从笛卡尔空间进行坐标变换 由 Kinect 观点的基础向量定义(我们称之为 它们 KV) 进入由所需基向量定义的笛卡尔空间 (我们称之为DV)。

当摄像机完全不倾斜时,KV和DV完全相同,因此, 由于这是所需的向量空间,为简单起见,我们可以使用 表示轴的标准单位向量:

x: [1, 0, 0]

y: [0, 1, 0]

z: [0, 0, 1]

现在,当您将相机向上倾斜一个角度 A 时,x 轴保持不变 但 y-z 平面旋转 A(即:它正好对应于 绕 X 轴逆时针旋转),因此 KV 的基础向量 (就DV的基础向量而言)现在是

x: [1, 0, 0]

y: [0, cos A, -sin A]

z: [0, sin A, cos A]

将相对于KV的坐标转换为相对于DV的坐标, 您必须在转换之间执行矩阵乘法 由这些基向量定义的矩阵 KV (http://en.wikipedia.org/wiki/Transformation_matrix)和联合 您從 kinect API 接收的位置向量。这将导致 相对于 DV 的关节位置向量。


您可能还会发现此答案很有帮助:Sergio 对"使用 Kinect FloorClipPlane 转换世界空间以在保持方向的同时将原点移动到地板"的回答

最新更新