Kinect+OpenNI学习笔记之14(关于Kinect的深度信息)
摘要:前言 由于最近要研究kinect采集到的深度信息的一些统计特征,所以必须先对kinect深度信息做进一步的了解。这些了解包括kinect的深度值精度,深度值的具体代表的距离是指哪个距离以及kinect深度和颜色扫描范围等。经过查找资料可以解决这些问题,并且后面通过实验也验证了这些问题的答案。 ...
阅读全文
posted @
2012-11-16 09:57
tornadomeet
阅读(22039)
推荐(1) 编辑
Kinect+OpenNI学习笔记之13(Kinect驱动类,OpenCV显示类和手部预分割类的设计)
摘要:前言 为了减小以后项目的开发效率,本次实验将OpenNI底层驱动Kinect,OpenCV初步处理OpenNI获得的原始数据,以及手势识别中的分割(因为本系统最后是开发手势识别的)这3个部分的功能单独做成类,以便以后移植和扩展。其实在前面已经有不少文章涉及到了这3部分的设计,比如说:Kinect+OpenNI学习笔记之3(获取kinect的数据并在Qt中显示的类的设计),Kinect+OpenNI学习笔记之11(OpenNI驱动kinect手势相关的类的设计),Kinect+OpenNI学习笔记之12(简单手势所表示的数字的识别)。这次是综合前面几次的设计,优化了下这几个类。 开发环境...
阅读全文
posted @
2012-11-13 15:11
tornadomeet
阅读(5426)
推荐(0) 编辑
Kinect+OpenNI学习笔记之12(简单手势所表示的数字的识别)
摘要:前言 这篇文章是本人玩kinect时做的一个小实验,即不采用机器学习等类似AI的方法来做简单的手势数字识别,当然了,该识别的前提是基于本人前面已提取出手部的博文Robert Walter手部提取代码的分析的基础上进行的。由于是纯数学形状上来判别手势,所以只是做了个简单的0~5的数字识别系统,其手势的分割部分效果还不错(因为其核心代码是由OpenNI提供的),手势数字识别时容易受干扰,效果一般般,毕竟这只是个简单的实验。 实验基础 首先来看下本系统的流程图,如下所示: 其中轮廓的提取,多边形拟合曲线的求法,凸包集和凹陷集的求法都是采用opencv中自带的函数。手势数字的识别是利用...
阅读全文
posted @
2012-11-04 00:18
tornadomeet
阅读(16688)
推荐(8) 编辑
Kinect+OpenNI学习笔记之11(OpenNI驱动kinect手势相关的类的设计)
摘要:前言 本文所设计的类主要是和人体的手部打交道的,与人体的检测,姿势校正,骨架跟踪没有关系,所以本次类的设计中是在前面的OpenNI+Kinect系列博文基础上去掉那些与手势无关的驱动,较小代码量负担。类中保留下来有手势识别,手部跟踪,以及手部跟踪的轨迹和多个手部的位置坐标等信息。本类的设计也开始慢慢遵循一些C/C++编程规范,这里采用的是google的编程规范。 本文测试设计出的类的功能是与博文不需要骨骼跟踪的人体多个手部分割一样,进行人体多个手部跟踪和分割。 开发环境:开发环境:QtCreator2.5.1+OpenNI1.5.4.0+Qt4.8.2+OpenCV2.4.2 Go...
阅读全文
posted @
2012-11-01 22:48
tornadomeet
阅读(3358)
推荐(0) 编辑
Kinect+OpenNI学习笔记之10(不需要骨骼跟踪的人体多个手部分割)
摘要:前言 这篇文章主要是介绍多个手部的分割,是在前面的博文:不需要骨骼跟踪的人体手部分割的基础上稍加改进的。因为识别有的一个应用场合就是手势语言识别,而手势一般都需要人的2只手相配合完成,因此很有必要对人体的多个手部来进行分割。 实验说明 其实本文中使用的还是OpenNI自带的一些算法实现的,因为OpenNI中自己本身就对每个手部有一个UserID的标志,所以我们每当检测到一只手时就可以把手的位置连同他的ID一起存下来,后面进行手势分割时按照检测到的不同手势分别进行分割即可。其程序流程图如下所示: 下面是本次实验特别需要注意的一些细节。 OpenNI知识点总结: 一般情况下Open...
阅读全文
posted @
2012-11-01 00:29
tornadomeet
阅读(6025)
推荐(1) 编辑
Kinect+OpenNI学习笔记之9(不需要骨骼跟踪的人体手部分割)
摘要:前言 手势识别非常重要的一个特点是要体验要好,即需要以用户为核心。而手势的定位一般在手势识别过程的前面,在上一篇博文Kinect+OpenNI学习笔记之8(Robert Walter手部提取代码的分析) 中已经介绍过怎样获取手势区域,且取得了不错的效果,但是那个手势部位的提取有一个大的缺点,即需要人站立起来,当站立起来后才能够分隔出手。而手势在人之间的交流时,并不一定要处于站立状态,所以这不是一个好的HCI。因此本文介绍的手势部位的提取并不需要人处于站立状态,同样取得了不错的效果。 实验说明 其实,本实验实现的过程非常简单。首先通过手部的跟踪来获取手所在的坐标,手部跟踪可以参考本...
阅读全文
posted @
2012-10-19 12:54
tornadomeet
阅读(7147)
推荐(3) 编辑
Kinect+OpenNI学习笔记之8(Robert Walter手部提取代码的分析)
摘要:前言 一般情况下,手势识别的第一步就是先手势定位,即手势所在部位的提取。本文是基于kinect来提取手势识别的,即先通过kinect找出人体的轮廓,然后定位轮廓中与手部有关的点,在该点的周围提取出满足一定要求的区域,对该区域进行滤波后得到的区域就是手部了。然后利用凸包和凹陷的数学几何方法,画出手指和手指凹陷处的点,以及手的轮廓线,并在图像中显示出来。文章所有代码都是网友Robert Walter提供的,它的代码下载网站为:http://dl.dropbox.com/u/5505209/FingertipTuio3d.zip 本人因为要做这方面的研究,所有本文只是读了他的代码,并稍加分析...
阅读全文
posted @
2012-10-18 09:34
tornadomeet
阅读(12216)
推荐(1) 编辑
Kinect+OpenNI学习笔记之7(OpenNI自带的类实现手部跟踪)
摘要:前言 本文主要介绍使用OpenNI中的HandsGenerator来完成对人体手部的跟踪,在前面的文章Kinect+OpenNI学习笔记之5(使用OpenNI自带的类进行简单手势识别)中已经介绍过使用GestureGenerator这个类来完成对几个简单手势的识别,这次介绍的手部跟踪是在上面简单手势识别的结果上开始跟踪的,这是OpenNI的优点,微软的SDK据说是不能单独对手部进行跟踪,因为使用MS的SDK需要检测站立人体的骨骼,然后找出节点再进行跟踪,不懂最新版本的是否支持这个功能。而此节讲的OpenNI完成手部的跟踪就不要求人必须处于站立姿势。 开发环境:QtCreator2.5....
阅读全文
posted @
2012-10-11 19:54
tornadomeet
阅读(5843)
推荐(1) 编辑
Kinect+OpenNI学习笔记之6(获取人体骨架并在Qt中显示)
摘要:前言 MS的kinec SDK和OpenNI都提供了人体骨骼跟踪的算法,人体骨骼跟踪算法在kinect人体行为识别中非常重要,该识别过程通常被用来作为行为识别的第一步,比如说,通过定位人体中的骨骼支架,可以提取出人手的部位,从而可以把手的部分单独拿出来分析,这样就达到了手势的定位,而后面的手势识别则可以在刚刚定位出的领域进行处理。总而言之,一套有效的人体骨架追踪算法在kinect的一系列应用中非常有用,不过MS SDK和OpenNI虽然都提供了该算法类的直调用,但是其源码并没有开放,毕竟这是人家最核心的东东。 开发环境:QtCreator2.5.1+OpenNI1.5.4.0+Qt4....
阅读全文
posted @
2012-10-03 10:48
tornadomeet
阅读(10951)
推荐(0) 编辑
Kinect+OpenNI学习笔记之5(使用OpenNI自带的类进行简单手势识别)
摘要:前言 因为OpenNI可以获取到kinect的深度信息,而深度信息在手势识别中有很大用处,因此本文就来使用OpenNI自带的类来做简单的手势识别。识别的动作为4种,挥手,手移动,举手,往前推手。通过后面的实验可以发现,其实提供的类的效果非常不好。 开发环境:QtCreator2.5.1+OpenNI1.5.4.0+Qt4.8.2+OpenCV2.4.2 实验说明 跟手势相关的是GestureGenerator这个类,它的初始化过程和depth_metadata,image_metadata都一样,因此首先在上2篇文章的COpenNI类中增加一个public类对象GestureG...
阅读全文
posted @
2012-10-02 08:39
tornadomeet
阅读(7668)
推荐(1) 编辑
Kinect+OpenNI学习笔记之4(OpenNI获取的图像结合OpenCV显示)
摘要:前言 本文来结合下opencv的highgui功能显示kinect采集得来的颜色图和深度图。本来在opencv中自带了VideoCapture类的,使用该类可以直接驱动kinect设备,具体的可以参考下面的文章:http://blog.csdn.net/moc062066/article/details/6949910,也可以参考opencv提供的官方文档:http://docs.opencv.org/doc/user_guide/ug_highgui.html。这种方法用起来非常简单,不需要考虑OpenNI的驱动过程,有点像傻瓜式的操作。不过本人在使用该种方法时kinect一直驱动不成...
阅读全文
posted @
2012-10-01 18:11
tornadomeet
阅读(11610)
推荐(1) 编辑
Kinect+OpenNI学习笔记之3(获取kinect的数据并在Qt中显示的类的设计)
摘要:前言 在上一篇文章Kinect+OpenNI学习笔记之2(获取kinect的颜色图像和深度图像)中,已经介绍了怎样使用OpenNI来获取Kinect的深度数据和颜色数据,并将获取到的结果在Qt中显示,不过那个代码是写在同一个cpp文件中,以后用到的时候不能讲这些显示的基本过程单独拿出来,比较麻烦。所以这节主要是将OpenNI获取图像的流程以及Qt显示这些图像的结果分开为了2个类来写,方便以后工程的直接拷贝。 开发环境:QtCreator2.5.1+OpenNI1.5.4.0+Qt4.8.2 实验说明 COpenNI这个类主要是初始化kinect设备,并获取深度图像和颜色图像,参加上...
阅读全文
posted @
2012-09-29 09:45
tornadomeet
阅读(6881)
推荐(1) 编辑
Kinect+OpenNI学习笔记之2(获取kinect的颜色图像和深度图像)
摘要:前言 网上有不少使用Qt做界面,OpenNI为库来开发kinect。或许大家的第一个问题就是询问该怎样使用Kinect来获取颜色信息图和深度信息图呢?这一节就是简单来回答这个问题的。 开发环境:QtCreator2.5.1+OpenNI1.5.4.0+Qt4.8.2 实验说明: 在使用OpenNI来驱动读取kinect数据时,我们需要了解context object这个名词。查看了下OpenNI UserGuide文档,简单翻译下这个名词的意思: Context是openNI中一个主要的object,它掌握了OpenNI使用过程中应用程序的全部状态,以及这些状态的prodecti...
阅读全文
posted @
2012-09-27 23:15
tornadomeet
阅读(26712)
推荐(4) 编辑
Kinect+OpenNI学习笔记之1(开发环境的建立)
摘要:前言 一般的普通摄像机获取的是RGB彩色图像,在计算机视觉领域,很大一部分都是基于颜色图像来做处理的,取得了不少研究成果。最近几年的深度图研究给计算机视觉和图像处理带来了更多的信息,因为所获取的图像多了一个维度的,通常也称之为RGBD图。比较物美价廉的深度信息获取传感器有MS的Kinect,同时还有ASUS的Xtion。这2种传感器都能较为准确的获得一定范围内物体的深度信息。比如说Kinect的参数信息图如下: 要想在视觉上达到AI的水平还有很长的路要走,深度信息的提供无疑给视觉处理多带来了一份希望,多了深度这一维的信息肯定是有用的,所以本人打算以后结合色彩信息和深度信息来做...
阅读全文
posted @
2012-09-26 15:09
tornadomeet
阅读(28987)
推荐(4) 编辑