[英]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.