【问题标题】:Source reverse engineering of a Kinect appKinect 应用程序的源逆向工程
【发布时间】:2018-02-28 15:23:09
【问题描述】:

我正在开发 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 表达式,所以我只需要弄清楚为什么?

【问题讨论】:

  • 它按照与传感器的距离对骨架(已识别的身体)进行排序;它是通过它们的 z 值(可能是距传感器的距离 - 深度)乘以距传感器视场中心的偏移距离 (x) 来计算的。 Math.Abs​​() 函数将始终返回正数,因此推测该值一侧为正,另一侧为负。它使用 3d 笛卡尔坐标系。
  • 它只是想知道骨架离 kinect 有多远

标签: c# wpf kinect kinect-sdk


【解决方案1】:

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

在骨架空间中,Z 是与 Kinect 传感器的距离(请参阅here)。

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

这也是使用 X 的绝对值的原因 - 代码查看骨架与假设的分界线的距离。

因此,此代码查看物体与传感器的距离 (Z),然后将其乘以向左或向右的距离 (X)。这是一种有点原始的距离确定。 (人们会期望使用勾股定理,但也许这被认为太慢了?)

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-11-02
      • 1970-01-01
      • 1970-01-01
      • 2021-04-11
      • 2011-07-01
      • 2013-03-27
      • 2011-01-17
      • 1970-01-01
      • 2023-04-06
      相关资源
      最近更新 更多