摘 要:目前很多各種各樣的循跡算法都是基于可移動的,固定在移動物體上的攝像頭,這樣很多時候都造成攝像頭所能拍攝的范圍不廣??紤]到這一點,利用外部的攝像頭去控制小車的循跡,增大其能看到的范圍,基于OpenCV的前景檢測,利用多次重復(fù)拍攝并且與背景做差的方法得到小車實時位置,并據(jù)此進行實時修正以減少范圍大了之后精度可能降低的缺點。設(shè)計出一個多次拍攝的圖像進行全局幀差的算法,從而對小車進行定位,再向小車發(fā)出命令修正實際的方向誤差。
關(guān)鍵詞:OpenCV;循跡;前景檢測;重復(fù)拍攝;全局幀差;實時修正
中圖分類號:TP274
這個算法是在一個撿網(wǎng)球小車的項目中實現(xiàn)的,首先通過外部的攝像頭捕捉出網(wǎng)球場中的畫面,然后利用openCV自帶庫函數(shù)中的hough的圓變換算法識別出圓以及找到球的圓心,并且調(diào)整灰度值和三原色值,從而找出所有的網(wǎng)球的坐標,這里不需要進行坐標的變換,因為后面可以看到需要用到的坐標都是屬于圖像上的坐標。根據(jù)這些球的坐標和小車的坐標可以計算出最短的路徑,這個可以理解為一個哈密頓問題,在N小于等于16的情況下可以用狀態(tài)壓縮DP的算法去求解,算法時間是可以接受的,最后把路徑還原出來,通過藍牙把數(shù)據(jù)發(fā)送到小車,小車存儲這些數(shù)據(jù)知道其要走的路線后,開始啟動。在實際中小車不可能完完全全的按照規(guī)定的路線嚴格的走,所以小車必須進行實時的修正路線,在這里我們使用的是基于OpenCV的前景檢測的方法去實現(xiàn)的,通過每一次的偏離計算得到每一次修正的數(shù)據(jù)通過PC端發(fā)送給小車,使其最后達到網(wǎng)球的位置并撿起網(wǎng)球。
1 OpenCV前景檢測循跡過程
1.1 OpenCV中的前景檢測
為了理解前景檢測的概念,我們先要通過建立場景模型,知道前景和背景的概念,一個場景模型可能包含許多層次,從“新的前景”到舊的前景再到背景。在我們的項目中,還存在著目標的移動,通過目標的移動,我們可以識別“真的”前景(新位置)和“假的”的前景(其舊的位置,“空洞”)。
如何檢測這些“新的前景”和“舊的前景”?需要將背景消除,才能進行檢測。最簡單的背景消除方法就是用一幀減去另一幀,然后將足夠大的差別標記為前景。這種方法往往能捕捉運動目標的邊緣。第二個方法就是平均背景法,思路是計算每個像素的平均值和標準差作為它的背景模型。這個方法優(yōu)點是精度比較高,但是計算的時間較長,需要遍歷整幅圖像。
1.2 利用前景檢測循跡
由圖1所示,首先我們先會拍取場地的一幀圖像作為背景。之后小車開始出現(xiàn)在場地中,外部的攝像頭開始采集圖像,假如T1和T2時刻采取的圖像如圖所示。令T1時刻采取的圖像是Pt1,T2時刻采取的圖像是Pt2,背景圖像為Pbg.首先把圖像轉(zhuǎn)換為灰度圖像,然后把T1和T2時的灰度圖像矩陣分別與背景做差。如下等式(1)(2)所示:
中括號表示矩陣的意思。經(jīng)過(4)(5)的過程之后,將兩幅差幀圖像做與操作,使軌跡圖像更精確些。如等式(3)所示。
D1或者是D2是背景消除之后的結(jié)果,得到的RES矩陣結(jié)果就是背景消除之后前景運動軌跡的結(jié)果。
小車中心確定:通過D1或者D2,可以大概確定到小車的位置,因為D1(D2)中已經(jīng)將背景消除,通過運動輪廓的橫縱的最大值確定中心點位置,并且可以通過實驗驗證這個中心位置坐標確定的正確性,以及進行修正,通過OpenCV的一些工具可以在視頻圖像中標出中心點的位置。
小車方向確定:因為每次拍攝的間隔很短,所以我們可以認為每兩次拍攝小車走的都是直線運動,從而通過兩個中心點的連線確定小車當前的方向,如圖2所示。
1.3 移動循跡過程中的修正
修正原理是通過小車當前的坐標和小球坐標(即目標位置坐標),以及上一個終點(撿的上一個球)坐標三個參數(shù)共同確定。
如上圖所示,α是待求角度。SP點表示start point,即小車起點或者是撿起前一個球后的所在位置;NP表示now point,即目前小車已經(jīng)從SP走到NP位置,小車當前時刻所在位置;BP表示ball point,即下一個需要撿起的小球的位置。這三個點的坐標都是可以實時可以從拍攝的幀圖像中取得,因此根據(jù)這三點位置可以知道小車當前偏移理想路徑(圖3中的虛線)的程度,根據(jù)計算得出的角度α對小車運動方向進行修正。
SP到BP直線方程:
NP到BS直線間距離:
NS之間距離:
求解得到α:
根據(jù)α具體的數(shù)值,對小車發(fā)送數(shù)據(jù)進行方向的糾正,理論上α角度值越大,需要糾正的程度越大,糾正通過發(fā)送數(shù)據(jù)改變小車舵機信號上的占空比,從而改變小車的實時方向。當然,在不同的場地上糾正的數(shù)值是不相同的,所以我們只做了對我們場地的修正,需要不停的測試,得到一個合適的修正數(shù)值。也可以獲取場地的一些摩擦因數(shù)和壓力等參數(shù)引入做一個修正參數(shù)的計算模型,不過在實際情況中這些方法都是比較麻煩的,所以我們采用在場地中反復(fù)測試后得到的修正參數(shù)。
2 實驗結(jié)果
2.1 實驗環(huán)境
2.2 結(jié)果演示
圖4是利用MFC開發(fā)的MFC軟件,整個流程是先用”粗識”按鈕識別網(wǎng)球,這個按鈕就是實現(xiàn)了cvHoughCircle()函數(shù)識別圓的功能,當找到的圓過多,可以根據(jù)控制臺打印的提示數(shù)據(jù)調(diào)整點數(shù)值和g值(綠值)后選擇“球的存在”即可以把所有網(wǎng)球找到。第二個步驟是點開視頻,可以實時的看到場地畫面,然后點擊“軌跡”后就可以讓小車開始移動,畫面可以實時跟蹤并顯示軌跡,而且后臺也會發(fā)送數(shù)據(jù)使得小車修正路線。由于此項目當時的攝像頭攝像范圍過小,故實驗將用一個球進行循跡修正的過程。
圖5顯示了識別球后會顯示球的個數(shù)以及他的坐標還有識別時候的綠點數(shù),這些參數(shù)對于如果找到了一些不是網(wǎng)球的圓進行排除是非常有用的。下面就開始展示循跡的過程。
理想的路徑顯然是從車的起點到球的位置,但是現(xiàn)實是不可能的,所以需要進行修正。上圖的紅色部分是前景檢測部分檢測出的不同地方,黃色點是通過計算得出的小車的實時中心位置。
我們再通過下面的4張圖進行更進一步的去理解這整個過程。其實有更多的實驗數(shù)據(jù)結(jié)果,但這些都是需要以圖片或者是視頻的形式展現(xiàn)出來,所以這里給出這次循跡的全部過程。
通過圖7-8可以很清晰的看到整個循跡的過程。采取外部的攝像頭,每隔一定的時間采取一幀圖像,每次通過小車的中心點(上圖黃點)的位置計算修正參數(shù),再把參數(shù)通過藍牙發(fā)送到小車端,讓小車進行修正的運動。
3 結(jié)語
通過這個算法的實現(xiàn),我們發(fā)現(xiàn)在開源的OpenCV基礎(chǔ)上,圖像處理還是有很多方向的研究可以進行的,目前OpenCV上的算法可能都是可以優(yōu)化的,就如識別圓的算法上,根據(jù)現(xiàn)實情況的需要,對算法進行改進。在循跡過程中,可以用到其中的一些背景消除的算法,根據(jù)自己的需要去選擇。但是目前這個循跡算法的缺點是由于采用背景消除,所以不能背景在每個時刻不能改變,否則就會成為下一個前景,混入我們的計算范圍內(nèi),原來的計算范圍僅僅限于前景,所以我們會根據(jù)這點再往后面展開更深的研究如何排除背景變化的影響。
參考文獻:
[1]Zhang Z. Flexible camera calibration by viewing a plane from unknown orientations[C]. //Computer Vision, 1999,Kerkyra: The Proceedings of the Seventh IEEE International Conference, 1999.
[2]OpenCV. http://www.opencv.org.cn [OL].
[3]李江濤,倪國強,王強,等.一種快速準確識別圓形目標的新算法[J].激光與紅外,2007,37(6):576-578.
[4]張運華,邢誠.一種改進的圓檢測算法[J].地礦測繪,2008,24(3):6-8.
[5]胡東紅,汪浩,艾君,等.兩種圖像校正算法在實際應(yīng)用中的比較[J].計算機工程與應(yīng)用,2009,45(13):191-193,226.
[6]湯超.opencv的運動目標檢測[D].廈門大學信息科學與技術(shù)學院,2009.
[7]http://opencv.org [OL].
[8]Musser D R, Derge G J, Saini A.STL Tutorial and Reference Guide: C++ Programming with the Standard Template Library[M].2nd Revised edition. Addison-Wesley Educational Publishers Inc,2001.
[9]黃嵐.王康平,周春光,龐巍,等.粒子群優(yōu)化算法求解旅行商問題[J].東北大學學報(自然科學版),2003,4(41):477-480.
[10]田貴超,黎明,韋雪潔.旅行商問題(TSP)的幾種求解方法[J].計算機仿真,2006,8(23):153-157.
作者簡介:揭展明(1992-),男,廣東中山人,學生,本科,研究方向:云計算;段文迪(1991-),寧夏石嘴山人,學生,本科,研究方向:圖像處理;曹雨(1992-),男,河北人,學生,本科。
作者單位:電子科技大學計算機工程學院極限網(wǎng)絡(luò)計算與服務(wù)實驗室,成都 611731;電子科技大學自動化工程學院,成都 611731