2013年2月26日
摘要: 关于ChaLearn数据库在前面文章ChaLearn Gesture Challenge_1:CGD数据库简单介绍中已经介绍过,当然了,关于该数据库的挑战赛在2012年主办了2场,其比赛结果依次分别在CCPRW2012和ICPRW2012中公布。这2轮比赛过程中官网http://gesture.chalearn.org/中都有对参加比赛的队伍所使用的方法等从感性上做了个调查,并且公布了其调查报告。从这些报告中我们可以参考到做手势识别的大概流程,每个流程中常见的方法是什么,我想这点对初步进入该领域的人来说应该有很大的启发作用。下面就官网发布的第二轮比赛调查Method survey文章来简单.. 阅读全文
posted @ 2013-02-26 12:45 tornadomeet 阅读(2546) 评论(0) 推荐(0) 编辑
  2013年1月13日
摘要: 前言 上一篇博文ChaLearn Gesture Challenge_2:examples体验中简单介绍了CGC官网提供的丰富的sample,本节来简单分下其中的一个sample源码,该sample也是examples下的一个,即计算图像的近似梯度图。(其实如果熟悉matlab的朋友应该觉得这个例子很简单,只是本人由于很少使用matlab编写代码,一些基础的东西并没接触过。所以分析这个简单的代码照样可以收获很多matlab基础知识)。 开发环境:matlab2012a 实验基础 首先来看看本例子代码中所需要用到的一些matlab函数和一些基础知识点: 1. evalRespons... 阅读全文
posted @ 2013-01-13 22:42 tornadomeet 阅读(2854) 评论(2) 推荐(0) 编辑
  2013年1月12日
摘要: 前言: 在上一篇博文ChaLearn Gesture Challenge_1:CGD数据库简单介绍中已经简单介绍过CGD2011数据库,了解到该数据库可以作为公开的数据库来测试在深度信息和RGB信息上的手势识别。当然了,也可以通过参加这个挑战赛来对比自己的手势识别算法。官网上不仅提供了数据库的下载以及一些比赛规则,还提供了丰富的sample,这些sample中包含了很多图片,视频的处理,比如说深度图像和RGB图像的去噪,梯度计算,采样;视频特征的提取,这些特征包括STIP,MHI,MEI,HOG,HOF,PCA等;一些手势识别的算法,比如DTW;头部检测,骨骼检测,背景消除等等。在官网h... 阅读全文
posted @ 2013-01-12 11:01 tornadomeet 阅读(3039) 评论(0) 推荐(0) 编辑
  2013年1月10日
摘要: ChaLearn Gesture Challenge挑战赛是手势识别中比较新的(2011年开始的)一个挑战赛,属于机器学习挑战赛中的一个,其初衷是进行One-Shot learning的挑战,当然也不局限在此。官网为:http://gesture.chalearn.org/ ,2012年分别主办了两轮比赛,一个是在CVPR2012中进行,另一个是在ICPR2012中进行。关于本次比赛的一些规则,以及已经完成比赛的作者的识别方法的一些细节在官网上都能查看得到。大家有兴趣13年也可以参加下。因为在日常生活中会遇到各种各样的手势,如果对这些手势的识别能取得很大成功的话,那么离AI又更近一步了,下.. 阅读全文
posted @ 2013-01-10 11:32 tornadomeet 阅读(5227) 评论(5) 推荐(2) 编辑
  2013年1月4日
摘要: 前言 本次读的文章是与feature learning相关,feature learning也叫做deep learning,是最近一个比较热门的话题。因为它可以无监督的学习到图片和视频的一些特征(当然在其它领域也可以,比如语音,语言处理等),而这些特征并不需要人为手动去设。手动设计的特征,常见的有sift,surf,hog等,它们都是经过了很长的时间才设计出来的,并且它只适应于2D的图片,如果把所需学习的目标换成视频,则也同样需要把这些算法扩展到3D,比如HOG3D,3Dsurf,这个扩展过程也是需要很多技巧和时间的。另外,手动设计的某一特征只对某些数据库表现好,而对其它的数据库效... 阅读全文
posted @ 2013-01-04 22:27 tornadomeet 阅读(3774) 评论(9) 推荐(0) 编辑
  2012年12月30日
