賈紅賓
摘 要:本文構(gòu)建了一個基于OpenCV軟件的運動目標檢測跟蹤實驗平臺,采用CamShift算法對攝像頭視野中的運動目標進行實時檢測和跟蹤,取得較好的效果,為計算機視覺研究奠定基礎(chǔ)。
關(guān)鍵詞:目標跟蹤;CamShift算法;OpenCV
1 引言
隨著數(shù)字圖像處理技術(shù)的發(fā)展,基于視頻信息的目標檢測跟蹤技術(shù)成為當今計算機視覺領(lǐng)域研究的熱點,其在安防監(jiān)控、智能交通機、器人等領(lǐng)域有著廣泛應用前景。OpenCV作為一個開源發(fā)行的跨平臺計算機視覺庫,實現(xiàn)了 數(shù)字圖像處理和計算機視覺方面的很多通用算法,具有簡單易用、功能強大、移植方便等優(yōu)越性能,廣泛用于計算機視覺領(lǐng)域研究。本文借助OpenCV計算機視覺庫和VC++6.0編程環(huán)境,構(gòu)建了一個運動目標檢測跟蹤實驗平臺,對從攝像頭采集來的圖像數(shù)據(jù)進行實時分析、處理,從而實現(xiàn)對運動物體的檢測與跟蹤。
2 OpenCV簡介[1]
OpenCV是Intel開源計算機視覺庫(Open Computer Vision)的簡稱。它由一系列 C 函數(shù)和少量 C++ 類構(gòu)成。OpenCV實現(xiàn)了圖像處理和計算機視覺方面的很多通用算法。OpenCV 擁有包括300多個C函數(shù)的跨平臺的中、高層API。它不依賴與其它的外部庫,盡管也可以使用某些外部庫。OpenCV具有以下特點:
(1)開放源碼
(2)基于Intel處理器指令集開發(fā)的優(yōu)化代碼
(3)統(tǒng)一的結(jié)構(gòu)和功能定義
(4)強大的圖像和矩陣運算能力
(5)方便靈活的用戶接口
(6)支持Windows和Linux操作系統(tǒng)
由于有了以上性能特點,OpenCV函數(shù)庫功能強大,簡單易用,移植也很方便,不失為學生和科研人員進行數(shù)字圖像處理和計算機視覺方面學習和研究的好工具。
3 運動物體的檢測與跟蹤
3.1 目標檢測
目標檢測即為從攝像機視野區(qū)域的序列圖像中將進入該區(qū)域的運動物體從場景中提取出來。運動目標檢測的算法依照目標與攝像機之間的關(guān)系可以分為靜態(tài)背景下運動檢測和動態(tài)背景下運動檢測[2]。背景差分法、幀間差分法以及光流法等是靜態(tài)背景下運動目標檢測的常用方法。對于動態(tài)背景下運動目標檢測,其算法要比靜態(tài)背景下的運動目標檢測復雜得多。
3.2 目標跟蹤
視頻信息中,運動目標跟蹤就是在圖像序列中尋找與檢測目標匹配最相似目標區(qū)位置的過程。簡單的說,就是在攝像機采集的序列圖像中為目標確定在圖像區(qū)域中的位置。跟蹤算法通常有以下四類:基于主動輪廓的跟蹤、基于特征的跟蹤、基于區(qū)域的跟蹤和基于模型的跟蹤等。算法的精度、魯棒性和實時性是衡量跟蹤效果的主要指標。
4 運動目標檢測跟蹤的算法實現(xiàn)
4.1 運動檢測跟蹤算法
平臺硬件由PC機和通用攝像機組成,攝像機所帶開發(fā)包提供二次開發(fā)的API接口函數(shù)。平臺在進行運動物體檢測跟蹤時所采用的算法是:首先利用“幀差法”檢測出初始的運動目標;一旦認為此目標合法,便根據(jù)目標在HSI(色調(diào)、飽和度、強度)空間中H通道的色調(diào)特性,利用“連續(xù)適應性均值移動算法(CamShift)”,對目標進行跟蹤。
CamShift算法簡述如下:首先,在圖像HSI空間中計算H通道(色彩通道)分量的1D直方圖;接著,利用此1D直方圖將原圖改建成2D概率分布圖;第三步,計算出目標區(qū)域的重心;第四部,利用經(jīng)典的“Mean Shift”算法,不斷平移調(diào)整窗口中心到與目標重心重合;第五步,將上一幀的窗口大小和中心,作為下一幀Mean Shift算法搜索窗口的初始值,在下一幀中繼續(xù)Mean Shift運算。
上述運動物體檢測和跟蹤的算法運算量小,跟蹤效果好。只要初始抓取目標無誤,并且在色彩空間上目標與背景有一定偏差,視頻跟蹤便能夠達到相當?shù)臏蚀_度。更好的一點是,此算法在跟蹤同一場境內(nèi)多個運動目標其中的一個時的效果,是其它同樣計算復雜度的算法所難以比擬的。
4.2 VC++6.0編程環(huán)境下的實現(xiàn)
目標檢測與跟蹤的算法程序編寫在VC++6.0環(huán)境下結(jié)合OpenCV進行實現(xiàn)。為了達到良好的實時性能,充分利用CPU資源,本平臺采用多線程并發(fā)處理模式進行編程,以達到提高程序運行效率的目的[3]。
本平臺中,算法程序由兩個線程組成:MainThread線程和GetImageThread線程。MainThread線程是算法實現(xiàn)的主線程,主要功能就是利用OpenCV函數(shù)庫,對從攝像頭獲取的圖像數(shù)據(jù)進行分析處理,同時,它負責啟動GetImageThread線程。GetImageThread線程的主要工作就是循環(huán)地從攝像頭讀取數(shù)據(jù)放到緩存中,以供主線程分析。在視頻采集處理的過程中,GetImageThread線程向緩存中寫數(shù)據(jù)與從緩存中讀數(shù)據(jù)將不可避免地操作同一塊緩存。因此,為防止數(shù)據(jù)讀寫沖突出錯,兩線程在操作這塊緩存時都必須上鎖,可以通過“互斥量”來實現(xiàn)的。此外,為防止主線程重復地分析同一幀圖像,要求MainThread線程必須等待GetImageThread線程的一個信號才能進行數(shù)據(jù)讀取和分析。
5 實驗結(jié)果
經(jīng)過實驗證明,本文構(gòu)建的基于OpenCV計算機視覺庫的運動目標檢測跟蹤實驗平臺可以在實時顯示圖像的基礎(chǔ)上,實時檢測和跟蹤運動目標,并且檢測和跟蹤都具有較高的魯棒性。在跟蹤過程中,即使目標保持靜止,程序也不會丟失對目標的跟蹤。以橙色小球檢測跟蹤實驗為例,檢測跟蹤結(jié)果如圖1所示:
實踐表明,OpenCV使得在PC機上的數(shù)字圖像處理和計算機視覺處理變得更加簡單便捷、高效優(yōu)化。本平臺的構(gòu)建為計算機視覺研究提供了一個基礎(chǔ)平臺,對學習和掌握OpenCV、熟悉圖像處理技術(shù),特別是運動目標跟蹤方面的知識,以及提高Windows操作系統(tǒng)下的C++編程能力等方面,能夠起到很大的作用。
參考文獻
[1] 布拉德斯基.學習OpenCV [M], 北京:清華大學出版社,2009.
[2] 張娟,毛曉波,等.運動目標跟蹤算法研究綜述[J],《計算機應用研究》, 2009, 26(12):4407-4410
[3] Jeffery Richter. Windows核心編程[M],北京: 機械工業(yè)出版社,2008.