- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Kinect 计算人的高度。这是我计算高度的方法(这段代码不是很复杂,仅用于测试目的):
double h2s = Math.Sqrt(Math.Pow(headX - shoulderCenterX, 2) + Math.Pow(headY - shoulderCenterY, 2)+ Math.Pow(headZ - shoulderCenterZ, 2));
double s2hip = Math.Sqrt(Math.Pow(shoulderCenterX - hipX, 2) + Math.Pow(shoulderCenterY - hipY, 2) + Math.Pow(shoulderCenterZ - hipZ, 2));
double hip2Lhip = Math.Sqrt(Math.Pow(hipX - hipLeftX, 2) + Math.Pow(hipY - hipLeftY, 2) + Math.Pow(hipZ - hipLeftZ, 2));
double Lhip2kneeL = Math.Sqrt(Math.Pow(hipLeftX - kneeLeftX, 2) + Math.Pow(hipLeftY - kneeLeftY, 2) + Math.Pow(hipLeftZ - kneeLeftZ, 2));
double kneeL2ankle = Math.Sqrt(Math.Pow(kneeLeftX - ankleLeftX, 2) + Math.Pow(kneeLeftY - ankleLeftY, 2) + Math.Pow(kneeLeftZ - ankleLeftZ, 2));
double heigth = h2s + s2hip + hip2Lhip + Lhip2kneeL + kneeL2ankle;
vyskatextbox.Text = heigth.ToString();
我没有收到任何错误,但问题是它计算我的高度是错误的。我得到的数字在 3 到 11 之间,具体取决于我与 Kinect 的距离。可能出什么问题了?数字可以改变吗?还是无论如何都应该保持不变?另外为什么我会得到像 11 (m) 这样的数字?
最佳答案
我在您的代码中看到一个 shoulderCenter
,因此您可能使用的是 Microsoft Kinect SDK v1.x。在本例中,骨骼关节如下:
假设我们有一个可以计算两个关节之间距离的函数。我们将此函数命名为 d(joint1, joint2)
。
还假设我们定义了一个可以计算两个关节之间的平均点的函数(请注意,以下只是伪代码):
function avg(joint1, joint2) {
avg_joint.x = (joint1.x + joint2.x) / 2.0;
avg_joint.y = (joint1.y + joint2.y) / 2.0;
avg_joint.z = (joint1.z + joint2.z) / 2.0;
return avg_joint;
}
估计用户高度的一个很好的算法可以是以下算法(请注意,它只是一个伪代码):
torso_height = d(HEAD, SHOULDER_CENTER) +
d(SHOULDER_CENTER, SPINE) +
d(SPINE, HIP_CENTER) +
d(HIP_CENTER, avg(HIP_RIGHT, HIP_LEFT));
left_leg_height = d(HIP_LEFT, KNEE_LEFT) +
d(KNEE_LEFT, ANKLE_LEFT) +
d(ANKLE_LEFT, FOOT_LEFT);
right_leg_height = d(HIP_RIGHT, KNEE_RIGHT) +
d(KNEE_RIGHT, ANKLE_RIGHT) +
d(ANKLE_RIGHT, FOOT_RIGHT);
tot_height = torso_height +
(left_leg_height + right_leg_height) / 2.0;
如果所有关节都得到很好的跟踪,则该算法效果非常好。然而,有可能(实际上经常发生)某些关节是推断的。在 this page from the documentation on MSDN ,您可以了解如何测试 C# 中是否推断出关节。
如果推断出某个关节,其位置错误的可能性就会增加。因此高度估计失败的可能性也会增加。
可以使用以下方法来测试所有关节是否都跟踪良好。如果至少一个关节没有被很好地跟踪,它会返回false
;否则返回true
:
function areJointsWellTracked(JointCollection joints)
{
foreach (Joint joint in joints)
if(joint.TrackingState != JointTrackingState.Tracked)
return false;
return true;
}
因此,要改进用户的高度估计,您可以做的就是仅在所有关节都得到良好跟踪的情况下才进行计算。
此外,请考虑始终提供多个最后高度值的平均值的可能性。例如,您可以记住数组中最后十个高度值,然后每次提供这些值的平均值。这将有助于减少测量中噪音的影响。
您的代码似乎是我刚刚描述的算法的简化版本。因此,您可以获得这些奇怪值的唯一原因是跟踪效果不佳。我的建议是尝试使用前面提到的 areJointsWellTracked
方法,并仅在所有关节都被很好跟踪的情况下估计高度。
对于使用 SDK v2 的开发人员,请注意骨骼关节的定义与 SDK v1.x 中不同。下图显示了这种差异:
由于某些关节的位置和定义不同,上述评估高度的算法应编辑如下:
torso_height = d(HEAD, NECK)+
d(NECK, SPINE_SHOULDER) +
d(SPINE_SHOULDER, SPINE_MID) +
d(SPINE_MID, SPINE_BASE) +
d(SPINE_BASE, avg(HIP_RIGHT, HIP_LEFT));
left_leg_height = d(HIP_LEFT, KNEE_LEFT) +
d(KNEE_LEFT, ANKLE_LEFT) +
d(ANKLE_LEFT, FOOT_LEFT);
right_leg_height = d(HIP_RIGHT, KNEE_RIGHT) +
d(KNEE_RIGHT, ANKLE_RIGHT) +
d(ANKLE_RIGHT, FOOT_RIGHT);
tot_height = torso_height +
(left_leg_height + right_leg_height) / 2.0;
您可以在 this link 找到有关如何使用 Microsoft Kinect SDK v2 评估用户高度的有趣讨论。 .
关于c# - 使用 Kinect 测量人的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30462391/
我在这里有点困惑。 Kinect 如何计算深度 : 我的理解是 IR 投影仪抛出一个图案,该图案被 IR 摄像机反射回来并读取。 现在红外摄像机知道特定深度的模式。利用传入模式和已知模式之间的差异来计
我希望使用 Kinect ToF 相机进行编程,但是我不确定这样做的硬件和软件要求。我遇到了一些涵盖这个主题的文章/书籍,但似乎有一些不一致的地方让我有些困惑。 问题 我需要购买什么 Kinect 产
我正在探索 kinect 的开发,希望能够识别手指而不是整只手。 kinect 官方 SDK 的骨骼 API 只有手关节 - 没有手指跟踪的规定。我还了解到,最近微软在新的 SDK 中包含了抓握识别
我正在探索 kinect 的开发,希望能够识别手指而不是整只手。 kinect 官方 SDK 的骨骼 API 只有手关节 - 没有手指跟踪的规定。我还了解到,最近微软在新的 SDK 中包含了抓握识别
这个问题与 Kaggle/CHALEARN 手势识别挑战有关。 您将获得大量匹配 RGB 和深度视频的训练集,这些视频是从 Kinect 录制的。我想在这些视频上使用 Kinect SDK 的骨骼跟踪
我希望我的几个开发人员立即开始使用 Kinect SDK,而且时间紧迫。因为他们不在美国,所以我需要花太多时间为他们购买 Kinect 以及在 PC 上使用它所需的电缆。 有没有一种方法可以让他们在没
我正在尝试使用 Xbox 360 的 Kinect 开发一个有趣的人脸识别应用程序。我想知道应该使用哪个 SDK 和 Visual Studio 版本才能最好地访问 Kinect。 最佳答案 Is K
我正在尝试创建一个应用程序来放大和缩小图像并通过 Kinect 旋转图像。到目前为止,它适用于任何一种情况。我想要的是,如果我旋转了图像,则在缩放时会保存新值,因此我会放大已旋转 X 度的图像。我现在
很难说出这里问的是什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或言辞激烈,无法以目前的形式合理回答。如需帮助澄清此问题以便可以重新打开,visit the help center . 9年前关闭
我正在研究一种扩展方法,将一个骨架移动到 kinect 字段 os View 中的所需位置。 我的代码接收要移动的骨骼和命运位置,我计算接收到的骨骼臀部中心与命运位置之间的距离以找到how much
给定从 Kinect 深度图获得的两个连续 3D 点云 1 和 2(不是整个云,比如说使用 OpenCV 的 GoodFeaturesToMatch 从云中选择的 100 个点),我想从 1 到 2
任何人都可以使用 Raspberry Pi 从 Kinect 获取相机数据吗? 我们想制作一个无线 Kinect 使用以太网或 WiFi 连接它。否则,请告诉我您是否有可行的替代方案。 最佳答案 要回
例如,我站在 Kinect 前面。 Kinect 可以识别关节,并将它们作为数据结构公开。到目前为止我已经很清楚了。 那么,我们能否将高度定义为头关节 - ((LeftAnkle + RightAnk
我尝试将从 Kinect 接收的图像保存为 png。我从包装中取出了一个 kinect 样本,它在两个平面上显示了深度和颜色图片,我对它们进行了修改。我尝试了不同的方法,例如直接保存 color32
kinect 真的很新。我正在尝试阅读我找到的 Material 。我找到了技术规范和 .net API 文档,但可以弄清楚我正在尝试做的事情是否可行: 我可以指示 kinect 物理移动相机吗? (
据说 Microsoft SDK 可以访问 Kinect 的内在参数,但有人知道它返回的深度图像是否实际上是不失真的吗?我找不到任何相关内容。 如果我脱离主题,请告诉我,尽管我认为这是一个隐式编程问题
由于传感器之间存在红外干扰,因此使用多个 Kinect v1 传感器非常困难。 根据我读到的内容 this gamastura article ,微软通过 Kinect v2 传感器测量深度的飞行时间
我只是对 Kinect v2 的主动红外图像和深度图像之间的差异理解感到困惑。谁能告诉我主动红外图像与深度图像相比有什么特殊功能? 最佳答案 在深度图像中,像素的值与通过飞行时间测量的距相机的距离相关
我可以从 Kinect 获取深度帧,然后修改帧中的数据。 现在我想使用修改后的深度帧来获取骨架数据。 我该怎么做? 最佳答案 好吧,我发现使用 microsoft kinect sdks 无法做到这一
This programming guide暗示这是可能的,所以我想知道到底是什么。 但是,现在它不起作用。 主机操作系统为 Vista 64 位,VMWare Workstation 6.5.3 运
我是一名优秀的程序员,十分优秀!