摘要: 独立成分分析(后面都用ICA代替)在维基百科中的解释是:一种利用统计原理进行计算的方法它是一个线性变换。这个变换把数据或信号分离成统计独立的非高斯的信号源的线性组合。独立成分分析是盲信号分离(Blind source separation)的一种特例。 可以感性上对比下ICA和PCA的区别,PCA是将原始数据降维并提取出不相关的属性,可以参考前面博文的介绍:PCA算法学习_1(OpenCV中PCA实现人脸降维)和PCA算法学习_2(PCA理论的matlab实现),而ICA是将原始数据降维并提取出相互独立的属性。我们知道两个随机变量独立则它们一定不相关,但2个随机变量不相关则不能保证它... 阅读全文
posted @ 2012-12-30 16:51 tornadomeet 阅读(12872) 评论(5) 推荐(0) 编辑
摘要: 前言 在前面的博文PCA算法学习_1(OpenCV中PCA实现人脸降维)中已经初步介绍了PCA算法的大概流程及在人脸降维上面的应用。本文就进一步介绍下其理论基础和matlab的实现(也是网上学者的代码)。 开发环境:Matlab2012a 基础 假设X是一个m*n的矩阵,是由样本数据构成的矩阵。其中m表示样本的属性维数,n表示样本的个数。现在要对X进行线性变换变成另一个矩阵Y,使得Y的协方差矩阵为对角矩阵,这样的Y就认为是对原始矩阵X提取主成分后的矩阵,实际过程中只需取Y的前面主要的行即可。 X变换到Y的线性变换公式为: X和Y的协方差计算方法为: 从下面的公式可... 阅读全文
posted @ 2012-12-30 11:24 tornadomeet 阅读(46010) 评论(9) 推荐(4) 编辑
  2012年12月27日
摘要: 前言 Matlab中的cell数据类型有点类似于矩阵,不过它比矩阵更灵活,矩阵中的所有元素只能是同一种数据类型,而cell中的元素类型可以是不同的数据类型,几乎涵盖了matlab中的所有类型,比如说数值,字符,数组,struct甚至cell本身等。Cell应用很广,你可以将其理解成一个排列顺序的功能强大的结构体,可以用来存储各种变量。 开发环境:Matlab2012a 实验基础 访问cell中元素时,可以使用大括号或者小括号。如果使用大括号的话,则每个元素按照自己的形式赋值。如果采用小括号赋值,则所赋的值需要被大括号括起来。如果在终端直接输入cell变量,则是看不到其内部值的,只能... 阅读全文
posted @ 2012-12-27 16:35 tornadomeet 阅读(6568) 评论(0) 推荐(2) 编辑
  2012年12月26日
摘要: 前言 OpenCV中保存图片的函数在c++版本中变成了imwrite(),这应该是向matlab中图像处理的的一些函数风格靠近吧。保存图片这个功能还是很重要的,比如说在写科研论文的时候需要把一些中间图片给贴出来,这样就可以在程序中间利用该函数保存图片了。甚至还可以将这些保存的图片供后续的matlab处理。本文就简单介绍下OpenCV中imwrite()函数的用法。不过个人感觉这个函数功能还是不够强大,使用时有很多限制。 开发环境:QtCreato2.5.1+OpenCV2.4.3 实验基础 本次实验主要是测试imwrite()函数的2个功能: 1. 测试其是否能够保存Mat图像中... 阅读全文
posted @ 2012-12-26 16:36 tornadomeet 阅读(127122) 评论(9) 推荐(2) 编辑
  2012年12月24日
