硕士毕业前夕所写的一篇博客,一直没有发表出来,没想到今天有同事竟然翻到了我好几年不更新的博客,所以就把这篇文章贴出来,算是填补这几年不更新博客的空白吧。
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输入实时跟踪等。这些基本功能配合起来可以实现一套完整的、实时的跟踪目标选择à目标区域学习à目标区域跟踪的功能。
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 跟踪区域学习模块
作为一个实时目标跟踪软件,所需要最为重要的功能之一即是可让用户选择任意的区域以实现跟踪的目的,即实现所选即所跟踪。故本软件通过检测用户对于感兴趣区域鼠标点击事件,获取用户当前点击区域的坐标值,将所得到的坐标值通过全局变量反馈给学习区域回调函数,从而划定了学习区域。通过此种方式实现了用户自主选择跟踪区域的目的,能够在软件中体现出良好的用户友好度。点击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制作发布程序即可生成可执行文件。
来源:oschina
链接:https://my.oschina.net/u/4388720/blog/4028299