Kinect 作为运动传感器
Posted
技术标签:
【中文标题】Kinect 作为运动传感器【英文标题】:Kinect as Motion Sensor 【发布时间】:2015-02-06 09:54:15 【问题描述】:我正计划创建一个执行以下操作的应用程序:http://www.zonetrigger.com/articles/Kinect-software/
这意味着,我希望能够使用 Kinect 设置“触发区域”,它是 3d 图像。现在我知道微软声称 Kinect 可以检测多达 6 个人的骨架。 然而,对我来说,检测是否有东西进入触发区以及在哪里就足够了。
有谁知道 Kinect 是否可以被编程为一个简单的运动传感器,因此它可以检测超过 6 个条目?
【问题讨论】:
【参考方案1】:众所周知,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 中指定像素出现的确切位置,您可以做任何您想做的事情。这里有更多的指针:
您可以使用 openCV 来简化可视化。要在初始化后从 Kinect 读取帧,您只需要这样的内容:
Mat inputMat = Mat(h, w, CV_16U, (void*) depth_gen.GetData());
您可以使用histogram equalization 轻松可视化深度图(它会在您可用的 255 个灰色级别中以最佳方式分布 10000 个 Kinect 级别)
有时需要将具有相似深度的空间上接近的像素分组在一起进行对象分割。几年前我这样做了,参见this,但必须删除对象所在的地板和/或公共表面,否则所有对象都会连接并提取为一个大段。
【讨论】:
以上是关于Kinect 作为运动传感器的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 使用KinectGrabber / Kinect2Grabber从Kinect v1 / v2传感器检索的pcl :: PointCloud <pcl :: PointXYZRGBA