沈洋
(上海海事大學(xué)信息工程學(xué)院,上海 201306)
現(xiàn)今,傳統(tǒng)的水上船舶監(jiān)控方法已經(jīng)無法滿足人們的要求,無人機(jī)具有體積小、操作方便等優(yōu)勢(shì),因此基于無人機(jī)的水上船舶監(jiān)控已經(jīng)成為水上交通管制一個(gè)不可或缺的組成部分。其中運(yùn)動(dòng)目標(biāo)檢測算法是核心算法,特別是具有良好魯棒性、實(shí)時(shí)性能好的算法,對(duì)于實(shí)現(xiàn)更好的水上交通監(jiān)管具有重要意義。
常見的運(yùn)動(dòng)目標(biāo)檢測的算法有三種,分別是幀差分法、光流法以及背景差分法。幀差分法是將兩幀圖像相減,然后將得到的差值和特定的閾值進(jìn)行比較,最終得到運(yùn)動(dòng)目標(biāo),由于兩幀之間的時(shí)間間隔較短,所以對(duì)于運(yùn)動(dòng)緩慢的視頻幀而言,相鄰兩幀之間差別不大,檢測效果并不好;光流法檢測運(yùn)動(dòng)目標(biāo)的思想是根據(jù)光流場的變化,狀態(tài)理想時(shí),它的檢測效果較好,但是一旦光照因素發(fā)生變化,就會(huì)出現(xiàn)誤檢的情況,并且它計(jì)算量大,對(duì)于硬件的要求較高,而且實(shí)時(shí)性不好;背景差分法是將當(dāng)前幀的圖像和建立好的背景模型做減法運(yùn)算,所以背景模型建立的好壞與否直接關(guān)系到最后的檢測結(jié)果是否準(zhǔn)確,所以背景差分法對(duì)背景模型的建立具有很高的要求。
Vibe算法是由Olivier Barnich等知名學(xué)者提出的一種像素級(jí)背景建模(前景檢測)的算法。其他的運(yùn)動(dòng)目標(biāo)檢測算法的背景模型的建立都需要多幀圖像才能完成,Vibe算法的模型初始化只用了視頻圖像的第一幀就完成了,從第二幀圖像就開始檢測運(yùn)動(dòng)目標(biāo),具有良好的實(shí)時(shí)性和適應(yīng)性,但是也存在很多缺陷。例如,在視頻第一幀圖像就有運(yùn)動(dòng)目標(biāo)的情況下,Vibe算法能夠檢測出運(yùn)動(dòng)目標(biāo),同時(shí)在原來的位置也會(huì)檢測出一個(gè)虛假的運(yùn)動(dòng)區(qū)域。另外,當(dāng)運(yùn)動(dòng)目標(biāo)運(yùn)動(dòng)速度緩慢時(shí),該算法會(huì)將該運(yùn)動(dòng)目標(biāo)當(dāng)作背景,檢測結(jié)果中也會(huì)有大量的空洞。對(duì)于Vibe算法的各種缺點(diǎn),本文針對(duì)無人機(jī)航拍視頻中的船舶檢測問題,在Vibe的基礎(chǔ)上,提出了一種新的低空航拍視頻中的船舶檢測方法,將傳統(tǒng)的幀差算法和Vibe算法進(jìn)行融合,實(shí)現(xiàn)了對(duì)無人機(jī)航拍視頻中的船舶檢測,并且準(zhǔn)確性、完整性都有所提高。
Vibe算法的背景模型建立與更新首次運(yùn)用到了隨機(jī)選擇機(jī)制和鄰域傳播機(jī)制,是一種基于樣本的背景建模方法[1]。Vibe算法為每一個(gè)像素建立一個(gè)樣本集,這個(gè)樣本集包括該位置過去時(shí)刻的像素值和它的鄰域位置上的像素值,然后通過對(duì)比樣本集中的像素和該位置現(xiàn)在的像素值,來判斷此像素是前景還是背景,再對(duì)背景模型隨機(jī)的進(jìn)行更新[2]。Vibe算法的基本原理主要由背景模型初始化、前景檢測和背景模型更新這三大部分組成[3-5]。
在Vibe算法的背景模型中,每個(gè)背景像素點(diǎn)都有一個(gè)屬于自己得樣本集合,是否屬于背景像素點(diǎn)還需要進(jìn)一步的比較才能確定。具體的思想就是在八鄰域模型(如表1所示)中為每個(gè)像素點(diǎn)存儲(chǔ)了一個(gè)樣本集,這個(gè)樣本集由該點(diǎn)過去的像素值和其鄰點(diǎn)的像素值的采樣值組成,通過對(duì)比樣本集和新的像素值,來判斷該點(diǎn)是背景點(diǎn)像素點(diǎn),還是前景目標(biāo)像素點(diǎn)。如果該點(diǎn)是屬于背景像素點(diǎn),那么它和樣本集中的像素值應(yīng)當(dāng)差別不大。如圖1所示,SR(V(x))是X為中心R為半徑的圓形區(qū)域,V(x)表示X點(diǎn)處的像素值;M(x)={V1,V2,…,VN}為X處的背景樣本集(樣本集大小為N);通過比較 SR(V(x))與 M(x)交集的個(gè)數(shù)是否大于給定的閾值#min,如果SR(V(x))與M(x)交集的個(gè)數(shù)大于或者等于給定的閾值#min,那么就認(rèn)為X點(diǎn)屬于背景點(diǎn)。這就完成了像素點(diǎn)是前景還是背景的判斷。
背景模型的更新就是使得背景模型能夠跟隨實(shí)際場景中的背景的變化做實(shí)時(shí)的更新,例如背景物體發(fā)生變化,光照發(fā)生變化等。在Vibe算法中,若某點(diǎn)被劃分成背景像素點(diǎn),那么它做背景更新的概率為1/φ。具體的思想為:每一個(gè)背景點(diǎn)有1/φ的概率去更新自己的模型樣本值,同時(shí)也有1/φ的概率去更新它的鄰居點(diǎn)的樣本值。φ為時(shí)間采樣因子。這種采用隨機(jī)選取的更新方法可以是樣本值具有平滑的生命周期。由于是隨機(jī)更新,所以每個(gè)樣本都有相同的幾率被更新,這樣一個(gè)樣本值在時(shí)刻t不被更新的概率是(N-1)/N,假設(shè)時(shí)間是連續(xù)的,那么在dt的時(shí)間過去后,樣本值保持不變的概率是:
可以看出樣本更新與時(shí)間無關(guān),采樣的方式是無記憶的,這也提高了算法的動(dòng)態(tài)適應(yīng)能力。
表1 V(X)的八鄰域模型
圖1 模型像素值比較示意圖
Vibe算法具有良好的適應(yīng)性,能夠在多種場景下適用,通過Vibe算法的檢測原理不難看出,從背景模型的建立,前景目標(biāo)的檢測到最后的背景模型的更新,比較簡單,易于實(shí)現(xiàn),實(shí)時(shí)性較好。但是也存在一些缺點(diǎn),如果運(yùn)動(dòng)目標(biāo)出現(xiàn)在視頻圖像的第一幀時(shí),在后續(xù)的檢測過程中,會(huì)出現(xiàn)虛假的運(yùn)動(dòng)目標(biāo),也就是鬼影。在本文中,當(dāng)水面受到陽光照射時(shí)引起的強(qiáng)反光,以及船舶快速運(yùn)動(dòng)產(chǎn)生的水波紋,都會(huì)引起大量的錯(cuò)誤檢測,速度較慢的船舶,檢測后也會(huì)出現(xiàn)大量空洞。
無人機(jī)航拍的視頻中的待檢測船舶目標(biāo)大小不一,船體運(yùn)動(dòng)緩慢,而且無人機(jī)的運(yùn)動(dòng)軌跡不定,并且航拍的第一幀圖像中就存在船體,因此Vibe算法存在鬼影、誤檢和目標(biāo)檢測不完整等問題,無法快速準(zhǔn)確地完成船舶目標(biāo)檢測。本文在Vibe算法的基礎(chǔ)上提出了結(jié)合幀差法的改進(jìn)算法,利用二者做與運(yùn)算,來確定出前景目標(biāo)。本文的算法流程圖如圖2所示,對(duì)于航拍的視頻連續(xù)讀取兩幀,分別進(jìn)行Vibe檢測,得到前景像素,再將二者進(jìn)行幀差運(yùn)算,再確定前景和背景以及哪些是鬼影。也就是利用當(dāng)前幀的Vibe檢測結(jié)果和前一幀的Vibe檢測結(jié)果做差分運(yùn)算,在進(jìn)行一輪前景像素點(diǎn)與背景像素點(diǎn)的判定。
在上述算法流程圖中,分別將視頻中的第(k-1)幀和第k幀利用Vibe算法完成檢測,通過當(dāng)前幀與背景模型的比較結(jié)果可以得到背景像素點(diǎn)值為0,前景像素點(diǎn)值為255。再對(duì)兩幀Vibe算法的檢測結(jié)果作進(jìn)一步的比較,如果前一幀(k-1幀)對(duì)應(yīng)的像素值是255,而且當(dāng)前幀(k幀)像素值還是255時(shí),就應(yīng)當(dāng)判斷該點(diǎn)是誤檢點(diǎn),是鬼影,需要對(duì)鬼影進(jìn)行消除,把該點(diǎn)的像素值做置零處理,而且進(jìn)行背景更新操作;當(dāng)前一幀(k-1)幀對(duì)應(yīng)的像素值是0,而當(dāng)前幀(k幀)對(duì)應(yīng)的像素值為255時(shí),就應(yīng)當(dāng)判斷該點(diǎn)是前景運(yùn)動(dòng)點(diǎn),作為前景輸出。因此得到判斷第k幀對(duì)應(yīng)的某個(gè)像素點(diǎn)的屬性S判斷為式(2)所示。
圖2
在實(shí)際的環(huán)境中,檢測過程容易受到各種噪聲的干擾而影響到檢測結(jié)果的準(zhǔn)確性,最后會(huì)使得前景檢測出來的二值圖片在目標(biāo)上出現(xiàn)黑點(diǎn)以及背景上會(huì)出現(xiàn)白點(diǎn),即目標(biāo)檢測不完整和誤檢點(diǎn)。對(duì)于這種干擾,小通過開運(yùn)算使得物體的邊緣平滑,然后用閉運(yùn)算填補(bǔ)船舶內(nèi)部的空洞,最后通過最小外接矩形完成對(duì)船舶的框定。
本次實(shí)驗(yàn)所用視頻是無人機(jī)在黃浦江流域上方拍攝,視頻分辨率為1280×720,視頻幀率為25幀/s;系統(tǒng)平臺(tái)是Ubuntu,軟件實(shí)施平臺(tái)為OpenCV 2.4.8。
圖3和圖4給出了垂直拍攝情況下單個(gè)船只和多個(gè)船只兩組實(shí)驗(yàn)結(jié)果的分析對(duì)比。各種檢測算法對(duì)運(yùn)動(dòng)船舶目標(biāo)的檢測情況各不相同。和傳統(tǒng)的Vibe算法比較起來,改進(jìn)算法在準(zhǔn)確性、目標(biāo)完整性方面都有不小的提升。具體的實(shí)驗(yàn)結(jié)果分析如下:根據(jù)圖3(2)和圖4(2)可以看出對(duì)于運(yùn)動(dòng)緩慢的船只,幀差法無法提取出完整的目標(biāo)圖像,船舶輪廓嚴(yán)重缺損;Vibe算法的結(jié)果由圖 3(3)和圖 4(3)所示,可以看出,船體輪廓不清晰,內(nèi)部存在空洞,并且存在一定的鬼影[6-7];圖3(4)和圖4(4)是本文算法的結(jié)果圖,如圖所示,針對(duì)于前兩種算法的運(yùn)動(dòng)目標(biāo)不完整和誤檢測問題做出了改善,填補(bǔ)了內(nèi)部的空洞,消除了誤檢點(diǎn),準(zhǔn)確地得到了運(yùn)動(dòng)船舶的前景圖。最后。圖3(5)和圖4(5)給出了用最小外接矩形對(duì)船舶目標(biāo)的檢測結(jié)果。
圖3 單個(gè)船只垂直拍攝實(shí)驗(yàn)結(jié)果圖
圖4 多個(gè)船只垂直拍攝實(shí)驗(yàn)結(jié)果圖
本文從對(duì)無人機(jī)航拍視頻中的船舶目標(biāo)檢測的實(shí)際要求出發(fā),用前景目標(biāo)檢測算法中最新的Vibe算法為基礎(chǔ),對(duì)其在運(yùn)動(dòng)目標(biāo)檢測的缺點(diǎn)提出了改進(jìn),融合了幀差法,通過開閉運(yùn)算對(duì)得到的前景目標(biāo)作進(jìn)一步的優(yōu)化,將理論算法和實(shí)際情況結(jié)合到一起,分別對(duì)于多個(gè)船只和單個(gè)船只的視頻進(jìn)行效果測試,實(shí)現(xiàn)結(jié)果表明,該算法實(shí)現(xiàn)了對(duì)于基于無人機(jī)航拍視頻的船舶檢測,并且能夠消除誤檢點(diǎn),同時(shí)可以獲得更加完整的目標(biāo)。