摘要: 前言 有时候在c/c++中得到了某一张图片的直方图,比如说在OpenCV中,计算出图像的直方图后一般是保存在Mat里面,其实通过数据查看,这个Mat就是一个列向量,即一个vector,本来也可以使用c/c++的方法来画图的,只是那样有各种需要标注啊,箭头啊,颜色啊等都不方便,特别是如果要写paper的话,一般都不会选择使用c/c++来画,很多人都选择在matlab中画图,首先是将c/c++中的数据以某种形式导出来,然后再使用matlab。本文中就是将OpenCV中的直方图结果保存为图片导出来,然后对这张图片使用Matlab函数画出它的直方图分布。 开发环境:matlab2012a 实... 阅读全文
posted @ 2012-12-24 12:56 tornadomeet 阅读(4930) 评论(0) 推荐(0) 编辑
  2012年12月20日
摘要: 本文使用的工具是:Endnote X5 如果需要对某一篇论文的所有参考文献按照某一规则排列好,必须先使用Endnote编辑好一种文献Style。这里的步骤是: 1. 打开界面:Edit->Output Styles->Open Styles Manager,如下图所示: 2. 在Name那一列找到与自己所需要Style最相近的那一个选项。因为这里的Style太多,可以选择中间右下角的Find by选择和自己论文相关的领域,比如我这里在Find by里面选择Engineering,显示列表大大减小,如下图所示: 3. 然后点击Edit对该格式进行修改,我这里选择IEEE的St... 阅读全文
posted @ 2012-12-20 21:59 tornadomeet 阅读(17415) 评论(0) 推荐(1) 编辑
  2012年12月17日
摘要: 前言 有时候为了将一张图片以3维的形式显示出来,可以采用matlab的强大绘图功能。这里的3维其中的两维当然就是图片的xy坐标了,第3维就是图片中对应坐标点的像素值。例如,在c/c++编程时有可能会遇到生成了一张跟概率密度相关的图片,现在需要将其可视化,看它到底长什么样,这时候就需要用到这个功能。本节就简单实现一下这个。 开发环境:matlab2012a 实验基础 可以使用mesh函数实现,mesh函数是用来画曲面的网格表面的。 也可以使用surfl函数来实现,surfl是用来画光滑的曲面的。 有时候在matlab编程时会出现如下错误: 即:Subscript ind... 阅读全文
posted @ 2012-12-17 09:41 tornadomeet 阅读(9770) 评论(5) 推荐(1) 编辑
  2012年12月12日
摘要: 如果大家有用过kinect做开发,不管是使用kinect SDK还是使用OpenNI,估计都对这些库提供的人体骨骼跟踪技术有一定的好奇,心里在想,每个人穿的衣服不同,身体特点也不同,所处的环境不同,且走路或做手势时的姿势也不相同,竟然能够跟踪人体的骨架,且效果不错。那么上面的Kinect SDK和OpenNI提供给kinect开发的核心算法——人体骨架跟踪到底是怎么实现的呢?CVPR2011的最佳论文就给出了微软SDK的核心算法,见参考文献2,该文章主要是讲的Kinect SDK的人体骨架跟踪核心算法。因为该算法具有普适性,且效果好,被评为best peaper那是必须的。微软算法的流程图.. 阅读全文
posted @ 2012-12-12 09:46 tornadomeet 阅读(3436) 评论(1) 推荐(1) 编辑
摘要: 前言 相信很多朋友在使用OpenCV的时候会遇到一个小问题,且有时候对这样的小问题没有引起足够的重视,或者通过表面想当然的去编程,所以调试代码时出现一些莫名其妙的问题,最后发现问题时时间已经过去了一大把。最近我在调试一个项目时就遇到过这种情况,即Mat::at(x,y)和Mat::at(Point(x, y))的区别,我在项目中把这2种看成效果一样的,结果这个问题调试时纠结了2天(因为该工程有关OpenCV的代码有上千行,且没有怀疑这两者的区别,因此有时候出现一些莫名其妙的结果,花了很多时间才找问题所在)。其实关于Mat的at访问时这2者的区别我以前也做过笔记,只是此时不小心忘记了。这次... 阅读全文
posted @ 2012-12-12 00:25 tornadomeet 阅读(18733) 评论(6) 推荐(7) 编辑
  2012年12月11日
