3.3 Kinect眼里的三维世界
Kinect眼中的世界包括彩色摄像头看到的人物、用户分割后的深度图像、基于“像素级”的分析推测出来的人体部位,以及最终得到的人体关节点,如图3-15所示。后面将重点分析Kinect这一过程的实现原理。
完成从深度数据到人体骨骼数据建模这一步后,Kinect需要进一步理解、预测玩家人体的动作行为。
我们想象一下挥手这一简单动作的所有可能性:身体运动的幅度、环境差异、衣服质地颜色的不同,左右手习惯及文化造成的动作差异等。你可能无法穷举这些可能性,显然用传统编程方式是无法解决这类问题的。必须采用全新的思路:让Kinect观察你身边的世界,让它注意观察你的动作。即使Kinect从来没见过你挥过手,也能很快地从它学习过的TB级数据中猜测出你所做动作的含义。显然,真正托起Kinect这颗新星的是其背后诸多优秀的软件和算法。
3.3.1 深度数据是Kinect的精髓
在正式谈Kinect工作原理前,不妨看几个生动的例子,这有助于你理解Kinect眼里的三维世界。
- 《沉默的羔羊》中的夜视镜
如果你看过电影《沉默的羔羊》,一定会对影片最后的那段印象深刻。这段发生在漆黑的地下室,是从凶犯“野牛比尔”夜视仪的视角来拍摄的,镜头效果十分惊悚,堪称电影史上的经典。从荧屏分析来看,比尔戴的应该是微光夜视仪,不是红外式的,如图3-16所示。
红外也有主动红外和被动红外之分。第二次世界大战,美军使用的主动红外夜视仪在冲绳战役中大显身手。后来,1973年第四次中东战争中,埃及、以色列双方坦克均配有主动红外夜视仪,很多坦克因为使用红外探照灯而被对方导弹所击毁。
事实上,主动式红外夜视仪与Kinect也有一定相似之处:它们都主动发射红外,然后根据接收情况了解周边地形或敌情。
网络上曾经有这样的传言—“Kinect是根据体温红外来辨别人体,从而实现体感操作的。”这是错误的观点。不信,你可以做一个试验:在Kinect前放一个没有体温的塑料人体模特,或者一件挂着衬衣的衣架,Kinect会认为那是一个静止的人,如图3-17所示。
问:是不是只要有大字形的物体,Kinect都会努力去追踪呢?
答:你的猜测基本是正确的。当然,这个物体也必须是接近人体的大小比例,尺寸小的玩具是无法识别的,如图3-18所示,Kinect没有识别到玩具总动员中的胡迪。
红外传感器所能捕捉的只是一个人体轮廓,而且图案的“热力分布”也是反映目标的温度。根据这样的信息只能推测人体的存在但无法推断距离信息,进一步分析人的骨骼关节则是更不可能的事。另外,客厅的一杯冒着热气的咖啡也都可以成为信息干扰源。
问:不开灯可以玩Kinect游戏吗?
答:当然可以。后面我们在分析PrimeSense的Light Coding技术时,会提到一个观察实验:在漆黑的房间,通过红外夜视摄像机观察Kinect传感器投射出来的光斑,非常美丽,如图3-19所示。如果你有这样的设备(如Sony HDR-CX700E),便可以一窥究竟。
我们前面打了一个比方,Kinect作为“Xbox潜艇”的先进“声纳”,Kinect的可姿态控制的传动马达让它看起来更像是个“阵相雷达”。尽管原理不尽相同,但它们都是利用一种“波”去探测目标,通过搜集“反馈波”来了解情况。
对于Kinect有的读者可能会有以下疑问,这里一一给出答案。
问:既然Kinect通过发射近红外光源来获得深度图,那么在它是否可以看清视线范围的所有物体呢?
答:不透明的物体Kinect应该都可以看清其“深度”,毛玻璃也可以。当然,本身发光的物体会对探测带来影响,比如亮着屏幕的计算机、亮着的台灯等。
问:Kinect可以识别其他生物并进行骨骼跟踪吗?比如狗或者猫这类宠物。
答:目前尚不支持。Kinect最初是为Xbox 360新一代的体感游戏而设计的,只跟踪人体。Kinect for Windows SDK中也仅提供了人的骨骼跟踪功能,不支持小动物的骨骼跟踪。Kinect也没有机器学习过猫狗这类小动物的肢体。理论上讲,根据深度数据,你也可以写一套小动物骨骼跟踪的算法。你可以参考微软剑桥研究的图像识别相关研究。微软研究员Jamie Shotton就发表过Object recognition and segmentation in photos等相关论文,论文中的插图如图3-20所示。
微软剑桥研究院甚至还提供了“物体识别图像数据库”供你下载。可以搜索关键字“Microsoft Research Cambridge Object Recognition Image Database”找到相关链接。
以上“物体识别”属于计算机视觉的范畴,其原理是基于彩色图片像素级别的模式识别。这项技术还可以在医学影像中辅助判断肿瘤,如图3-21所示。
以上介绍的还是静态图像分割或识别技术。事实上,运动目标的跟踪和分割在医学图像处理中应用更为广泛。比如超声波由于成本低廉而被广泛运用,但超声波噪声的存在使得单帧图像中有价值的信息被淹没,采用序列图像中目标的几何连续性和时间相关性,进行动态分析,将能跟踪超声序列中心室的跳动。
第1章介绍过一个例子,通过摄像头进行道口交通流量监控、人群密度分析,也有异曲同工之处。计算机视觉技术无处不在,在安全系统、制造检验系统、医学影像分析、军事无人机等中都可以看到它的踪影。
Kinect的核心技术也是属于计算机视觉技术范畴,只不过它们分析的不是彩色图像,而是目标物体的深度数据。
Jamie Shotton和Alex Kimpman等人联合写了篇重要的论文Real-Time Human Pose Recognition in Parts from Single Depth Images。这篇论文后面会提到,它是“深度图像到骨骼跟踪”的理论基础。
- 关于肤色的一则轶闻
2010年11月3日,游戏网站GameSpot撰文称,它的两名黑人雇员在登录Kinect时,无法使用脸部识别功能。游戏过程中,肤色较深的玩家中途加入游戏时,由于系统矫正未能产生效果,Kinect经常无法识别。微软回应称,在内部测试时,任何种族和肤色的玩家都可以使用Kinect。
有网友在论坛上表示抗议说:“不能让我们总统连Kinect都玩不了。”微软则迅速做出反应并申明:“Kinect的目标是打破玩家之间的界限。在发布时,任何体型和种族的玩家均可使用这一设备。”同时,在随后的一份声明中,微软将问题归结于照明不足:“任何肤色的玩家都可以使用Kinect。与摄像机类似,它需要理想的照明,玩家如遇到脸部识别问题,应当按照说明书,调整他们的照明设置。”
2010年11月8日,美国杂志《消费者报告》(Consumer Reports)经过测试证实,微软体感游戏套装Kinect并不存在种族歧视问题。
事实上,通过前面Kinect产品设计的介绍我们知道,Kinect基于深度图像进行骨骼跟踪,即使光线不足、肤色黑的玩家一样可以自如地玩体感游戏。不信你可以穿一套黑色服装,同时把室内光线调暗试试效果。前面提到的场景关键是在“人脸识别”这个环节出了问题。Kinect游戏中的人脸识别是基于视频摄像头来判断的,在光线不足、肤色黑的情况下,是可能出现识别故障的。
通过这个轶闻我们可以知道,环境光照、衣服颜色、肤色对骨骼跟踪是没有影响的,但对Kinect for Xbox 360的“人脸识别”功能会有影响。
- Pin Point impression 3D玩具
Pin Point Impression 3D创意玩具是由一层大头针朝一个方向排列组成的模具。用手掌按压在玩具上,就可以产生手的简单3D模型,如图3-22所示。
Kinect的每一帧深度图像,其每一个像素点的数值都表达目标物体与Kinect摄像头的距离,就好比Pin Point Impression 3D玩具的一次压模。反过来也意味着,可以利用Kinect深度数据来构建周边环境三维信息。
- 等高线的启发
初中《地理》课本中有等高线的概念。把地面上海拔高度相同的点连成的闭合曲线,垂直投影到一个标准面上,并按比例缩小画在图纸上,就得到等高线。
此外,还可以用不同的颜色来代表海拔,比如“一个色分辨度代表一米的高度”。显然彩色的色分辨度更大,可以表达更为精细的距离变化,如图3-23所示。
图3-24所示是借鉴彩色等高线图绘制的Kinect深度图像,距离由远而近渐变的效果使得图像更有层次感。
我们来看一张Kinect 256灰阶的单色深度图。纯黑代表距离已经超出Kinect最远可视范围,纯白代表比Kinect最近可视范围还近,黑白间的灰色地带对应物体到传感器的物理距离,如图3-25所示。
3.3.2 2D视觉与3D视觉
数码相机是身边最为常见的影像捕捉设备,一般都是通过CCD或者CMOS传感器,最终输出一个像素矩阵,每个像素代表一个色值。这是一种二维(2D)视觉技术。
3D视觉是指除了捕捉目标的空间位置(X轴和Y轴)和颜色之外,还捕捉目标的深度(又称Z轴、范围、距离)及其周围环境。一个3D视觉系统可同时输出每个场景的地形视图和色彩视图。后面我们谈到的“结构光测量技术”就是一种实现3D视觉的技术。
当然,现实生活中还有一些生动的例子,比如医学影像上的应用,传统的X光、超声波、X光断层造影、CT技术能生成高灰阶度的2D视觉,多普勒彩色超声、核磁共振(MRI)等结合计算机图形和视觉处理技术都能合成3D视觉,如图3-26所示。
原理上,这些医疗影像设备,可根据不同的适应症情况,采用射线、超声、磁场等去探测人体部位,再结合计算机的数据合成及二维、三维视觉重现生成医疗影像。
下面我们先从传统的光学测距、结构光测量开始,详细介绍Light Coding技术和激光散斑原理,从而探究深度图像是如何形成的。