Kinect作为运动传感器

时间:2015-02-06 09:54:16

标签: computer-vision kinect motion-detection

我打算创建一个类似这样的应用程序:http://www.zonetrigger.com/articles/Kinect-software/

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

有没有人知道Kinect是否可以编程为简单的运动传感器,因此它可以检测超过6个条目?

1 个答案:

答案 0 :(得分:2)

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

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

从图像中心(不是左上角!)计算行和col,焦点是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但是必须删除对象所在的地板和/或公共表面,否则所有对象都被连接并提取为一个大段。