Kinect 作为运动传感器

Kinect as Motion Sensor

我正计划创建一个执行以下操作的应用程序:http://www.zonetrigger.com/articles/Kinect-software/

这意味着,我希望能够使用 Kinect 和它的 3d 图像设置 "Trigger Zones"。现在我知道微软声称 Kinect 最多可以检测 6 个人的骨骼。 然而,对我来说,检测是否有东西进入触发区域以及位置就足够了。

有谁知道是否可以将 Kinect 编程为简单的运动传感器,以便它可以检测 6 个以上的条目?

众所周知,Kinect 无法检测到超过 5 个条目(开玩笑)。您需要做的就是从 Kinect 获取深度图 (z-map),然后使用这些公式将其转换为 3d 地图,

X = (((cols - cap_width) * Z ) / focal_length_X);
Y = (((row - cap_height)* Z ) / focal_length_Y);
Z = Z; 

其中 row 和 col 是从图像中心(不是左上角!)计算的,focal 是以像素为单位的 Kinect 焦距 (~570)。现在您可以在 3D 中指定确切位置,如果像素出现,您可以做任何您想做的事。这里有更多的建议:

  1. 为了便于可视化,可以使用openCV。要在初始化后从 Kinect 读取帧,您只需要这样的东西:

    Mat inputMat = Mat(h, w, CV_16U, (void*) depth_gen.GetData());

  2. 您可以使用 histogram equalization 轻松可视化深度图(它会在您可用的 255 个灰度级别中最佳地分布 10000 个 Kinect 级别)

  3. 有时需要将空间上接近且深度相似的像素分组在一起进行对象分割。几年前我做了这个,看到 this 但不得不删除对象所在的地板 and/or 公共表面,否则所有对象都连接并提取为一个大段。