摘要: 前言: Eigen 是一个线性算术的C++模板库,包括:vectors, matrices, 开源以及相关算法。功能强大、快速、优雅以及支持多平台,可以使用该库来方便处理一些矩阵的操作,达到类似matlab那样的快捷。现在已经发展到Eigen3了,目前最新版本为Eigen 3.1.2。 Eigen使用预备工作: 首先到Eigen官网上下载Eigen源码包,下载后解压完直接放到自己平时软件所在的目录下,不需要安装。Eigen下载地址为:http://eigen.tuxfamily.org/index.php?title=Main_Page。 然后当自己需要使用到Eigen时,在相... 阅读全文
posted @ 2012-12-11 22:51 tornadomeet 阅读(28510) 评论(1) 推荐(2) 编辑
摘要: 前言 在图像处理过程中,经常会遇到这样一部分图像,图像的整体部分如果人来看的话一眼就能看出,但是它的内部由于有各种小缺口,导致断开了,这样在计算机“眼”里就被认为是断开的,为了使图像达到适应人眼的感觉,需要将这些缺口和断开的口给连接上去,这就需要用到计算机图形学中的连通域处理技术。本文给出一个简单的连通域处理函数,当然这个函数是来自OpenCV著名教程Learning OpenCV中,只不过它的接口是基于c版本的OpenCV,而到目前为止,基于C++接口的OpenCV已经是主流,所以我将其接口改成了c++版的,但是其内部一些代码基本没有动它。 开发环境:OpenCV2.4.3+Qt... 阅读全文
posted @ 2012-12-11 21:08 tornadomeet 阅读(21947) 评论(5) 推荐(2) 编辑
  2012年12月8日
摘要: 前言 一直没有系统去看过c++,因为懂得一些c的基本语法,在实际编程中用到c++,只能用到哪些看哪些,发现这样虽然能够完成大部分工作,但是有时候效率实在太低,比如说这节要讲的Std::sort()函数的使用,调了半天才调通。开通c/c++序列博客是记录在使用c++中一些难题,避免以后重犯错,当然以后会尽量挤出时间来较系统学习下c++。 开发环境:QtCreator2.5.1+OpenCV2.4.3 实验基础 首先来看看std中的快速排序算法sort的使用方法: template <class RandomAccessIterator, class Compare>void sor. 阅读全文
posted @ 2012-12-08 15:06 tornadomeet 阅读(25546) 评论(2) 推荐(1) 编辑
  2012年12月5日
