Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Kinect 2不一致的平面读数_C#_Kinect_Tracking - Fatal编程技术网

C# Kinect 2不一致的平面读数

C# Kinect 2不一致的平面读数,c#,kinect,tracking,C#,Kinect,Tracking,我已经成功地实现了地板剪辑平面来测量左脚到地板的距离,这是相当准确的。我的问题是,当我离开相机时(即左脚Z轴增加),脚到地板的距离会改变(增加) 注意:地板本身不倾斜,Kinect支架也不倾斜 我用Kinect 1对其进行了测试,得到了相同的结果。当我离开或靠近相机时,对象的头部高度(Y轴)也会改变值。不管相机是否倾斜或视线如何。在试验过程中,地板平面方程中的D值显示为一个常数 A = bodyFrame.FloorClipPlane.X;

我已经成功地实现了地板剪辑平面来测量左脚到地板的距离,这是相当准确的。我的问题是,当我离开相机时(即左脚Z轴增加),脚到地板的距离会改变(增加)

注意:地板本身不倾斜,Kinect支架也不倾斜

我用Kinect 1对其进行了测试,得到了相同的结果。当我离开或靠近相机时,对象的头部高度(Y轴)也会改变值。不管相机是否倾斜或视线如何。在试验过程中,地板平面方程中的D值显示为一个常数

                    A = bodyFrame.FloorClipPlane.X;
                    B = bodyFrame.FloorClipPlane.Y;
                    C = bodyFrame.FloorClipPlane.Z;
                    D = bodyFrame.FloorClipPlane.W;


        distanceLeftFoot = A * leftFootPosX + B * leftFootPosY + C * leftFootPosZ + D;

只是想让你们知道,我有深度和颜色之间的坐标映射。不确定这是否与问题有关。

如前所述,地板平面以黑森标准形式表示。具体而言,A、B和C值会影响从摄影机原点(Kinect的中心)到楼板平面的单位向量,从而使其与楼板平面产生垂直交点。D是该矢量的大小(从摄影机原点到地板平面的距离)

即使您认为地板是平的,并且Kinect与地面平行,也存在透视扭曲问题,这意味着身体位置(在深度空间中测量)将随着您越来越近而发生变化

要解决此问题,您需要提供三维坐标值和楼层平面作为输入,这将返回您想要的,从楼层平面到关节的测量距离:

// j is your joint - left foot or any other joint
float x = j.Position.X;
float y = j.Position.Y;
float z = j.Position.Z;
float distance = (Math.Abs((x * floorPlane.X) + (y * floorPlane.Y) + (z * floorPlane.Z) + floorPlane.W))/((float)Math.Sqrt((Math.Pow(floorPlane.X,2)) + (Math.Pow(floorPlane.Y, 2)) + (Math.Pow(floorPlane.Z, 2))));


我希望这对你有帮助。在这里,如果看不到您具体在做什么,就无法进一步阐述从深度到颜色的映射可能会产生什么影响

code double divisior=Math.Sqrt(leftfootosx*leftfootosx+leftfootosy*leftfootosy+leftfootosz*leftfootosz);浮动测试=转换为单个(除数);距离LeftFoot=(A*LeftFootOSX+B*LeftFootOSY+C*LeftFootOSZ+D)/测试我也忘了提到这个