Kinect 学习j记录——one

Kinect(Light Coding)就是以红外线发出人眼看不见的class1雷射光,透过镜头前的diffuser(光栅、扩散片)将雷射光均匀分布投射在测量空间中,再透过红外线摄影机记录下空间中的每个散斑,撷取原始资料后,再透过晶片计算成具有3D深度的图像。

工具:SDK+OpenCV+VS2017

kinect 2.0开发第一步,研究kinect2.0 API。 
            本文主要是翻译官方文档,另外加入自己的一点理解和实验 
            文档网址: https://msdn.microsoft.com/en-us/library/dn782033.aspx 
          1.API分类 
                  主要分为三类 
                 1)Windows系统运行API(Windows Runtime APIs )。 
                 2).NET API 
                 3)原始API(native APIs)

Kinect v1,可以读取投射的红外线pattern,从pattern的变形获取Depth的信息,搭载了「Light Coding」方式的Depth传感器。Kinect v2预览版,通过从投射的红外线脉冲反射回来的时间来获得Depth的信息,变更为「Time of Flight(ToF)」方式的Depth传感器。

Light Coding,顾名思义,就是用光源照明给需要测量的空间编上码,属于结构光技术的一种,只是深度计算方式不一样。结构光(Structured Lighting)是将一维或二维的图像投影至被测物上,根据图像的形变情形,判断被测物的表面形状,可以非常快的速度进行扫描,相对于一次测量一点的探头,此种方法可以一次测量多点或大片区域,故能用于动态测量。

与普通结构光法不同的是,Light Coding的光源称为“激光散斑”,是激光照射到粗糙物体或穿透毛玻璃后随机形成的衍射斑点。这些散斑具有高度的随机性,而且会随着距离的不同而变换图案。也就是说空间中任意两处的散斑图案都是不同的。只要在空间中打上这样的结构光,整个空间就都被做了标记,把一个物体放进这个空间,只要看看物体上面的散斑图案,就可以知道这个物体在什么位置了。当然,在这之前要把整个空间的散斑图案都记录下来,所以要先做一次光源标定。

Time of Flight是一种主动式深度感应技术,其使用激光探测目标物。顾名思义,Time of Flight就是去计算光线飞行的时间。首先让装置发出脉冲光,并且在发射处接收目标物的反射光,藉由测量时间差算出目标物的距离;ZCam就是使用 TOF技术,使用红外线以及Accelerometers加速度计感应器,感测立体空间的相对位置变化,建构灰阶距离影像的深度感应器。3DV Systems公司研发该技术已经长达10年,并取得许多专利技术,微软二代Kinect使用TOF也是情理之内的事。

除此以外,新一代Kinect还有许多新特点:彩色摄像头达到了FullHD(1920 x 1080 @30fps);更大的视角,FOV 由 53×47 度变為 70×60 度;在 1 米左右距离即可侦测使用者;可以侦测6 位使用者(含骨架)、25 个关节点(关节点与上一代相比多5个,现在在手掌这部分现在有三个关节点,所以可以在一定程度上侦测手的开合状态);可以根据脸部彩色影像的细微变化侦测心跳。

第二代Kinect已经发售,其性能发生了翻天覆地的进化。其中最大的改变是改为采用TOF技术,号称有三倍的精确度。其数据的稳定性相對较好、细节更多;被其他环境光源(红外线)影响的概率也更低,甚至可以承受一定程度的日光。也由于深度感应改采用TOF技术,所以捕捉到的红外线影像不會像 PrimeSense 的技术有散斑、画面很干净。

读取深度图像步骤

  1. 获取kinect传感器
  2. 打开传感器
  3. 获取深度信息传感器
  4. 打开深度帧读取器
  5. 获得最近的一帧
  6. 将深度信息转换为MAT格式
  7. 用opencv的imshow显示
  8. 回收和释放内存

读取彩色图像步骤

1.获取kinect传感器 
2.打开传感器 
3.获取彩色图像信息传感器 
4. 打开彩色图像帧读取器 
5.获得最近的一帧 
6. 将彩色图像转换按三通道保存为MAT格式 
7.用opencv的imshow显示 
8. 回收和释放内存

猜你喜欢

转载自blog.csdn.net/t15281180631/article/details/81239176