摘要: 前言 最近课题研究上想采用皮肤信息,但是个人总是对皮肤信息应用在目标检测和目标识别上有排斥,认为皮肤信息完全不足以胜任这个工作。其实计算机视觉的最终实现是一个长期的过程,是AI领域一个经典的问题,所以在AI完全突破之前,任何对CV有用的信息都值得去深入研究,除非有一种算法能够在所有情况下都工作。好了,废话不扯了,进入正题,有偏见但是还是得使用它。皮肤模型中有单高斯,混合高斯,贝叶斯模型和椭圆模型等。经过前人学者大量的皮肤统计信息可以知道,如果将皮肤信息映射到YCrCb空间,则在CrCb二维空间中这些皮肤像素点近似成一个椭圆分布。因此如果我们得到了一个CrCb的椭圆,下次来一个坐标(Cr,... 阅读全文
posted @ 2012-12-05 08:32 tornadomeet 阅读(17299) 评论(4) 推荐(3) 编辑
  2012年12月4日
摘要: YCrCb YCrCb在视频压缩和一些数字图像处理中使用得比较多,是一种基于人眼感知的颜色空间。 在OpenCV中,从RGB空间转换到YCrCb空间的公式如下: 注意从RGB到YcrCb的公式并不是唯一的,这里OpenCV只是采用的是Intel IPP中的公式而已。 其中的delta的取值为: 这里我们以RGB三通道都为8bit来举例说明,即delta取128。通过上面的公式推导,可以求出Y的取值范围为(0, 255),Cr的取值范围为(0.54768, 255.452315),Cb的取值范围为(0.57548, 255.42452)。因此我们有很大的理由近似认为Y,Cr... 阅读全文
posted @ 2012-12-04 09:14 tornadomeet 阅读(9796) 评论(0) 推荐(5) 编辑
  2012年12月1日
摘要: 前言 直方图是计算机视觉中一个很重要的工具,OpenCV里面提供了不少有关直方图处理的函数。其中最基本的是计算直方图的函数calcHist()。有关直方图在前面的博文中也有所介绍:基础学习笔记之opencv(4):直方图使用学习。不过目前由于本人课题研究上需要计算多张图片的一维直方图特性,且每张图片对应有自己不同的掩膜矩阵,开始以为OpenCV中提供的calcHist()函数能够实现这个功能,因为其中一个重载函数中有一个参数为InputArrayOfArrays,咋一看会觉得这不就是可以处理多张图片的吗?后面仔细研究后发现其实它实现的功能和我的需求是不同的,因此需要自己单独写函数来完成这... 阅读全文
posted @ 2012-12-01 22:21 tornadomeet 阅读(9115) 评论(1) 推荐(1) 编辑
  2012年11月28日
摘要: 前言 在前面的博文皮肤检测类CvAdaptiveSkinDetector的使用中,已经介绍过了这个皮肤检测类的使用方法,因为本人对算法比较好奇,又继续阅读了下该算法的源码,所以这篇文章是对该源码做的一个简单分析。 基础 本算法内容是来自论文An adaptive real-time skin detector based on Hue thresholding: A comparison on two motion tracking methods。一般的皮肤检测都是统计大量不同光照不同环境下的皮肤特性,然后利用皮肤的这些统计信息来分割。当然了本算法的前面也是利用这些统计信息来预处理... 阅读全文
posted @ 2012-11-28 22:45 tornadomeet 阅读(5104) 评论(4) 推荐(1) 编辑
  2012年11月27日
摘要: Real-time fingertip tricking and detection using Kinect depth sensor for a new writing-in-the air system 本文是基于kinect的空中手写字的识别,即用一个手指在空中写字,写完后系统会自动判断出所写的字是哪一个。本人比较感兴趣的不是怎么识别出字体,而是怎样不断的很好的跟踪手指。读过文章发现,作者并不是完全从深度数据或颜色数据开始做的,而是利用OpenNI很多工作,比如OpenNI提供的身体分割图。并且该文章提出的分割和跟踪算法其使用条件也是相当的严格的,即人的手必须在伸出在身体前才能跟... 阅读全文
posted @ 2012-11-27 11:13 tornadomeet 阅读(2076) 评论(0) 推荐(1) 编辑
  2012年11月23日
摘要: 前言 一提到聚类算法,必然首先会想到的是kmeans聚类,因为它的名气实在太大了。既然这样,OpenCV中这个函数也自然必不可少了。这节内容主要是讲讲OpenCV中kmeans函数的使用方法。 开发环境:OpenCV2.4.3+QtCreator2.5.1 实验基础 在使用kmeans之前,必须先了解kmeans算法的2个缺点:第一是必须人为指定所聚的类的个数k;第二是如果使用欧式距离来衡量相似度的话,可能会得到错误的结果,因为没有考虑到属性的重要性和相关性。为了减少这种错误,在使用kmeans距离时,一定要使样本的每一维数据归一化,不然的话由于样本的属性范围不同会导致错误的结果。... 阅读全文
posted @ 2012-11-23 00:21 tornadomeet 阅读(35653) 评论(7) 推荐(4) 编辑
  2012年11月20日
摘要: 前言 皮肤检测是利用皮肤的颜色信息的阈值来进行检测的,不过这些阈值一般不是使用rgb空间,而是用HSV或者YCrCb等空间。皮肤检测是使用统计的方法统计出大量人的皮肤信息,然后就可以得到色彩空间某一分量的阈值了,利用该阈值就可以初步对皮肤进行分割。当然了,OpenCV中也自带了皮肤检测算子,包含在类CvAdaptiveSkinDetector中。本节内容就是来试试OpenCV自带的皮肤检测算法的性能。 开发环境:OpenCV2.4.3+QtCreator2.5.1 实验基础 OpenCV自带是算法的参考文献有网友说是An adaptive real-time skin detect... 阅读全文
posted @ 2012-11-20 11:37 tornadomeet 阅读(11184) 评论(13) 推荐(1) 编辑
  2012年11月16日
摘要: 前言 由于最近要研究kinect采集到的深度信息的一些统计特征,所以必须先对kinect深度信息做进一步的了解。这些了解包括kinect的深度值精度,深度值的具体代表的距离是指哪个距离以及kinect深度和颜色扫描范围等。经过查找资料可以解决这些问题,并且后面通过实验也验证了这些问题的答案。 ... 阅读全文
posted @ 2012-11-16 09:57 tornadomeet 阅读(21978) 评论(28) 推荐(1) 编辑
  2012年11月13日
摘要: 前言 为了减小以后项目的开发效率,本次实验将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 阅读(5418) 评论(9) 推荐(0) 编辑
  2012年11月12日
摘要: 前言 最近几周花了点时间学习了下今年暑假龙星计划的机器学习课程,具体的课程资料参考见附录。本课程选讲了写ML中的基本模型,同时还介绍了最近几年比较热门,比较新的算法,另外也将ML理论和实际问题结合了起来,比如将其应用在视觉上,web上的等。总之,虽然课程内容讲得不是特别细(毕竟只有那么几节课),但是内容还算比较新和比较全的。学完这些课后,收获还算不少的,至少了解到了自己哪方面的知识比较弱,下面是课程中做的一些简单笔记。 第1课 绪论课 机器学习中3个比不可少的元素,数据,模型和算法。现在数据来源比较广泛,每天都可以产生T级以上的数据。模型的话就是机器学习课程中需要研究的各种模型,算法... 阅读全文
posted @ 2012-11-12 15:51 tornadomeet 阅读(26746) 评论(6) 推荐(6) 编辑
  2012年11月9日
摘要: 前言 grabcut是在graph cut基础上改进的一种图像分割算法,它同样是基于图割理论的,关于图割的简单介绍可以参考本人前面的博文:一些知识点的初步理解_8(Graph Cuts,ing...) 。稍微看了下grabcut方面的论文,论文中一般都是在graph cut上作改进,比如说引入了GMM模型等。同graph cut一样,在使用grabcut是也是需要人机交互的,即人工先给定一定区域的目标或者背景,然后送给grabcut算法来分割。通过实验发现,其分割效果一般般,且分割速度比较慢,一张普通大小的图片差不多需要1s左右的时间, 实验说明 因为在使用该算法的过程中需要人机交互... 阅读全文
posted @ 2012-11-09 21:14 tornadomeet 阅读(49586) 评论(9) 推荐(4) 编辑
  2012年11月7日
摘要: OpenCV2.4.3的新特征: 在经过4个月的等待后,OpenCV又发布了新版本了,此时的最新版本为OpenCV2.4.3,下载地址为:OpenCV-2.4.3.exe。 下面来看看opencv2.4.3有了哪些新变化,主要是参考网页http://code.opencv.org/projects/opencv/wiki/ChangeLog上面介绍的,稍加翻译了一些,因为对有些专有名词不熟,所以可能翻译得不妥。这次版本的变化内容有不少是来源于google summer code(GSoC),那个项目贡献了不少code。 多线程方面,后台增加许多通用的多线程并行处理算法,比如说基于... 阅读全文
posted @ 2012-11-07 21:35 tornadomeet 阅读(18070) 评论(7) 推荐(3) 编辑
摘要: 前言 这时上次学妹课程的一道作业题,我花了点时间做了下,其题目内容为: 试写一程序,可以对一二元树(binary)进行堆积排序(heap sort) (a)使用者可自己决定输入二元树的节点个数 (i)node数不超过50 (b)节点值由随机方式产生,并印出随机设值结果 (i)以时间复杂度O(n)的方式设值 (ii)假设值不可重复 (iii)最大值不可大于node数 (例如node数为9,因此最大值为9) (c)使用者可决定使用MAX-HEAP或者是MIN-HEAP来排序 (d)须将重建堆积得过程印出,以及最后输出排序结果 Sample Output: 后面在网上查了下... 阅读全文
posted @ 2012-11-07 16:11 tornadomeet 阅读(3398) 评论(0) 推荐(1) 编辑
  2012年11月6日
摘要: Graph cuts是一种十分有用和流行的能量优化算法,在计算机视觉领域普遍应用于前背景分割(Image segmentation)、立体视觉(stereo vision)、抠图(Image matting)等。Graph Cuts理论最早是出现在流网络优化领域的,比如说水管网络,通信传输网络,城市车流网络等。此时的Graph Cuts算法是用来确定网络流的最小分割,即寻找一个容量最小的边的集合,去掉这个集合中的所有边就可以阻挡这个网络了。需要注意的是,通常所说的Graph Cuts算法是指的采用最大流-最小分割来优化的模型,其它的Graph Cutting算法一般用graph par... 阅读全文
posted @ 2012-11-06 18:48 tornadomeet 阅读(17634) 评论(5) 推荐(2) 编辑
摘要: 在机器学习中,随机森林由许多的决策树组成,因为这些决策树的形成采用了随机的方法,因此也叫做随机决策树。随机森林中的树之间是没有关联的。当测试数据进入随机森林时,其实就是让每一颗决策树进行分类,最后取所有决策树中分类结果最多的那类为最终的结果。因此随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。随机森林可以既可以处理属性为离散值的量,比如ID3算法,也可以处理属性为连续值的量,比如C4.5算法。另外,随机森林还可以用来进行无监督学习聚类和异常点检测。 随机森林由决策树组成,决策树实际上是将空间用超平面进行划分的一种方法,每次分割的时候,都将当前的空间一... 阅读全文
posted @ 2012-11-06 09:33 tornadomeet 阅读(32927) 评论(2) 推荐(2) 编辑
  2012年11月4日
摘要: 前言 这篇文章是本人玩kinect时做的一个小实验,即不采用机器学习等类似AI的方法来做简单的手势数字识别,当然了,该识别的前提是基于本人前面已提取出手部的博文Robert Walter手部提取代码的分析的基础上进行的。由于是纯数学形状上来判别手势,所以只是做了个简单的0~5的数字识别系统,其手势的分割部分效果还不错(因为其核心代码是由OpenNI提供的),手势数字识别时容易受干扰,效果一般般,毕竟这只是个简单的实验。 实验基础 首先来看下本系统的流程图,如下所示: 其中轮廓的提取,多边形拟合曲线的求法,凸包集和凹陷集的求法都是采用opencv中自带的函数。手势数字的识别是利用... 阅读全文
posted @ 2012-11-04 00:18 tornadomeet 阅读(16674) 评论(58) 推荐(8) 编辑
  2012年11月1日
摘要: 前言 本文所设计的类主要是和人体的手部打交道的,与人体的检测,姿势校正,骨架跟踪没有关系,所以本次类的设计中是在前面的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 阅读(3350) 评论(0) 推荐(0) 编辑
摘要: 前言 这篇文章主要是介绍多个手部的分割,是在前面的博文:不需要骨骼跟踪的人体手部分割的基础上稍加改进的。因为识别有的一个应用场合就是手势语言识别,而手势一般都需要人的2只手相配合完成,因此很有必要对人体的多个手部来进行分割。 实验说明 其实本文中使用的还是OpenNI自带的一些算法实现的,因为OpenNI中自己本身就对每个手部有一个UserID的标志,所以我们每当检测到一只手时就可以把手的位置连同他的ID一起存下来,后面进行手势分割时按照检测到的不同手势分别进行分割即可。其程序流程图如下所示: 下面是本次实验特别需要注意的一些细节。 OpenNI知识点总结: 一般情况下Open... 阅读全文
posted @ 2012-11-01 00:29 tornadomeet 阅读(6018) 评论(2) 推荐(1) 编辑
  2012年10月31日
摘要: 1、Mitra, S. and T. Acharya (2007). "Gesture recognition: A survey." Systems, Man, and Cybernetics, Part C: Applications and Reviews, IEEE Transactions on 37(3): 311-324. 这是一篇07年的关于人体姿势识别的综述性文章,不过文章的重点是放在手势识别以及人脸识别的介绍中。作者在介绍姿势识别的应用场合和一些手势识别的分类后,重点是介绍手势和人脸识别的一些模型工具。并且详细介绍了这些模型的基本原理以及这些模型与手势识 阅读全文
posted @ 2012-10-31 10:12 tornadomeet 阅读(2215) 评论(0) 推荐(1) 编辑
  2012年10月26日
摘要: 论文内容介绍: 这是一篇2012年8月份发表在IJCV的文章,文章中主要实现的功能是手势的分割和识别,即对静态图片中10个数字的手势进行识别,这些手势都是处于复杂的背景下。识别算法最后在作者的NUS-II手势数据库中可以达到94%以上的识别率。 文章中主要采用了2个方面的理论,第一个理论是用数学模型来模拟人大脑皮层中与视觉区域有关的部位。神经科学研究发现,人的视觉皮层可以分为5个部分,分别为V1~V5。其中V1属于初级视皮层,V2~V5是纹外皮层。V1,V2完成的是目标检测的功能,V3,V4,V5完成的是目标识别。文章中所用的数学模型理论主要是对大脑视觉皮层模拟的一个简化,这里只是... 阅读全文
posted @ 2012-10-26 21:54 tornadomeet 阅读(1649) 评论(0) 推荐(0) 编辑
  2012年10月19日
摘要: 前言 手势识别非常重要的一个特点是要体验要好,即需要以用户为核心。而手势的定位一般在手势识别过程的前面,在上一篇博文Kinect+OpenNI学习笔记之8(Robert Walter手部提取代码的分析) 中已经介绍过怎样获取手势区域,且取得了不错的效果,但是那个手势部位的提取有一个大的缺点,即需要人站立起来,当站立起来后才能够分隔出手。而手势在人之间的交流时,并不一定要处于站立状态,所以这不是一个好的HCI。因此本文介绍的手势部位的提取并不需要人处于站立状态,同样取得了不错的效果。 实验说明 其实,本实验实现的过程非常简单。首先通过手部的跟踪来获取手所在的坐标,手部跟踪可以参考本... 阅读全文
posted @ 2012-10-19 12:54 tornadomeet 阅读(7137) 评论(30) 推荐(3) 编辑
  2012年10月18日
摘要: 前言 一般情况下,手势识别的第一步就是先手势定位,即手势所在部位的提取。本文是基于kinect来提取手势识别的,即先通过kinect找出人体的轮廓,然后定位轮廓中与手部有关的点,在该点的周围提取出满足一定要求的区域,对该区域进行滤波后得到的区域就是手部了。然后利用凸包和凹陷的数学几何方法,画出手指和手指凹陷处的点,以及手的轮廓线,并在图像中显示出来。文章所有代码都是网友Robert Walter提供的,它的代码下载网站为:http://dl.dropbox.com/u/5505209/FingertipTuio3d.zip 本人因为要做这方面的研究,所有本文只是读了他的代码,并稍加分析... 阅读全文
posted @ 2012-10-18 09:34 tornadomeet 阅读(12205) 评论(33) 推荐(1) 编辑
  2012年10月11日
摘要: 前言 本文主要介绍使用OpenNI中的HandsGenerator来完成对人体手部的跟踪,在前面的文章Kinect+OpenNI学习笔记之5(使用OpenNI自带的类进行简单手势识别)中已经介绍过使用GestureGenerator这个类来完成对几个简单手势的识别,这次介绍的手部跟踪是在上面简单手势识别的结果上开始跟踪的,这是OpenNI的优点,微软的SDK据说是不能单独对手部进行跟踪,因为使用MS的SDK需要检测站立人体的骨骼,然后找出节点再进行跟踪,不懂最新版本的是否支持这个功能。而此节讲的OpenNI完成手部的跟踪就不要求人必须处于站立姿势。 开发环境:QtCreator2.5.... 阅读全文
posted @ 2012-10-11 19:54 tornadomeet 阅读(5833) 评论(0) 推荐(1) 编辑

阿萨德发斯蒂芬