基於MATLAB&攝像頭的實時目標跟蹤


碩士畢業前夕所寫的一篇博客,一直沒有發表出來,沒想到今天有同事竟然翻到了我好幾年不更新的博客,所以就把這篇文章貼出來,算是填補這幾年不更新博客的空白吧。

 

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制作發布程序即可生成可執行文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM