CVPR

kinect bookmark kinect传感系统详解

在Kinect推出之前,像这类手势识别是使用LIDAR(激光诱导差分吸收雷达)或激光雷达实现的。超声波传感器不能提供足够的精度。另外一种方法是使用图像分析,但非常复杂,运算要求很高。

深度的范围以及精确度

ref: Kinect + OpenNI 的深度值

坐标系统

ref:

投影坐标系(projective coordinate system):右手坐标系。

「投影」所代表的意义,实际上应该就是电脑3D 图学里面,「把三度空间场景里的东西、以指定的方法投影到一个设定好的平面上、产生出一张平面的图」的意思

  • 在OpenNI 的投影座标系统里,基本上是以左上角为(0, 0) 的原点,往右边为正的X 轴、往下方为正的Y 轴;这样的定义,和一般电脑中影像的座标系统是相同的
  • 投影座标系统里的X / Y 轴的单位是像素、Z 轴的单位则是毫米

世界坐标系(world coordinate system): 左手坐标系。

透过OpenNI内Depth Generator所提供的ConvertProjectiveToRealWorld()这个函式,来将投影座标系统上的座标点,转换成真实世界座标系统的座标点。

  • OpenNI的真实世界座标系统,基本上是感应器(Kinect或Xtion Pro)为原点的座标系统;感应器的前方为正的Z、上方为正的Y,而感应器的右方则为正的X。
  • 在真实世界座标系统里,X / Y / Z 三个轴的单位就会是一致的,都是公厘;而物体也不会因为远近而有变形、或大小的改变,只有精确度会随着Z 的变大而变低。

在投影(projective)坐标系、也就是透过Depth Generator直接得到的深度图上,像素的值其实就是直接代表深度值,单位就是mm;它所代表的意义,就是该点到Kinect所在的平面的垂直距离

而在透过depth generator的ConvertProjectiveToRealWorld()这个函式转换到真实世界(real world)坐标系的时候,其实Z的值是不会变的;他会根据投影座标系统上的( X, Y, Z ) ,去计算出在真实世界坐标系的位置,理论上会是( X', Y', Z ),虽然X / Y的执会改变,但是实际上Z的值应该都是维持不变的。也就是说,在OpenNI里(或者更严格的来说,在OpenNI的Kinect这个装置上)投影座标系统和真实世界座标系统的深度值所代表的意义是相同的。

3D物体投射并显示在2D屏幕: 物体坐标系 - 世界坐标系 — 相机坐标系 — 投影坐标系 — 图像(像素)坐标系

从世界坐标系到相机坐标系(3D物体到2D图像的转变)

标定

kiretu Calibration parameter

常用算法

应用程序处理深度数据目的是用来确定人体在Kinect视场中的位置。虽然Kinect SDK中的骨骼追踪在这方面功能更强大,但是在某些情况下还是需要从深度数据中分析出人物所处的位置。在下节中,我们将会分析人体在深度影像中的范围。在开始之前,有必要了解和研究一下图像处理中常用的一些算法,有时候这些对特征提取非常有帮助。

图像处理