Kinect应用程序的源逆向工程

问题描述 投票:2回答:2

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

顺便说一下,项目的想法是用手控制PowerPoint,你可以找到源代码here

作者使用此代码:

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表达式,所以我只需要找出原因?

c# wpf kinect kinect-sdk
2个回答
2
投票

它是一个距离度量,用于确定最接近Kinect传感器的骨架。

在Skeleton Space中,Z是距离Kinect传感器的距离(参见here)。

如果你想到房间被分成左半部分和右半部分,通过Kinect传感器的一条线......那么X就是离那条线有多远的距离。向左或向右多远。

这也是使用X的绝对值的原因 - 代码看起来Skeleton距离假设的分界线有多远。

所以这段代码看起来身体离传感器有多远(Z),然后将它与左或右(X)的距离相乘。这是一种有点原始的距离决定。 (人们本来期望使用毕达哥拉斯定理,但也许这被认为太慢了?)

代码采用FirstOrDefault Skeleton,其中这些Skeletons按此距离度量排序。


2
投票

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

考虑同一z坐标处的两个对象和原点处的摄像机。最接近的是具有较小水平(x)距离的那个。

© www.soinside.com 2019 - 2024. All rights reserved.