簡體   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