Kinect比较

技术比较

Kinect v1的深度传感器采用了一种称为“光编码”(Light Coding)的技术(源自以色列的PrimeSense Inc.的技术,该公司2013年被苹果收购)。该方法读取投影的红外图案(Pattern),并从图案的变形中获取深度信息。因此,深度传感器分为投射红外图案的IR投影仪(左)和读取红外图案的IR相机(右)。此外,在深度传感器中间安装彩色摄像机。
Kinect v1

Kinect v2的深度传感器采用称为“飞行时间”(Time of Flight, ToF)的方法(貌似来自微软收购的一家公司(3DV Systems,Canesta)),该方法从反射和返回反射红外线的时间获得深度信息。从外部看不到的深度传感器配备了红外摄像头(左侧)和投射脉冲调制红外线的投影机(右侧)。彩色摄像头在旁边一侧。
Kinect v2

下图简单展示了“光编码”方法与“飞行时间”方法之间的区别:
Kinect Tech

Kinect v1
红外激光(infrared laser)发射一束光柱,然后通过衍射光栅机制分成多份光束,投影到物体的光斑被红外照相机(infrared camera)捕捉,并与已知的参考光斑比较,投影光斑和观察到的光斑用来计算深度信息。

规格比较

Items Kinect v1 Kinect v2
彩色图(Color) 640x480@30fps 1920x1080@30fps
深度图(Depth) 320x240@30fps 512x424@30fps
范围(Range) 0.8~4.0m 0.5~4.5m
传感器远离(Sensor) 结构光(Structured Light) 飞行时间(Time of Flight)
视场(Angle of View)
水平/垂直
57/43 70/60
麦克风阵列(Microphone Array) O O
人体(Body) 6 people 6 people
人体标记(BodyIndex) 2 people 6 people
关节(Joint) 20 joints/people 25 joints/people
Hand State Open / Closed Open / Closed / Lasso
Gesture X O
Face O O
Speech/Beamforming O O

彩色图

Kinect v1

  • 640 x 480 x 24 bpp 4:3 RGB @ 30fps
  • 640 x 480 x 16 bpp 4:3 YUV @ 15fps

Kinect v2

  • 1920 x 1080 x 16 bpp 16:9 YUY2 @ 30 fps

:bpp代表像素深度

Kinect v1的Color Camera的分辨率仅为640x480,Kinect v2的分辨率大幅提高,能够达到1920×1080。

:v1的要求是USB2.0,理论传输速率是60MB/s,v2是USB3.0,理论传输速率是500MB/s。

  • 可以计算一下,以XRGB Color为例,30fps,那么每秒所需传输的数据大小为640 x 480 x 4 x 30约为35M;再加上USHORT格式的Depth Color,30fps,大小为320 x 240 x 2 x 30约为4M。总计约为40MB/s,因为带宽有限,所以在保证画面帧率稳定的情况下,分辨率只能如此,而且基本上必须独占一个USB Controller。

  • 再算算v2的情况,Color = 1920 x 1080 x 4 x 30 约为237M,Depth = 512 x 424 x 2 x 30约为12M,总计约为250M/s。所以非USB3.0不可,否则传输不了这么大的数据量。

  • 显而易见,Color Map是最占带宽的,其实可以通过一些其他格式,比如I420或MJPG来减少数据量,然后通过CPU或GPU来进行解压和回放。

深度图

Kinect v2预览版的深度传感器的分辨率也提高到512×424,而Kinect v1是可以取640×480分辨率的深度数据,乍一看规格好像下降了,其实Kinect v1的深度传感器的物理分辨率是320x240,Up Scaling到640x480而已(注:猜测是Runtime处理的)。另外,深度传感器的方式也是从Light Coding变更为Time of Flight(TOF)。

Kinect v1

  • 320 x 240 x 16 bpp, 13-bit depth, 3-bit玩家信息

Kinect v2

  • 512 x 424 x 16 bpp, 13-bit depth, 3-bit玩家信息

Kinect v1的深度图有16位,其中13bit保存深度信息(包括一个标志位),另外3bit保存player information,如果player index没有被申请,则这3bit为0。
12bit的深度信息能够覆盖2^12=4096mm,也就是4米的距离。

标志位存储如下信息

  • Too near: 0x0000
  • Too far: 0x7ff8
  • Unknown: 0xfff8

深度图像是12位的,存储格式是PNG。

  • JPG只能存储8位,且属于有损压缩。
  • PNG最大支持单通道16位,且PNG是一种无损压缩格式。

人体关节

Kinect v1中可用的关节每人有20个,但Kinect v2有25个关节,如图所示有增加了

  • 颈部(NECK)
  • 指尖(HAND_TIP_LEFT, HAND_TIP_RIGHT)
  • 拇指(THUMB_LEFT, THUMB_RIGHT)
    这五个位置。

Kinect v1 body

Kinect v2 body

数据采集流程比较

Kinect Program

参考