繁体   English   中英

Kinect应用程序的源反向工程

[英]Source reverse engineering of a Kinect app

我当时正在开发Kinect相机的开源应用程序,但是在阅读源代码时遇到了问题。

顺便说一下,该项目的想法是用手控制PowerPoint,您可以在此处找到源代码。

作者使用以下代码:

Skeleton closestSkeleton = skeletons.Where(s => s.TrackingState == SkeletonTrackingState.Tracked)
    .OrderBy(s => s.Position.Z * Math.Abs(s.Position.X))
    .FirstOrDefault();

谁能帮我找出s => s.Position.Z * Math.Abs(s.Position.X)

意思是说,我知道这是一个lambda表达式,所以我只需要弄清楚为什么?

这是一个距离度量标准,用于确定最接近Kinect传感器的骨骼。

在骨架空间中,Z是距Kinect传感器的距离(请参见此处 )。

如果您认为房间被Kinect传感器的一条线分为左半部分和右半部分...,那么X表示某物与该线有多远。 向左或向右多远。

这也是为什么使用X的绝对值的原因-代码看起来骨架与该假定分界线相距多远。

因此,此代码看起来是人体离传感器的距离(Z)多远,然后乘以它向左或向右的距离(X)多远。 这是对距离的某种原始的确定。 (本来可以使用勾股定理的,但是也许那太慢了?)

该代码采用FirstOrDefault骨架,其中这些骨架按此距离度量排序。

s => s.Position.Z * Math.Abs(s.Position.X)在OrderBy语句中,用作订购所有检测到的物体的数量。 它根据径向距离而不是正交的Z分离对骨骼进行加权。

考虑两个对象在相同的z坐标处,而摄影机在原点。 最接近的一个是水平(x)距离较小的那个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM