基于MATLAB&摄像头的实时目标跟踪

硕士毕业前夕所写的一篇博客,一直没有发表出来,没想到今天有同事居然翻到了我好几年不更新的博客,因此就把这篇文章贴出来,算是填补这几年不更新博客的空白吧。web

 

MATLAB界面设计功能强大,同时制做出的界面美观大方,功能上亦是很是直观,另外因为本文前述部分算法仿真也是基于MATLAB所实现,故可有效避免MATLAB与其余语言的混合编程,以减小软件界面设计难度。MATLAB为用户开发图形界面提供了一个方便高效的集成开发环境—GUIDE,几乎全部的工做都可以在GUIDE所提供的环境和工具中实现。在编写完成后,GUIDE将用户保存设计好的GUI界面保存在一个FIG资源文件中,同时还可以生成包含GUI初始化和组建界面布局控制代码的M文件。固然基于MATLAB的GUI设计也可避开GUIDE的使用,但相对来讲更为复杂,不够直观,且效率会大大下降。算法

 

在MATLAB 2014a环境下,经过在命令行输入guide或单击MATLAB主窗口的快速启动按钮便可以打开GUIDE编辑对话框。在新建的空GUI中添加本身须要的菜单、按钮等控件,最后经过编写回调函数完成须要的控件功能,便可完成整个GUI软件界面的编写,在GUIDE下所生成的界面框架如图  所示,在此基础上只要想应的为每一个按键、坐标及编辑框添加相应的回调函数和句柄及设置相应参数便可完成整个GUI的设计工做。编程

利用MATLAB所生成的界面系统可在其自带的编译功能生成可执行文件,在安装了MATLAB编译器(MCR)的机器上便可完美运行该GUI及其算法所能实现的效果。下面简要介绍一下各模块的功能以及实现。框架

本文使用MATLAB 2014a环境开发基于摄像头的实时目标跟踪软件界面,软件界面主体如图  所示。该软件能够实现的功能主要包括:Camera实时输入及显示、Camera输入暂停并抓取图像帧、用户手动选择跟踪区域、跟踪区域坐标显示及Camera输入实时跟踪等。这些基本功能配合起来能够实现一套完整的、实时的跟踪目标选择à目标区域学习à目标区域跟踪的功能。ide

1.3.1   Camera实时采集模块函数

 摄像头的实时画面在软件中的实时显示是本软件最基础的工做,该过程可描述为三部分:首先经过在GUIDE中建立axes1坐标,确立视频在整个GUI中的显示位置;以后调用web Camera的视频数据流,经过循环调用的方式获取到每一帧的信息;最后在回调函数中指定每一帧显示窗口的句柄(Handle)为Axes1。以上步骤便可实如今MATLAB的GUIDE中实时显示摄像头所传输过来的视频流。在保证摄像头链接成功,且可以被正确调用的情形下单击软件GUI界面上 按钮所获取到的实时图像示例如图  所示。工具

 

本软件中使用obj=videoinput('winvideo',1,'YUY2_640x480')命令来实现视频文件的读取以及显示图像的分辨率控制等功能。以后利用get函数获取每一帧的尺寸以及颜色通道数,最后经过指定图像句柄hImage,利用preview(obj,hImage)便可在当前句柄窗口中显示图像。布局

如单击 按钮便可起到关闭摄像头视频流的做用,此时软件将自动截取最后一帧的图像显示在窗口内,该功能经过在该按钮的callback函数中调用pause()函数便可实现。学习

 

1.3.2  跟踪区域学习模块ui

做为一个实时目标跟踪软件,所须要最为重要的功能之一便是可以让用户选择任意的区域以实现跟踪的目的,即实现所选即所跟踪。故本软件经过检测用户对于感兴趣区域鼠标点击事件,获取用户当前点击区域的坐标值,将所获得的坐标值经过全局变量反馈给学习区域回调函数,从而划定了学习区域。经过此种方式实现了用户自主选择跟踪区域的目的,可以在软件中体现出良好的用户友好度。点击GUI界面中的 按钮,系统会自动调用摄像头此时画面,3秒以后截取一帧并显示在窗口中(间隔时间3秒主要是让用户调整摄像头位置及其余参数),以后对于该帧静止画面,用户可用鼠标单击任何感兴趣的区域,选择为跟踪目标。单击完成以后系统界面会显示出当前用户所选择跟踪区域坐标,跟踪区域设置为一矩形,长和宽在软件中分别设置为默认值25pixel和45pixel。当点击某一学习画面,界面获取到学习区域坐标的示意图如图  所示。

 

学习模块调用了自编函数ButttonDownFcn,以实如今检测到鼠标点击事件时获取此时该点在整个图片中的坐标位置,以后以global x; global y全局变量的形式传递到学习算法的区域选择参数中去。同时经过set(handles.edit1,'String',x)命令参数将坐标值显示在界面的编辑框中,据此也能够判断用户是否选择了正确的区域。

 

1.3.3  跟踪模块

这是本软件算法最重要的部分,最主要的ObjectTracking功能都在此部分实现。本模块经过提供实时的摄像头视频流,并结合目标学习部分的学习区域和回调函数中所使用的跟踪算法来实现对每一帧视频帧的实时跟踪显示。仿真结果代表,在本GUI环境中经过学习以后的区域可以有效的在摄像头实时显示的条件下被跟踪检测到。点击软件界面中的 按钮,便可进入实时跟踪模式,在学习模块中所选择的区域会以一个25*45像素的矩形框显示出来,而且随着摄像头的移动该矩形框可以随之移动从而保持始终对该区域的跟踪。GUI中使用的一个示例如图   所示。

 

 摄像头移动以后蓝色矩形框跟踪目标区域示意如图   所示。

 

 做为一个面向用户的程序,若是要脱离编译环境实现界面中各个按钮的功能,就须要调用实现编译好的各类算法程序,在源程序中将这些程序都以M文件的形式保存,方便MATLAB的调用执行。但MATLAB对运行环境的要求较为苛刻,没法知足通常用户须要随时运行的基本需求,此时就要考虑将MATLAB文件转化为可执行文件。利用MATLAB的deploytool工具便可将须要的M文件、数据文件和资源文件编译为可执行程序,将可执行程序与MCR一块儿打包后利用VS2010制做发布程序便可生成可执行文件。

相关文章
相关标签/搜索