gpt4 book ai didi

c# - Kinect 2 不一致的 FloorClipPlane 读取

转载 作者:行者123 更新时间:2023-11-30 23:34:08 24 4
gpt4 key购买 nike

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

注意:地板本身没有倾斜,Kinect 支架也没有倾斜。

我用 Kinect 1 测试了它,得到了相同的结果。当我远离或靠近相机时,拍摄对象的头部高度(Y 轴)的值也会发生变化。相机倾斜或视线无关紧要。 FloorClipPlane方程中的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;

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

最佳答案

FloorClipPlane 以 hessian 范式表示 - 如解释的那样 in the docs .具体来说,您的 A、B 和 C 值折衷了从相机原点(Kinect 的中心)到地板平面的单位矢量,因此它与地板平面产生垂直相交。 D 是该矢量的大小(从相机原点到地板平面的距离)。

即使您认为地板是平的并且 Kinect 与地面平行,您也会遇到透视变形问题,这意味着 body 位置(在深度空间中测量)会随着您越来越近而改变。

要解决此问题,您需要提供 3D 坐标值和地板平面作为输入,然后它们会返回您想要的结果,即从地板平面到关节的测量距离:

1

// 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))));

希望对您有所帮助。在没有看到您具体在做什么的情况下,无法进一步详细说明您从深度到颜色的映射可能会在这里做什么

关于c# - Kinect 2 不一致的 FloorClipPlane 读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33543168/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com