Light coding,顾名思义就是用光源照明给需要测量的空间编上码,说到底还是结构光技术。但与传统的结构光方法不同的是,他的光源打出去的并不是一副周期性变化的二维的图像编码,而是一个具有三维纵深的“体编码”。这种光源叫做激光散斑(laser speckle),是当激光照射到粗糙物体或穿透毛玻璃后形成的随机衍射斑点。
这些散斑具有高度的随机性,而且会随着距离的不同变换图案。也就是说空间中任意两处的散斑图案都是不同的。只要在空间中打上这样的结构光,整个空间就都被做了标记,把一个物体放进这个空间,只要看看物体上面的散斑图案,就可以知道这个物体在什么位置了。当然,在这之前要把整个空间的散斑图案都记录下来,所以要先做一次光源的标定。在PrimeSense的专利上,标定的方法是这样的:每隔一段距离,取一个参考平面,把参考平面上的散斑图案记录下来。假设Natal规定的用户活动空间是距离电视机1米到4米的范围,每隔10cm取一个参考平面,那么标定下来我们就已经保存了30幅散斑图像。需要进行测量的时候,拍摄一副待测场景的散斑图像,将这幅图像和我们保存下来的30幅参考图像依次做互相关运算,这样我们会得到30幅相关度图像,而空间中有物体存在的位置,在相关度图像上就会显示出峰值。把这些峰值一层层叠在一起,再经过一些插值,就会得到整个场景的三维形状了
墙距离Kinect很远,所以被一种颜色标注,而人比较近,就用另一种颜色标注了。这时也许会有人问:Kinect怎么知道面前站的是人还是大象(这两个好像体积差别很大)。在得到深度信息后,Kinect会像切鱼片一样,按照深度由小到大得到很多切面图像,如这张图里人和墙就在不同的切面图像里了。下一步就是对不同切面的图像进行分析,假如这个切面图像里有和人体轮廓相似的区域,Kinect就会激动的跳起来,说:“捉住你了,小子。”然后就会在这个深度跟踪人体的切面图像,并且识别出手和腿和脑袋(这部分就是图像识别的算法了,简单来说就是下面两根细的就是脚,上面凸出的就是头)。
就要大功告成了,你已经被锁定了,Kinect会从上到下扫描你,然后根据你的身高给逐步判断出你的膝盖在哪,手掌在哪,肚子在哪,并把这些相对的位置数据绑定到一个虚拟的骨骼上面,这样,就完成了真人到虚拟人的映射。
到这里,也许有人发现RGB摄像机(也就是普通的出真实图像的摄像机,你手机上那个)貌似没有用到……是的,就人体识别和跟踪来说,RGB摄像机没有任何用处,华硕类似的体感设备Xtion上就没有,之所以装这个摄像机,是为应用做准备的。
整个Kinect其实就是一个大蝙蝠,红外投射器不断向外发出红外结构光,就相当于蝙蝠向外发出的声波,红外结构光照到不同距离的地方强度会不一样,如同声波会衰减一样。红外感应器呢,相当于蝙蝠的耳朵,用来接收反馈的消息,不同强度的结构光会在红外感应器上产生不同强度的感应,这样,Kinect就知道了面前物体的深度信息,将不同深度的物体区别开来,如下图所示:
墙距离Kinect很远,所以被一种颜色标注,而人比较近,就用另一种颜色标注了。这时也许会有人问:Kinect怎么知道面前站的是人还是大象(这两个好像体积差别很大)。在得到深度信息后,Kinect会像切鱼片一样,按照深度由小到大得到很多切面图像,如这张图里人和墙就在不同的切面图像里了。下一步就是对不同切面的图像进行分析,假如这个切面图像里有和人体轮廓相似的区域,Kinect就会激动的跳起来,说:“捉住你了,小子。”然后就会在这个深度跟踪人体的切面图像,并且识别出手和腿和脑袋(这部分就是图像识别的算法了,简单来说就是下面两根细的就是脚,上面凸出的就是头)。
就要大功告成了,你已经被锁定了,Kinect会从上到下扫描你,然后根据你的身高给逐步判断出你的膝盖在哪,手掌在哪,肚子在哪,并把这些相对的位置数据绑定到一个虚拟的骨骼上面,这样,就完成了真人到虚拟人的映射。
到这里,也许有人发现RGB摄像机(也就是普通的出真实图像的摄像机,你手机上那个)貌似没有用到……是的,就人体识别和跟踪来说,RGB摄像机没有任何用处,华硕类似的体感设备Xtion上就没有,之所以装这个摄像机,是为应用做准备的。