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

时间:2019-07-16 12:56:46

标签: c# kinect kinect-sdk

我正在使用kinect v2。我想将kinect骨架坐标转换为现实生活中的测量值。我在这里读过:Understanding Kinect V2 Joints and Coordinate System

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

1 个答案:

答案 0 :(得分:2)

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

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

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

然后,您需要将关节坐标从Kinect的摄影空间转换为真实的xyz坐标。

请参见Eddy Escardo-Raffo的the marked answer at this post "FloorClipPlane & Joint Data correlation" [MSFT]

  

您需要做的是从笛卡尔空间进行坐标转换   由Kinect的视点的基向量定义(我们称之为   它们KV)到由所需基向量定义的笛卡尔空间中   (我们叫这些DV)。

     

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

     

x:[1、0、0]

     

y:[0,1,0]

     

z:[0、0、1]

     

现在,当您将摄像机向上倾斜角度A时,x轴保持不变   但y-z平面旋转了A(即:它精确地对应于a   绕X轴逆时针旋转),因此KV的基本矢量   (就DV的基本向量而言)

     

x:[1、0、0]

     

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

     

z:[0,罪A,cos A]

     

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


您可能还会发现此答案有帮助:Sergio's answer to "Transform world space using Kinect FloorClipPlane to move origin to floor while keeping orientation"