碩士畢業前夕所寫的一篇博客,一直沒有發表出來,沒想到今天有同事居然翻到了我好幾年不更新的博客,因此就把這篇文章貼出來,算是填補這幾年不更新博客的空白吧。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製做發佈程序便可生成可執行文件。