期刊鉴别 论文检测 免费论文 特惠期刊 学术答疑 发表流程

基于双目视觉的目标跟踪算法研究(2)

时间:2014-08-26 13:58 文章来源:http://www.lunwenbuluo.com 作者:朱旭红等 点击次数:


 

  Kinect工作原理,摄像头起到了很大的作用,核心期刊它负责捕捉人肢体的动作,然后微软的工程师就可以设计程序教它如何去识别、记忆、分析处理这些动作。Kinect摄像头可以捕捉到用户的手势动作,再把这些手势语言转换成游戏控制。具体来说,Kinect借助PrimeSense软件和摄像头侦测、捕捉用户手势动作,然后再将捕捉到的影像与本身内部存有的人体模型相对照。每一个符合内部已存人体模型的物体就会被创造成相关的骨骼模型,系统再将该模型转换成虚拟角色,该角色通过识别该人体骨骼模型的关键部位进行动作触发。在虚拟骨骼模型的帮助下,系统可识别人体的25个关键部位。此基础上加入了识别人体站立/坐姿的新技术。使用红外定位Kinect比一般的摄像头更为智能。首先,它能够发射红外线,从而对整个房间进行立体定位。摄像头则可以借助红外线来识别人体的运动。除此之外,配合着Xbox 360上的一些高端软件,便可以对人体的48个部位进行实时追踪。该设备最多可以同时对两个玩家进行实时追踪。除此之外,这款产品不仅能够通过红外线识别人体,还可以识别出完整的RGB色彩,并借助面部识别技术自动为用户登录。

  4骨骼跟踪技术

  骨骼追踪技术通过处理景深数据来建立人体各个关节的坐标,骨骼追踪能够确定人体的各个部分,如哪部分是手,头部,以及身体。骨骼追踪产生X,Y,Z数据来确定这些骨骼点。骨骼追踪系统采用的景深图像处理技术使用更复杂的算法如矩阵变换,机器学习及其他方式来确定骨骼点的坐标。

  骨骼数据来自SkeletonStream,访问骨骼数据有事件模式和 “拉”模式两种方式。在本项目实验中我们采用基于事件的方式,因为这种方式简单,代码量少,并且是一种很普通基本的方法。KinectSensor对象有一个名为SkeletonFrameReady事件。当SkeletonStream中有新的骨骼数据产生时就会触发该事件。通过AllFramesReady事件也可以获取骨骼数据。SkeletonStream产生的每一帧数据都是一个骨骼对象集合。每一个骨骼对象包含有描述骨骼位置以及骨骼关节的数据。每一个关节有一个唯一标示符如头(head)、肩(shoulder)、肘(dlbow)等信息和3D向量数据。然后把获取到的数据通过设置画笔颜色画出来,就可以实现模拟人体骨骼跟踪的效果。

  5原理及实现

  本项目的程序是运行在VS2010上的C#WPF程序。下面对程序中的部分代码做一下分析。

  (1)由于Kinect能够追踪到的骨骼数量是一个常量。这使得我们在整个应用程序中能够一次性的为数组分配内存。为了方便,Kinect SDK在SkeletonStream对象中定义了一个能够追踪到的骨骼个数常量FrameSkeletonArrayLength,使用这个常量可以方便的对数组进行初始化。具体的代码在程序中是这样的:

  this.framesSkelete = new Skeleton[this.kinect.SkeletonStream.FrameSkeletonArrayLength];

  (2)每一次骨骼数据变化的时候就会触发SensorSkeletonFrameReady事件,然后通过调用事件参数的OpenSkeletonFrame方法就能够获取当前的骨骼数据帧。后面的代码是遍历骨骼数据帧的Skeleton数组frameSkeletons,再在UI界面通过关节点将骨骼数据连接起来,用一条直线代表一根骨骼。具体代码参见下面两张截图:

  截图一

  截图二

  (3)上述代码中在循环遍历frameSkeletons对象时,每一次处理一个骨骼,在处理之前都需要判断是否是一个追踪好的骨骼,可以使用Skeleton对象的TrackingState属性来判断,只有骨骼追踪引擎追踪到的骨骼我们才进行绘制,忽略那些不是使用者的骨骼信息即过滤掉那些TrackingState不等于SkeletonTrackingState.Tracked的骨骼数据。Kinect能够探测到6个使用者,但是同时只能够追踪到2个使用者的骨骼关节位置信息。具体代码就是两个if判断中的代码:

  if (skel.TrackingState==SkeletonTrackingState.NotTracked)

  if (skel.TrackingState == SkeletonTrackingState.Tracked || skel.TrackingState == SkeletonTrackingState.PositionOnly)

  (4)处理骨骼数据相对简单,首先,我们根据Kinect追踪到使用者的编号,选择一种颜色笔刷。然后利用这只笔刷绘制曲线。CreateFigure方法为每一根骨骼绘制一条直线。GetJointPoint方法在绘制骨骼曲线中很关键,该方法以关节点的三维坐标作为参数,然后调用KinectSensor对象的MapSkeletonPointToDepth方法将骨骼坐标转换到深度影像坐标上去。下面的代码截图展示了CreateFigure和GetJointPoint这两个方法。

  UI界面比较简单,将Grid元素作为根结点,设置背景色为白色,下面是WPF窗口代码:

  6实验效果

  本程序是运行在VS2010上的一个WPF程序,程序运行之后当我们人站在摄像头前时,可以通过一些肢体动作来获取摄像头的感知,摄像头捕捉到了我们的动作之后,即会在程序中画出我们人体骨骼的大致轮廓,这样就实现了我们骨骼跟踪的目的。我们本次项目的主要研究内容就是基于双目视觉的目标跟踪算法研究,通过这样一个小程序的实例,即实现了目标跟踪算法的编写,而我们整个程序也是可以运用到机器人的平台之上的,用于机器人的跟踪或是导航等等,这就使得我们整个程序更具实际意义,我们的研究也更具应用价值。

  参考文献

  [1] 贾云德.机器视觉[M].北京:科学出版社,2000

  [2] Marr D,姚国正等译.视觉计算理论[M].北京:科学出版社,1988

  [3] 潘华,郭戈.立体视觉研究的进展[J].计算机测量与控制.2004,12(12):59-76

  [4] 侯志强,韩崇昭.视觉跟踪技术综述[J].自动化学报.2006,32(4):603-617

  [5] Gary Bradski,Adrian Kaebler.OpenCV.北京:清华出版社.2009


  •   论文部落提供核心期刊、国家级期刊、省级期刊、SCI期刊和EI期刊等咨询服务。
  •   论文部落拥有一支经验丰富、高端专业的编辑团队,可帮助您指导各领域学术文章,您只需提出详细的论文写作要求和相关资料。
  •  
  •   论文投稿客服QQ: 论文投稿2863358778 论文投稿2316118108
  •  
  •   论文投稿电话:15380085870
  •  
  •   论文投稿邮箱:lunwenbuluo@126.com

联系方式

  • 论文投稿客服QQ: 论文投稿2863358778
  • 论文投稿客服QQ: 论文投稿2316118108
  • 论文投稿电话:15380085870
  • 论文投稿邮箱:lunwenbuluo@126.com

热门排行

 
QQ在线咨询
咨询热线:
15380085870
微信号咨询:
lunwenbuluoli