资讯详情

kinect彩色图和深度图对齐(一)

本文主要记录kinect相关的知识和对齐方法,这是第一部分,此记。

深度相机成像方法简介

深度相机是一种可以在场景中获得物体距离相机物理距离的相机。深度相机通常由各种镜头和光学传感器组成。根据测量原理,主流深度相机一般分为飞行时间法(ToF)、结构光法,双目立体视觉法。

5a8731ce5e92a3ff0c730fe8beeeaaed.png

飞行时间是从Time of Flight直译,简称TOF。其测距原理是通过连续发射特定频率的光脉冲(一般为不可见光)到观测对象,然后接收从对象反射的光脉冲,通过探测光脉冲的飞行(往返)时间计算被测对象与相机的距离。Kinect V2采用的就是ToF方案。

结构光法是利用特殊结构图案(如离散光斑、条纹光、编码结构光等),将图案投影到三维空间物体表面,用另一台相机观察三维物理表面成像的畸变。如果结构光图案投影在物体表面为平面,则观察到的成像中的结构光图案与投影图案相似,不变形,但根据距离产生一定的尺度变化。但是,如果物体表面不是平面,观察到的结构光图案会因物体表面的几何形状而产生不同的扭曲变形,根据已知的结构光图案和观察到的变形,可以根据算法计算被测物体的三维形状和深度信息。微软的Kinect V1采用基于结构光的光编码方案。

总结结结构光法的优缺点

基于结构光法深度相机的优缺点,结构光法深度相机的优缺点。

优点

1)由于结构光主动投射编码光,非常适合光照不足(甚至无光)、缺乏纹理的场景。

2)、结构光投影图案一般经过精心设计,所以在一定范围内可以达到较高的测量精度。

3)技术成熟,深度图像分辨率相对较高。

缺点

1)室外环境不能使用。这是因为它很容易受到强自然光的影响,导致投影编码光被淹没。增加投影光源的功率可以在一定程度上缓解这个问题,但效果并不令人满意。

2)测量距离较近。物体离相机越远,物体上的投影图案越大,精度越差(想象手电筒照射远处的场景),相应的测量精度越差。因此,随着距离的增加,基于结构光的深度相机的测量精度显著降低。因此,它通常被广泛应用于近距离场景中。

3)容易受到光滑平面反射的影响。

双眼立体视觉法的原理与人眼相似。根据以下三角关系,可以计算出两个相机成像中同一物体的视差

Kinect简介

Kinect有三个镜头,中间镜头是RGB采集彩色图像的彩色摄像机。左右镜头分别是红外发射器和红外线CMOS由摄影机组成的3D用于收集深度数据(场景中物体与摄像头的距离)的结构光深度传感器,Kinect通过反射斑点(称为散斑)的变形,读取投射的红外光谱,获得纵向深度信息。最大的彩色摄像头支持128×红外摄像头最大支持960分辨率成像640×最高输出速度为480成像30fps。Kinect还配备了追焦技术,底座电机会随着对焦物体的移动而旋转。Kinect还建立了由四个麦克风同时收音的阵列麦克风,比较后消除噪音,并通过其收集声音进行语音识别和声源定位。

Kinect V1的Kinect V2的对比

Kinect v1深度相机拥有一个RGB彩色摄像头,红外线CMOS相机和红外发射器。红外相机CMOS相机和红外发射器以左右水平分布。相机采用基于结构光的光编码进行改进(Light Coding)获取物体深度信息的技术。

Kinect V2采用的是「Time of Flight(TOF)」通过投射红外反射后反射后返回的时间获得Depth信息。Depth传感器看不到外观,但是Color Camera旁边是红外线Camera(左)红外线和投射脉冲变调Porjector(右)。

Kinect 驱动简介:非官方和官方开发包的优缺点

官方SDK:

长处:

旋转电机提供音频支持,调整倾角,跟踪全身骨骼:非标准姿势检测(相对于OpenNi的投降姿势…),头、手、脚、骨检测和关节屏蔽的处理更加仔细(但精度是否更高尚不确定)。此外,还支持多传感器(多个传感器Kinect);

缺点:

微软对非商业使用的限制。此外,未提供手势识别和跟踪功能,未实现RGB图像/深度图像的对齐只为个体坐标系提供对齐。全身骨骼跟踪,SDK只计算关节的位置,没有得到旋转角度。从可移植的角度来看,SDK beta仅仅能用于Kinect/Win7平台,而OpenNi至少支持华硕WAVI Xtion未来可能会有很多其他硬件平台支持体感设备。相比较而言SDK beta不支持Unity3D不支持记录/回放数据写入磁盘,不支持原始红外视频数据流,不支持视频OpenNi入场和出场的事件响应机制相同。

非官方OpenNI/NITE:

长处:

可用于商业开发,包括手势识别和跟踪功能,可主动对齐深度图像和RGB图像,全身跟踪、关节旋转角度计算、看起来性能较好、已有众多游戏产品应用、支持记录/回放数据写入磁盘、支持原始红外视频数据流、支持角色入场和出场的事件响应机制。支持Primesense和华硕的WAVI Xtion硬件平台和windows、Linux和Mac等软件平台。全面支持自带代码Unity3D游戏引擎。

缺点:

不提供音频功能,不支持调整倾角的旋转电机,跟踪全身骨骼:无法跟踪头部、手、脚和锁骨的旋转动作,需要标准姿势检测(即著名的投降姿势)…),算法似乎存在关节屏蔽等细节的处理bug。不能自行安装和识别Kinect多机环境。安装过程比较繁琐,尤其是NITE申请开发证书编码。OpenNi事件触发机制也没有提供可用的视频和深度图输入(但是OpenNI提供类似功能的函数可用,虽然不是回调函数,但也很好用)。

总结:

OpenNI最大的优势是同意跨平台多设备和商业应用。但从原始数据采集和预处理技术来看,微软SDK它似乎更稳定,并提供了良好的骨骼和语音支持。识别身体某些部位的功能,SDKbeta不提供局部识别和跟踪,这需要自己的可能性开发(微软可能不会在相当长的一段时间内提供此类功能)。OpenNi/NITE虽然提供了手势识别和跟踪,但在全身骨骼姿势识别和跟踪方面还有许多其他微软产品。

因此,根据当前社区的表现,SDK beta和OpenNi/NITE真的不能一下子确定哪个好哪个坏。而且随着越来越多的开发人员增加微软,SDK beta它的普及可能会更快,但在更高层次的应用中,的选择往往需要一定的智慧。

Kinect驱动安装

刚开始使用kinect首先需要安装kinect驱动,我的机器环境是:Ubuntu16.04 kinect V1, 驱动分别为:openni/NITE/Sensor这三个包的版本必须匹配才能正常运行,版本号是:

OpenNI-Bin-Dev-Linux-x64-v1.5.7.10.tar

NITE-Bin-Linux-x64-v1.5.2.23.tar

SensorKinect093-Bin-Linux-x64-v5.1.2.1

可在网盘下载,链接: 驱动下载 提取码: 7ckj。

【Tips】

这三个软件包的安装要注意顺序:先安装openni,再安装Sensor,最后安装NITE。

安装方法

1,OpenNI

1

2$cd /Home/Downloads/OpenNI-Bin-Dev-Linux-x64-v1.5.7.10

$sudo ./install.sh

安装后会有成功的提示:

1

2

3

4

5

6copying

shared libraries...OK

...

...

***

DONE ***

2,SensorKinect和NITI

安装方法相似,

1

2$ cd /Home/Downloads/Sensor-Bin-Linux-x64-v5.1.2.1

$ sudo ./install.sh

1

2

3$ cd /Home/Downloads/NITE-Bin-Linux-x64-v1.5.2.23

$ sudo ./install.sh

`

安装后也会有DONE ×××类似的成功提示。

测试方法

测试安装成功的方法是采用OpenNI自带的例程

1

2$ cd /Home/Downloads/OpenNI-Bin-Dev-Linux-x64-v1.5.7.10/Samples/Bin/x64-Release

$ ./NiViewer

如下所示kinect图片配置成功。

另外可以带-u卸载这些软件包重新安装

1$sudo ./install.sh -u

但是NITE里有专门的uninstall.sh它可以用来卸载。

ROS测试环境

如果你安装了ROS,那么还可以通过安装freenect功能包来测试kinect

1

2

3

4

5

6$ cd ~/catkin_ws/src

$ git clone https://github.com/ros-drivers/freenect_stack.git

$ cd ~/catkin_ws/

$ catkin_make

$ rospack profile

$ roslaunch freenect_launch freenect.launch

标签: 内建kinect传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台