摘 要:CAMSHIFT算法是一種基于顏色直方圖的目標跟蹤算法。在視頻跟蹤過程中,CAMSHIFT算法利用選定目標的顏色直方圖模型得到每幀圖像的顏色投影圖,并根據上一幀跟蹤的結果自適應調整搜索窗口的位置和大小,得到當前幀中目標的尺寸和質心位置。在介紹Intel公司的開源OpenCV計算機視覺庫的基礎上,采用CAMSHIFT跟蹤算法,實現運動目標跟蹤,解決了跟蹤目標發生存在旋轉或部分遮擋等復雜情況下的跟蹤難題。實驗結果表明該算法的有效性、優越性和可行性。
關鍵詞:目標跟蹤;CAMSHIFT算法;OpenCV;顏色直方圖
中圖分類號:TP391文獻標識碼:B文章編號:1004373X(2008)2012803
Moving Object Tracking Method and Implement Based on OpenCV
LI Zhenwei1,2,CHEN Chong1,2,ZHAO You1
(1.Changchun Observatory,National Astronomical Observatories,Chinese Academy of Sciences,Changchun,130117,China;
2.Graduate School,Chinese Academy of Sciences,Beijing,100049,China)
Abstract:CAMSHIFT is an object tracking algorithm based onthe color histogram.In the process of object tracking,CAMSHIFT operates on a color back-projection image produced from object histogram model in current frame and finds the location and size of the current frame by adaptively adjusting the size and the location of the searching windows according to the tracking results of the previous frame in the video.On the basis of introducing OpenCV(an Intel open source computer vision library),through CAMSHIFT algorithm,the paper realizes moving object tracking and resolves some problems including distractor and occlusion by other objects.Experimental results show good performances,superiority and feasibility of the algorithm.
Keywords:object tracking;CAMSHIFT algorithm;OpenCV;color histogram
目標跟蹤是計算機視覺的一個重要分支,日益廣泛應用于科學技術、國防安全、航空、醫藥衛生以及國民經濟等領域。實現目標跟蹤的關鍵在于完整地分割目標、合理提取特征和準確地識別目標,同時,要考慮算法實現的時間,以保證實時性。當視頻圖像中被跟蹤目標發生姿態變化,存在旋轉或部分遮擋時,簡單的灰度模板或者Hausdorff距離匹配一般很難達到實時跟蹤目標的要求,出現誤匹配或者跟蹤丟失的情況,而且跟蹤效率較低。
Gary R.Bradski提出的CAMSHIFT[1](Continuously Adaptive Mean Shift)算法是以顏色直方圖為目標模式的目標跟蹤算法,可以有效地解決目標變形和部分遮擋的問題,而且運算效率很高。該文首先詳細介紹CAMSHIFT算法,并結合Intel公司開發的開源OpenCV計算機視覺庫,實現了運動目標跟蹤,并驗證了CAMSHIFT算法的有效性以及展現OpenCV計算機視覺庫的靈活性和優越性。
1 CAMSHIFT算法
由于RGB顏色空間對光照亮度變化比較敏感[2],為了減少光照亮度變化對跟蹤效果的影響,CAMSHIFT算法將圖像由RGB顏色空間轉化到HSV(Hue,Saturation,Value)顏色空間再進行后續處理。
圖1是CAMSHIFT算法流程。首先選擇大小為S的初始搜索窗口,然后對該窗口中每一個像素點的H通道上采樣,得到運動目標的色調(Hue)直方圖,再將該直方圖保存下來作為搜索目標的顏色直方圖模型。在目標跟蹤過程中,對攝像頭當前幀圖像的每一個像素,通過查詢目標的顏色直方圖模型,可以得到該像素為目標像素的概率。經上述預處理,視頻中每一幀圖像都轉化為目標顏色概率分布圖,也稱為目標顏色投影圖。在一般情況下,將投影圖轉化為8位的灰度投影圖,概率為1的像素值設為255,概率為0的像素值為0,其他像素也轉換為相應的灰度值。
圖1中虛線部分是CAMSHIFT算法的核心。設點(x,y)為搜索窗口中的像素位置,I(x,y)是投影圖中(x,y)處的像素值。為此,定義搜索窗口的零階矩M00和一階矩M01,M10分別如下:
M00=∑x∑yI(x,y)
M01=∑x∑yyI(x,y)
M10=∑x∑yxI(x,y)
圖1 CAMSHIFT算法跟蹤流程
該搜索窗口的質心位置為:
(xc,yc)=(M10/M00,M01/M00)
計算跟蹤目標的方向和尺寸:
二階矩:
M20=∑x∑yx2I(x,y)
M02=∑x∑yy2I(x,y)
M11=∑x∑yxyI(x,y)
令:
a =M20 /M00 -x2c,b=2(M11/M00-xcyc),
c =M02 /M00 -y2c
目標長軸的方向角為:
θ=12tan-1(ba-c)
圖像中目標的長軸和短軸的長度計算公式:
l=(a+c)+b2+(a-c)22,
w=(a+c)-b2+(a-c)22
然后,根據零階矩M00調整搜索窗口的大小,并將搜索窗口的中心移動到質心,如果移動距離大于預先設定的固定閾值,則重新計算調整后的窗口質心,進行新一輪的窗口位置和尺寸調整,直到窗口中心與質心間的距離小于預設的固定閾值,或者循環運算的次數達到某一最大值,認為收斂條件滿足,進入下一幀圖像進行心的目標搜索。在下一幀圖像中,利用上一幀圖像中最終得到的窗口質心位置和S=2M00256來設置新的搜索窗口位置和尺寸。CAMSHIFT跟蹤算法在視頻單幀內與幀間都根據上一步得到的M00自適應地調整搜索窗口的大小,因而可以適應跟蹤目標動態變形的情況。
2 計算機視覺類庫OpenCV簡介
開放源代碼的計算機視覺類庫OpenCV( Intel@ Open Source Computer Vision Library)由英特爾公司位于俄羅斯的研究實驗室所開發,它是一套可免費獲得的、由一些C函數和C++類所組成的庫,用來實現一些常用的圖像處理及計算機視覺算法。
OpenCV主要用于對圖像進行一些高級處理,比如說特征檢測與跟蹤、運動分析、目標分割與識別以及3D重建等。
與其他計算機視覺工具相比,OpenCV的優越性如表1所示:
表1 圖像處理、計算機視覺工具比較(IPL,openCV,IPP,visDSK與 Matlab)
開發工具開發單位應用領域免費情況源碼公開與否備注
IPLIntel圖像處理Free不公開已被并入到IPP
OpenCVIntel圖像處理、計算機視覺Free公開基于Intel芯片代碼優化
IPPIntel集成開發環境庫(圖像處理、信號處理等)Not free不公開基于Intel芯片代碼優化
VisDSKMircrosoft圖像處理Free公開無優化
MatlabMathWorks多學科、多種工作平臺Not free不公開速度慢,不宜編譯成可執行文件
OpenCV是Intel公司開發的圖像處理和計算機視覺函數庫,它有以下特點:
(1) 開放C及C++源碼;
(2)基于Intel處理器指令集開發的優化代碼;
(3)統一的結構和功能定義;
(4)強大的圖像和矩陣運算能力;
(5)方便靈活的用戶接口;
(6) 同時支持MS-Windows,Linux平臺;
(7) 在速度上OpenCV還有Intel 公司的mmx和ssl優化。
2.1 OpenCV的數據結構
OpenCV設計一些基本數據類型,基本的數據類型包括:圖像類的IplImage,矩陣類的CvMat,可變集合類的CvSeq,CvSet,CvGraph以及用于多維柱狀圖的混合類CvHistogram。輔助數據類型包括:用于表示二維點坐標的CvPoint,用于表示圖像寬和高的CvSize等。
2.2 OpenCV的函數體系
OpenCV中每個函數的命名都以“cv”開始,然后是該函數的行為及目標。例如用來創建圖像的函數“cvCreateImage”,載入圖像的函數“cvLoadImage”。OpenCV是為圖像處理及計算機視覺在實際工程中的應用而設計的一個類庫,其中所有的函數都由于其在實際應用中所實現的不同的功能而分屬不同的類型,主要的函數類型有:
(1) 基本的圖像處理與分析函數。
這個類型的函數主要用于實現一些基本的圖像處理與分析功能,例如圖像平滑函數cvSmooth,Sobel算子cvSobe,l Canny邊緣分割函數cvCanny等。
(2) 結構分析函數。
包括有輪廓處理函數,幾何學函數以及平面細分函數。
(3) 運動分析與目標跟蹤函數。
包括有用于運動分析與目標跟蹤的函數,例如背景重建函數cvAcc,用光流法或動態輪廓模型來實現目標跟蹤的函數cvCalcOpticalFlowBM和cvSnakeImage以及卡爾曼濾波函數CvKalman等。
(4) 攝像機標定和3D重建函數。
包括有用于攝像機標定,姿態估計以及從兩個攝像機進行3D相似重構的函數。
(5) GUI與視頻處理函數。
包括有高級圖形用戶接口highGUI用以實現對圖像的載入、顯示及保存等基本操作以及用以實現視頻輸入輸出及處理的函數。
3 CAMSHIFT算法實現
在OpenCV庫中,CvCamShiftTracker類就是用來實現CAMSHIFT算法的,使得進行二次開發變得很簡單。該函數為:
int cvCamShift( const CvArr* prob_image,CvRect window,CvTermCriteria criteria,CvConnectedComp* comp,CvBox2D* box=NULL );
prob_image:目標直方圖的反向投影
window:初始搜索窗口
criteria:確定窗口搜索停止的準則
comp:生成的結構,包含收斂的搜索窗口坐標 (comp→rect 字段) 與窗口內部所有像素點的和 (comp→area 字段).
box:目標的帶邊界盒子。如果非 NULL,則包含目標的尺寸和方向。
利用該函數,在VC6.0開發環境下,就容易實現CAMSHIFT算法跟蹤運動物體,圖2是程序界面:
圖2 CAMSHIFT跟蹤界面
4 實驗結果與分析
在本實驗中,用一個攝像頭來跟蹤一運動物體,下面圖3~圖6一系列圖像是采用CAMSHIFT算法跟蹤運動物體部分圖像。
圖3 攝像頭拍到的場景
圖4 手動選中的目標物體
圖5 物體快速移動時跟蹤目標
圖6 物體發生旋轉、變形時跟蹤目標物體
由此可見,基于顏色直方圖的CAMSHIFT算法可以有效地解決目標變形和旋轉問題,而且運算效率很高,可以實時跟蹤運動目標。
5 結 語
本文在詳細分析CAMSHIFT算法原理的基礎上,采用Intel公司開發的OpenCV視覺庫,在VC6.0開發環境下,實現了運動目標實時跟蹤,解決了目標旋轉、變形、部分遮擋問題。同時,可以看到,在開源庫OpenCV的基礎上,根據自己所開發應用程序所要實現的功能選擇所需的庫函數,能夠大大減少在計算機視覺領域中的開發時間和精力,縮短程序開發的周期。
參考文獻
[1]Bradski G R.Computer Video Face Tracking for Use in a Perceptual User Interface[J].Intel Technology Journal,1998,2:214-219.
[2]Boye M.The Effects of Caputre Conditions on the CAMSHIFT Face Tracker[R].Alberta,Canada:Department of Computer Science,University of Calgary,2001.
[3]Comaniciu D,Ramesh V,Meer R.Real-time Tracking of Non-rigid Objects Using Meanshift[A].Proceeding of the IEEE Conference on Computer Vision and Pattern Recognition[C].Dublin,Ireland,2000,2:142-149.
[4]張宏志,張金換,黃世霖,等.基于Camshift的目標跟蹤算法[J].Computer Engineering and Design,2006,27(11):2 012-2 014.
[5]劉雪,常發亮,王華杰.基于改進Camshift算法的視頻對象跟蹤方法[J].微計算機信息,2007(21):297-298,305.
[6]孫鑫,余安平.VC++深入詳解[M].北京:電子工業出版社,2006.
[7]劉瑞禎,于仕琪.OpenCV教程基礎篇[M].北京:北京航空航天大學出版社,2007.
[8]Intel Open Source Computer Vision Library Reference Manual[EB/OL].http://www.intel.com/research/mrl/research/opencv/.
[9]http://blog.csdn.net/hunnish.
[10]http://tech.groups.yahoo.com/group/OpenCV.
作者簡介 李振偉 男,1983年出生,河南安陽人,碩士研究生。研究方向為視頻運動目標跟蹤。
陳 翀 碩士研究生。
趙 有 研究員、博士生導師。
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文