论文部分内容阅读
自去年11月正式对外发布至今,Kinect在短短不到一年的时间中迅速蹿红。业界对其特殊的硬件设计也已经进行了诸多介绍,然而真正托起Kinect这颗明星的并不仅仅是其硬件设计,出众的软件算法更是其重要的制胜法宝。
微软在今年6月正式对外公布了Kinect for Windows SDK Beta,这标志着Kinect正式从游戏领域开始向受众更为广泛的PC领域迈进,并将有可能彻底改写PC人机交互界面的历史。
Kinect何以有如此强大的实力?优秀的硬件结构绝不只是解释这一问题的唯一答案,事实上,Kinect所采用的硬件多数不是什么新发明,真正托起这颗新星的是其背后诸多优秀的软件和算法,是这些软实力让Kinect卓越非凡。而做为Kinect灵魂的软件与算法有很多来自中国,来自微软亚洲研究院。
我知道你是谁
任何机器设备,无论是游戏机还是计算机,它们被人所操控,要最先明确的一件事情就是,正在操控我的人是谁?传统的游戏机通过游戏手柄和手柄所对应的Player1、Player2来进行区分。计算机通过用户账户和登录密码来限定和判别访问的用户。而对于Kinect这种完全需要借助人们肢体动作进行操控和交互的设备来说,如何区分面前的人是甲还是乙,仍旧存在很大的困难。
身份识别3法则
为了解决这个问题,微软亚洲研究院的研究员为Kinect构建了身份识别的3条基础法则,分别是人脸识别、衣服识别和体型识别,Kinect根据人的这3项特征进行综合的识别和判断,最终实现对面前人物的准确分辨。
人脸识别是整个身份识别最重要的一个组成部分,由于Kinect摄像头分辨率仅为640×480,在1.8m及以上(Kinect的设计工作距离)距离的情况下,摄像头所能提供的面部的像素数据十分有限,并不适用于进行高维计算。另外,由于用户使用Kinect的环境有很大的差异,光线的明暗、色温和人的表情都不在可控范围内,这种非控制环境的人脸识别本身也存在难度。为了能让Kinect的人脸识别更加有效,微软亚洲研究院的研究员采用了抽取人脸中层结构特征的方式,这种中频的特征虽然无法提供100%的准确识别率,但是仍旧能够提供85%左右的识别准确率。这种纯二维的图片识别算法也被应用在Windows Live Photo Gallery中,借助这种识别算法的帮助,Windows Live Photo Gallery能够识别区分照片中的人物,并据此实现照片自动分组。
对于在短时间内需要多次进行身份识别的场合,例如在进行一个游戏的过程中,一个人暂时离开游戏去接电话,之后又返回继续游戏的情况,另外一种身份识别方式会更为快捷和高效,那就是衣物识别。因为在这种短期内,人们更换服装的概率很低,为此微软亚洲研究院的研究员特别加入了衣物识别。这种识别技术首先区分人体的各个部分,如身体、四肢,之后再分别抽取不同部分的颜色和纹理,通过这些颜色和纹理总结出这一部分的表面特征。这些特征信息虽然都保存的是原始的彩色信息,但是通过一些算法可以使该识别技术对环境光线相对不敏感,以减少色温变化对识别产生的影响。例如通常在钨丝灯下的白衣服比在荧光灯下的看起来偏黄,而Kinect仍旧能够正常地识别出这是相同的一件白衣服。
体型识别是Kinect识别身份的另一个重要依据,通过抽取和分析人们体型的特征信息,如身高来进行身份判别。这种技术在某些情况下具备极高的效率和准确率。例如,识别家中身高差异明显的大人和小孩的时候,这种技术就尤为实用。这种算法十分巧妙地利用了Kinect的硬件特征,与传统的摄像头不同,Kinect能够提供包含深度信息的图像,可以上下摆动扫描人物,并可提供扫描时的俯仰角信息。借助深度信息、俯仰角、人物影像高度这3种信息可以帮助准确计算出人物的真实身高。人物与Kinect的距离即使发生变化,或者Kinect的摆放高度有变化都不会影响判断的准确性。
综合判别
为了提高识别的成功率并保证识别的效率,微软亚洲研究院综合采用上述3种识别方式的结果,并根据应用场合的不同进行合理的选择。
首先,在整个Kinect的平台体系中,人脸识别被应用在更底层的平台领域,做为系统生物识别登录的唯一依据,在用户开机使用Kinect的整个过程中都会发挥作用,而且用户的面部信息会被长期保存在Xbox360的数据库中。当用户进入某个应用的会话中,例如进入一个Kinect的游戏,游戏可以要求在进行身份识别时调用衣服识别和体型识别的数据进行更快捷和高效的身份识别。因为在特定会话过程中,这两种身份识别技术更加稳定和准确,可信任度更高。
在身份识别判断过程中,每种身份识别技术都会在完成识别过程后从3种既定答案中选择一种,即每种技术都可以给出“是”、“不是”或“不确定”的答案。系统会根据3种识别结果最后做综合性的判定。
最真实的虚拟人
CHIP曾在几年前为大家介绍过由微软亚洲研究院推出的微软卡通秀,这个工具可以对我们照片中的头像进行分析,并根据每个人的面部特征生成与真人十分接近的、惟妙惟肖的卡通头像。而在Kinect中,微软亚洲研究院的研究员设计了Avatar Kinect,这个应用采用了被称为面部追踪的技术,其允许Kinect用户通过Kinect的面部识别系统,以自身为原型建立3D版的卡通人物,我们将可以从正面、侧面等多个角度观看这个卡通人物。更重要的是这个与真人十分接近的卡通人物还能还原玩家的动作和面部表情,玩家在Kinect前的一颦一笑都会被卡通人物真实再现。多个在线玩家的卡通人物还可以置身于各种主题的3D聊天室中进行视频聊天,该项技术未来还有可能被加入到企业电话会议的应用中。
就像我们前面所说,静态的人物头像向卡通头像的转换技术微软亚洲研究院在几年前就已经提出并产品化,这是一种2D的图像技术,这种技术算法通过抓取最能反映人们面部特点的特征点信息,如眼睛周边和嘴唇周边区域的特征信息,并将这些特征点信息对应到卡通头像上,即可得到与真人十分相近的静态卡通形象。这种2D的特征提取技术在实现动态卡通影像时存在比较明显的缺陷,例如在动态预判断面部特征点在人脸表情发生变化后的位移量时往往很难准确,这一状况在表情出现巨大变化时尤为明显。直接的结果是只采用2D特征提取技术的卡通人物做出动态的表情时很可能会走样。
我们可以用一个类似的例子来解释出现这一情况的原因,如果拍摄并抓取一个人摆动小臂的特征信息,并对应生成一个卡通人物的小臂,此时在小臂需要摆动时,我们很难找到一个可靠的算法来准确预判摆动时指尖的位移量和手腕的位移量各是多少。但是当引入骨骼的概念后,即可得到指尖和手腕都是以肘关节为圆心,以相同的角速度和不同的半径运动,借助这一规律即可得到相对准确的小臂特征点运动规律,使虚拟特征点的运动规律与自然界的真实规律更贴近。
而对应到面部特征点的预判,面部的3D模型就扮演了类似骨骼的作用,为面部特征点的位移预判提供了依据。微软亚洲研究院的研究员们巧妙地利用了Kinect可以生成深度信息这一独特的特性,深度信息可以准确地反映面部的凹凸和轮廓情况,借助这些信息即可进一步获得准确的人脸3D模型。
接下来就是采用一些方式将2D算法中所抓取的特征点与通过深度信息获取的3D特征点都对应到同一个3D卡通模型中,例如可以将3D特征点投影到一个2D平面上,将这个平面上的特征点与2D算法中的特征点相互匹配。匹配后,借助2D算法生成的面部图片做为3D卡通模型的纹理贴图,而借助深度信息获得的3D特征点为面部特征点提供运动依据,使卡通模型的表情更加自然和真实。目前的Kinect可以抓取面部20~80个左右的特征点,真正在工作时,可能会在生成卡通人物的初期采用抓取较少的特征点以保障效率,之后再抓取更多的特征点以提高精度。为了尽可能地表现面部特征,微软亚洲研究院的研究员还采用了分类器等方法进行优化,目前一些眨眼等小的表情变化都可以被卡通人物反映出来。
现实照进虚拟
Kinect使我们能够惟妙惟肖地在虚拟世界中构建另外一个自己,其实不仅是人物,在微软亚洲研究院研究员的努力下,现实世界的任何一个物体都能被我们“搬”到虚拟世界中。Kinect在发布的时候曾经推出一个令人印象深刻的宣传片,一个小孩站在Kinect面前举起自己的滑板,拍下滑板正面和背面的样子,在游戏中就会出现一个与现实中几乎一模一样的虚拟滑板。
这种3D扫描成像技术以往仅仅被应用于高端的商用领域,而Kinect由于配备了独特的硬件,所以同样可以实现类似的功能。不过,尽管Kinect可以提供物体不同角度的深度图像和2D图像,但是在实际实现时还有很多比较复杂的问题需要解决。
粗糙变平滑
Kinect是一款伟大的产品,它用很低廉的价格让用户可以获得深度图像即现实物体的3D结构,但是受到成本所限,Kinect的硬件能力并不算出众。Kinect获得的深度图像分辨率比较低;另外,这种深度信息的噪声非常大,例如,现实中表面光滑的物体在经过Kinect扫描后,获得的深度信息表面却是凹凸不平的。如何通过这些粗糙的信息获得精细、平滑和可接受的输出结果是微软亚洲研究院的研究员首先面临的挑战。
微软亚洲研究院采用了一种被称为表面重构的技术来解决这个问题,这个技术可以借助物体表面的位置信息和噪声非常大的数据,重构出完整的表面。传统的平滑算法往往很难区分真正的噪声点和物体表面实际的小凹凸,微软亚洲研究院的研究员采用了泊松方程等算法进行噪声滤除。在判断某个特征点是噪声还是真实存在之前,技术算法首先抓取该点周边表面的角度和朝向的特性,进而判断这个特征点可能存在于空间的什么位置。这些根据朝向判断出的所有特征点可以形成一个虚拟的距离场。泊松方程用于帮助建立这个距离场,泊松方程认为,给一个采样点的话,可以根据这个采样点的位置,尽可能平均估计这个采样点对周围的影响,估计周围表面距离场应该是什么样。这种平均估计的方式能够带来几个好处,首先,如果真实物体表面有一个洞的话,那么根据洞附近特征点的状况及其产生的影响可以很好地扩散到洞的周围,进而获得非常平滑的形状,使这个洞的形状尽可能得到合理的填充。另外,每个特征点的最终状态和特征并不仅仅取决于它本身,还取决于周围很多点,这实际上就是一个很好的降噪过程。例如如果在采样面中有一个凸起的点,这个点周围的点在朝向特性上都没有表现出这里有凸起的趋势,那么这个点就会被识别成一个噪声点并被去除,反之就会被保留。当然受到采样精度的限制,一些十分小的表面特征信息也可能被判断为噪声并被处理掉。
对很多需要实时绘制的娱乐类应用来说,3000个顶点的人脸3D模型已经十分真实,而10000个顶点的模型就已经可以表现绝大部分的细节特征了。而目前Kinect的深度摄像头可以提供320×240的分辨率,可采集的特征点已经远远超过10000,这样的数据量用于生成多边形顶点的话已经足够,例如如果用这些采样点表现一个人脸的3D模型的话,那么实际上已经可以做得十分逼真,只是会损失皱纹等一些比较小的细节特征。目前真正影响效果的还主要是噪声,而微软亚洲研究院的这项技术可以有效地将噪声过滤,提升3D虚拟物体的展示效果。
缺陷自动补
除了解决物体表面的平滑问题外,还有很多困扰3D虚拟物体真实度的因素,例如扫描物体前后两面的时候如何对齐,如何去掉干扰信息并补足有缺陷的信息。
为了解决翻面对齐的问题,物体扫描软件内置了辅助工具,它在扫描正面的时候会生成物体的边缘图像,在用户旋转物体后,平面上会出现物体正面的轮廓线,以帮助用户更好地对准进行扫描。但是这样做会产生另外一个问题,因为用户需要用手握持旋转物体,所以要想仅仅扫描物体而不扫描人手的话,Kinect就需要具备区分人手和物体的能力,这个问题在计算机领域被称为分割。传统的分割主要通过颜色来实现,因为通常情况下手的颜色会与物体的颜色有很大的差别,但是事实上这种方法并不完善,效果也并不算好。而Kinect的好处是能够提供深度信息,通常来说物体边缘的深度信息会与手指的深度信息明显不同,因此将深度信息和颜色信息结合考虑,能够更好地将物体和手指分割开。只有极个别情况,如物体边缘过于凸凹不平,而且颜色与人的皮肤又十分接近,所以才会出现识别不准确的情况,不过这种情况十分少见。
除了对齐和边缘分割的问题外,物体边缘的深度信息数据采样会更加困难,噪声和数据损失会更大。另外,手指会挡住物体的一部分表面,这些问题都导致获取的物体表面会出现缝隙甚至漏洞,修补这些漏洞主要借助上面我们所提到的泊松方程和平滑算法,判断漏洞附近的表面朝向,进而实现自动修补。实际测试证明,这种方式基本可以解决通常物体扫描后产生的漏洞,最终生成的虚拟物体也比较理想。
Kinect未来的版本会进一步提高深度信息和图像信息的精度。非常期待看到未来的Kinect给我们日常生活带来更大的影响。
——孙剑博士 微软亚洲研究院视觉计算组高级研究员
Kinect的“枷锁”
传统工业级的3D扫描技术和设备更强调精确度和高分辨率。但是考虑到成本就必须要牺牲精度,价格便宜的设备能够被更多用户使用,给用户带来的乐趣更多。
身份识别
目前的识别技术仍旧会存在失误,比如在识别双胞胎时仍旧可能出错。事实上,目前已有的面部识别技术已经具备通过特征值准确分辨双胞胎的能力,但是受到Kinect摄像头分辨率的限制,尚无法获得满足要求的特征数据,但未来随着硬件设备的升级,类似问题将会得到很好的改善。
Avatar Kinect
对于采用USB2.0的Kinect来说,数据带宽有限,要保证流畅抓取和展现用户的特征信息,就必须有所取舍,牺牲一些细节也就在所难免。另外,在2D图像和深度图像的分辨率都不高的情况下,在目前的Kinect中仍旧无法让卡通人物百分之百地重现用户的所有特征,比如额头的皱纹或嘴边的酒窝就不得不被舍弃。
计算力的束缚
在游戏机领域,游戏机会争取把所有硬件资源、软件资源完全提供给游戏。每次游戏运行起来以后,可以认为游戏自带了功能更强大的操作系统,游戏和操作系统捆绑在一起运行,也就是说所有的系统资源基本上全部被游戏使用了。这些特殊性对Kinect技术的开发提出了更高的要求,并对Kinect的应用效果也产生了限制。
身份识别
传统的基于统计学的数据分析往往能够优化和提高数据分析的输出结果,例如搜狗拼音输入法可以通过收集网络上用户经常输入的字词来优化词库排名,来提高输入命中率。但是Xbox360并不是一台性能强大的PC,而且其绝大部分性能都要为游戏服务,身份识别这种功能并不允许占用过多的系统资源,因此其只能根据既有的识别算法模型来工作,也就是说通常不会出现用的越久识别效率和准确率会越高的情况。
3D扫描成像
事实上,将3D扫描成像是商业领域已经十分成熟的技术,但是需要强大的计算能力和比较长的处理时间。将这项技术迁移到计算性能不高的游戏机中提供给消费者使用的时候仍旧存在很大难度,计算占用的资源要非常小,同时算法应该尽可能快的生成结果。微软亚洲研究院的研究员们花了很大精力对他们在PC上开发的算法进行优化,将内存占用降到了20MB以下,并且使用CPU和GPU共同进行计算,最终使运算速度由原来普遍的20s左右缩短到2s以下。
Kinect很了不起,第一次普通用户可以用这么少的钱拿到3D的信息,从而使很多应用成为可能。
——童欣博士 微软亚洲研究院网络图形组高级研究员
微软在今年6月正式对外公布了Kinect for Windows SDK Beta,这标志着Kinect正式从游戏领域开始向受众更为广泛的PC领域迈进,并将有可能彻底改写PC人机交互界面的历史。
Kinect何以有如此强大的实力?优秀的硬件结构绝不只是解释这一问题的唯一答案,事实上,Kinect所采用的硬件多数不是什么新发明,真正托起这颗新星的是其背后诸多优秀的软件和算法,是这些软实力让Kinect卓越非凡。而做为Kinect灵魂的软件与算法有很多来自中国,来自微软亚洲研究院。
我知道你是谁
任何机器设备,无论是游戏机还是计算机,它们被人所操控,要最先明确的一件事情就是,正在操控我的人是谁?传统的游戏机通过游戏手柄和手柄所对应的Player1、Player2来进行区分。计算机通过用户账户和登录密码来限定和判别访问的用户。而对于Kinect这种完全需要借助人们肢体动作进行操控和交互的设备来说,如何区分面前的人是甲还是乙,仍旧存在很大的困难。
身份识别3法则
为了解决这个问题,微软亚洲研究院的研究员为Kinect构建了身份识别的3条基础法则,分别是人脸识别、衣服识别和体型识别,Kinect根据人的这3项特征进行综合的识别和判断,最终实现对面前人物的准确分辨。
人脸识别是整个身份识别最重要的一个组成部分,由于Kinect摄像头分辨率仅为640×480,在1.8m及以上(Kinect的设计工作距离)距离的情况下,摄像头所能提供的面部的像素数据十分有限,并不适用于进行高维计算。另外,由于用户使用Kinect的环境有很大的差异,光线的明暗、色温和人的表情都不在可控范围内,这种非控制环境的人脸识别本身也存在难度。为了能让Kinect的人脸识别更加有效,微软亚洲研究院的研究员采用了抽取人脸中层结构特征的方式,这种中频的特征虽然无法提供100%的准确识别率,但是仍旧能够提供85%左右的识别准确率。这种纯二维的图片识别算法也被应用在Windows Live Photo Gallery中,借助这种识别算法的帮助,Windows Live Photo Gallery能够识别区分照片中的人物,并据此实现照片自动分组。
对于在短时间内需要多次进行身份识别的场合,例如在进行一个游戏的过程中,一个人暂时离开游戏去接电话,之后又返回继续游戏的情况,另外一种身份识别方式会更为快捷和高效,那就是衣物识别。因为在这种短期内,人们更换服装的概率很低,为此微软亚洲研究院的研究员特别加入了衣物识别。这种识别技术首先区分人体的各个部分,如身体、四肢,之后再分别抽取不同部分的颜色和纹理,通过这些颜色和纹理总结出这一部分的表面特征。这些特征信息虽然都保存的是原始的彩色信息,但是通过一些算法可以使该识别技术对环境光线相对不敏感,以减少色温变化对识别产生的影响。例如通常在钨丝灯下的白衣服比在荧光灯下的看起来偏黄,而Kinect仍旧能够正常地识别出这是相同的一件白衣服。
体型识别是Kinect识别身份的另一个重要依据,通过抽取和分析人们体型的特征信息,如身高来进行身份判别。这种技术在某些情况下具备极高的效率和准确率。例如,识别家中身高差异明显的大人和小孩的时候,这种技术就尤为实用。这种算法十分巧妙地利用了Kinect的硬件特征,与传统的摄像头不同,Kinect能够提供包含深度信息的图像,可以上下摆动扫描人物,并可提供扫描时的俯仰角信息。借助深度信息、俯仰角、人物影像高度这3种信息可以帮助准确计算出人物的真实身高。人物与Kinect的距离即使发生变化,或者Kinect的摆放高度有变化都不会影响判断的准确性。
综合判别
为了提高识别的成功率并保证识别的效率,微软亚洲研究院综合采用上述3种识别方式的结果,并根据应用场合的不同进行合理的选择。
首先,在整个Kinect的平台体系中,人脸识别被应用在更底层的平台领域,做为系统生物识别登录的唯一依据,在用户开机使用Kinect的整个过程中都会发挥作用,而且用户的面部信息会被长期保存在Xbox360的数据库中。当用户进入某个应用的会话中,例如进入一个Kinect的游戏,游戏可以要求在进行身份识别时调用衣服识别和体型识别的数据进行更快捷和高效的身份识别。因为在特定会话过程中,这两种身份识别技术更加稳定和准确,可信任度更高。
在身份识别判断过程中,每种身份识别技术都会在完成识别过程后从3种既定答案中选择一种,即每种技术都可以给出“是”、“不是”或“不确定”的答案。系统会根据3种识别结果最后做综合性的判定。
最真实的虚拟人
CHIP曾在几年前为大家介绍过由微软亚洲研究院推出的微软卡通秀,这个工具可以对我们照片中的头像进行分析,并根据每个人的面部特征生成与真人十分接近的、惟妙惟肖的卡通头像。而在Kinect中,微软亚洲研究院的研究员设计了Avatar Kinect,这个应用采用了被称为面部追踪的技术,其允许Kinect用户通过Kinect的面部识别系统,以自身为原型建立3D版的卡通人物,我们将可以从正面、侧面等多个角度观看这个卡通人物。更重要的是这个与真人十分接近的卡通人物还能还原玩家的动作和面部表情,玩家在Kinect前的一颦一笑都会被卡通人物真实再现。多个在线玩家的卡通人物还可以置身于各种主题的3D聊天室中进行视频聊天,该项技术未来还有可能被加入到企业电话会议的应用中。
就像我们前面所说,静态的人物头像向卡通头像的转换技术微软亚洲研究院在几年前就已经提出并产品化,这是一种2D的图像技术,这种技术算法通过抓取最能反映人们面部特点的特征点信息,如眼睛周边和嘴唇周边区域的特征信息,并将这些特征点信息对应到卡通头像上,即可得到与真人十分相近的静态卡通形象。这种2D的特征提取技术在实现动态卡通影像时存在比较明显的缺陷,例如在动态预判断面部特征点在人脸表情发生变化后的位移量时往往很难准确,这一状况在表情出现巨大变化时尤为明显。直接的结果是只采用2D特征提取技术的卡通人物做出动态的表情时很可能会走样。
我们可以用一个类似的例子来解释出现这一情况的原因,如果拍摄并抓取一个人摆动小臂的特征信息,并对应生成一个卡通人物的小臂,此时在小臂需要摆动时,我们很难找到一个可靠的算法来准确预判摆动时指尖的位移量和手腕的位移量各是多少。但是当引入骨骼的概念后,即可得到指尖和手腕都是以肘关节为圆心,以相同的角速度和不同的半径运动,借助这一规律即可得到相对准确的小臂特征点运动规律,使虚拟特征点的运动规律与自然界的真实规律更贴近。
而对应到面部特征点的预判,面部的3D模型就扮演了类似骨骼的作用,为面部特征点的位移预判提供了依据。微软亚洲研究院的研究员们巧妙地利用了Kinect可以生成深度信息这一独特的特性,深度信息可以准确地反映面部的凹凸和轮廓情况,借助这些信息即可进一步获得准确的人脸3D模型。
接下来就是采用一些方式将2D算法中所抓取的特征点与通过深度信息获取的3D特征点都对应到同一个3D卡通模型中,例如可以将3D特征点投影到一个2D平面上,将这个平面上的特征点与2D算法中的特征点相互匹配。匹配后,借助2D算法生成的面部图片做为3D卡通模型的纹理贴图,而借助深度信息获得的3D特征点为面部特征点提供运动依据,使卡通模型的表情更加自然和真实。目前的Kinect可以抓取面部20~80个左右的特征点,真正在工作时,可能会在生成卡通人物的初期采用抓取较少的特征点以保障效率,之后再抓取更多的特征点以提高精度。为了尽可能地表现面部特征,微软亚洲研究院的研究员还采用了分类器等方法进行优化,目前一些眨眼等小的表情变化都可以被卡通人物反映出来。
现实照进虚拟
Kinect使我们能够惟妙惟肖地在虚拟世界中构建另外一个自己,其实不仅是人物,在微软亚洲研究院研究员的努力下,现实世界的任何一个物体都能被我们“搬”到虚拟世界中。Kinect在发布的时候曾经推出一个令人印象深刻的宣传片,一个小孩站在Kinect面前举起自己的滑板,拍下滑板正面和背面的样子,在游戏中就会出现一个与现实中几乎一模一样的虚拟滑板。
这种3D扫描成像技术以往仅仅被应用于高端的商用领域,而Kinect由于配备了独特的硬件,所以同样可以实现类似的功能。不过,尽管Kinect可以提供物体不同角度的深度图像和2D图像,但是在实际实现时还有很多比较复杂的问题需要解决。
粗糙变平滑
Kinect是一款伟大的产品,它用很低廉的价格让用户可以获得深度图像即现实物体的3D结构,但是受到成本所限,Kinect的硬件能力并不算出众。Kinect获得的深度图像分辨率比较低;另外,这种深度信息的噪声非常大,例如,现实中表面光滑的物体在经过Kinect扫描后,获得的深度信息表面却是凹凸不平的。如何通过这些粗糙的信息获得精细、平滑和可接受的输出结果是微软亚洲研究院的研究员首先面临的挑战。
微软亚洲研究院采用了一种被称为表面重构的技术来解决这个问题,这个技术可以借助物体表面的位置信息和噪声非常大的数据,重构出完整的表面。传统的平滑算法往往很难区分真正的噪声点和物体表面实际的小凹凸,微软亚洲研究院的研究员采用了泊松方程等算法进行噪声滤除。在判断某个特征点是噪声还是真实存在之前,技术算法首先抓取该点周边表面的角度和朝向的特性,进而判断这个特征点可能存在于空间的什么位置。这些根据朝向判断出的所有特征点可以形成一个虚拟的距离场。泊松方程用于帮助建立这个距离场,泊松方程认为,给一个采样点的话,可以根据这个采样点的位置,尽可能平均估计这个采样点对周围的影响,估计周围表面距离场应该是什么样。这种平均估计的方式能够带来几个好处,首先,如果真实物体表面有一个洞的话,那么根据洞附近特征点的状况及其产生的影响可以很好地扩散到洞的周围,进而获得非常平滑的形状,使这个洞的形状尽可能得到合理的填充。另外,每个特征点的最终状态和特征并不仅仅取决于它本身,还取决于周围很多点,这实际上就是一个很好的降噪过程。例如如果在采样面中有一个凸起的点,这个点周围的点在朝向特性上都没有表现出这里有凸起的趋势,那么这个点就会被识别成一个噪声点并被去除,反之就会被保留。当然受到采样精度的限制,一些十分小的表面特征信息也可能被判断为噪声并被处理掉。
对很多需要实时绘制的娱乐类应用来说,3000个顶点的人脸3D模型已经十分真实,而10000个顶点的模型就已经可以表现绝大部分的细节特征了。而目前Kinect的深度摄像头可以提供320×240的分辨率,可采集的特征点已经远远超过10000,这样的数据量用于生成多边形顶点的话已经足够,例如如果用这些采样点表现一个人脸的3D模型的话,那么实际上已经可以做得十分逼真,只是会损失皱纹等一些比较小的细节特征。目前真正影响效果的还主要是噪声,而微软亚洲研究院的这项技术可以有效地将噪声过滤,提升3D虚拟物体的展示效果。
缺陷自动补
除了解决物体表面的平滑问题外,还有很多困扰3D虚拟物体真实度的因素,例如扫描物体前后两面的时候如何对齐,如何去掉干扰信息并补足有缺陷的信息。
为了解决翻面对齐的问题,物体扫描软件内置了辅助工具,它在扫描正面的时候会生成物体的边缘图像,在用户旋转物体后,平面上会出现物体正面的轮廓线,以帮助用户更好地对准进行扫描。但是这样做会产生另外一个问题,因为用户需要用手握持旋转物体,所以要想仅仅扫描物体而不扫描人手的话,Kinect就需要具备区分人手和物体的能力,这个问题在计算机领域被称为分割。传统的分割主要通过颜色来实现,因为通常情况下手的颜色会与物体的颜色有很大的差别,但是事实上这种方法并不完善,效果也并不算好。而Kinect的好处是能够提供深度信息,通常来说物体边缘的深度信息会与手指的深度信息明显不同,因此将深度信息和颜色信息结合考虑,能够更好地将物体和手指分割开。只有极个别情况,如物体边缘过于凸凹不平,而且颜色与人的皮肤又十分接近,所以才会出现识别不准确的情况,不过这种情况十分少见。
除了对齐和边缘分割的问题外,物体边缘的深度信息数据采样会更加困难,噪声和数据损失会更大。另外,手指会挡住物体的一部分表面,这些问题都导致获取的物体表面会出现缝隙甚至漏洞,修补这些漏洞主要借助上面我们所提到的泊松方程和平滑算法,判断漏洞附近的表面朝向,进而实现自动修补。实际测试证明,这种方式基本可以解决通常物体扫描后产生的漏洞,最终生成的虚拟物体也比较理想。
Kinect未来的版本会进一步提高深度信息和图像信息的精度。非常期待看到未来的Kinect给我们日常生活带来更大的影响。
——孙剑博士 微软亚洲研究院视觉计算组高级研究员
Kinect的“枷锁”
传统工业级的3D扫描技术和设备更强调精确度和高分辨率。但是考虑到成本就必须要牺牲精度,价格便宜的设备能够被更多用户使用,给用户带来的乐趣更多。
身份识别
目前的识别技术仍旧会存在失误,比如在识别双胞胎时仍旧可能出错。事实上,目前已有的面部识别技术已经具备通过特征值准确分辨双胞胎的能力,但是受到Kinect摄像头分辨率的限制,尚无法获得满足要求的特征数据,但未来随着硬件设备的升级,类似问题将会得到很好的改善。
Avatar Kinect
对于采用USB2.0的Kinect来说,数据带宽有限,要保证流畅抓取和展现用户的特征信息,就必须有所取舍,牺牲一些细节也就在所难免。另外,在2D图像和深度图像的分辨率都不高的情况下,在目前的Kinect中仍旧无法让卡通人物百分之百地重现用户的所有特征,比如额头的皱纹或嘴边的酒窝就不得不被舍弃。
计算力的束缚
在游戏机领域,游戏机会争取把所有硬件资源、软件资源完全提供给游戏。每次游戏运行起来以后,可以认为游戏自带了功能更强大的操作系统,游戏和操作系统捆绑在一起运行,也就是说所有的系统资源基本上全部被游戏使用了。这些特殊性对Kinect技术的开发提出了更高的要求,并对Kinect的应用效果也产生了限制。
身份识别
传统的基于统计学的数据分析往往能够优化和提高数据分析的输出结果,例如搜狗拼音输入法可以通过收集网络上用户经常输入的字词来优化词库排名,来提高输入命中率。但是Xbox360并不是一台性能强大的PC,而且其绝大部分性能都要为游戏服务,身份识别这种功能并不允许占用过多的系统资源,因此其只能根据既有的识别算法模型来工作,也就是说通常不会出现用的越久识别效率和准确率会越高的情况。
3D扫描成像
事实上,将3D扫描成像是商业领域已经十分成熟的技术,但是需要强大的计算能力和比较长的处理时间。将这项技术迁移到计算性能不高的游戏机中提供给消费者使用的时候仍旧存在很大难度,计算占用的资源要非常小,同时算法应该尽可能快的生成结果。微软亚洲研究院的研究员们花了很大精力对他们在PC上开发的算法进行优化,将内存占用降到了20MB以下,并且使用CPU和GPU共同进行计算,最终使运算速度由原来普遍的20s左右缩短到2s以下。
Kinect很了不起,第一次普通用户可以用这么少的钱拿到3D的信息,从而使很多应用成为可能。
——童欣博士 微软亚洲研究院网络图形组高级研究员