我正在使用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米?还是我做错了什么?是否有最佳位置或高度可以更好地进行计算?也许有另一种计算方法?有人知道怎么做吗?谢谢:)
答案 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"