Kinect调查报告(二)

来源:互联网 发布:linux 调用.so 参数 编辑:程序博客网 时间:2024/04/29 02:16

深度信息

    微软的深度信息是来自主动探测(相对mark等方法而言),既发射一级镭射(镭射,也就是激光,快跑!其实也就是红外线,这种级别连细菌都杀不死,对人体无害。人看不到它,蚊子表示毫无压力,所以也就有了红外线驱蚊装置)在场景中形成散斑-Laser Speckle; 将整个空间加上了标记。Kinect采用近红外线(医学上把红外线分为近红外和远红外)对测量空间进行编码,经感应器读取编码的光线,交由晶片运算进行解码后,产生成一张具有深度的图像。

    好吧,直入正题。根据项目的要求,你可能需要带玩家索引的深度图或者不带玩家的深度图。初始化为NUI_INITIALIZE_FLAG_USES_DEPTH_AND_PLAYER_INDEX状态就是带玩家索引状态,这时微软为你提取出场景中的人的位置(像素位置)。初始化为NUI_INITIALIZE_FLAG_USES_DEPTH  状态就是纯深度图,如果你想在后者状态下找玩家,对不起,不可以,你以为微软有这么智能么?Kinect很委屈,你都没初始化我带玩家索引,你还让我提取玩家?每个像素(空间位置)的深度信息用16位的USHORT类型表示,上面讨论的带不带玩家索引就在这个16位数据上体现。带玩家索引的数据,高13位表示深度(距离)信息,低3位表示玩家索引(为什么要低3位代表人?歧视?),如果要提取深度信息,那你就对这个数据进行移位操作呗。怎么移位?你猜!

           深度数据的取值范围是 0.8~3.84。如果脱离这个范围,值则为0。另外,光照对数据有效性有影响,特别是发光反光(玻璃)的物体和头发(松软有间隙)对深度信息探测影响很大。

前不久,遇到一哥们纠结与深度图和灰度图的问题。应该是先有的深度图(场景物体到Kinect的距离),你想怎么把这个距离信息可视化显示出来呢?灰度图可以,伪彩色也可以啊,why not? 当然了,灰度图只有256个级差,伪彩色有更多的选择。请看下面的伪彩图

    微软说精度是1mm,如果抖动的数据也算的话,我就不说什么了。在这里也有一个小技巧,你可以用一个灰度级表示5毫米,这样灰度图也可以表示256*5mm


 看了下面的视频,你会对微软对深度信息的获取有更深更直观的理解。

http://static.youku.com/v1.0.0202/v/swf/loader.swf?VideoIDS=XMjIwMTM4NDE2&embedid=MTE1LjI0LjI0MC4xNjUCNTUwMzQ2MDQCd3d3Lnhib3gtc2t5ZXIuY29tAi9zaG93dGhyZWFkLnBocA%3D%3D