【问题标题】:Kinect as Motion SensorKinect 作为运动传感器
【发布时间】:2015-02-06 09:54:15
【问题描述】:
【问题讨论】:
标签:
computer-vision
kinect
motion-detection
【解决方案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,但必须删除对象所在的地板和/或公共表面,否则所有对象都会连接并提取为一个大段。